PHPMailer error " ne pouvait pas instancier la fonction mail"

j'utilise le mail() exemple de base légèrement modifié pour mon ID utilisateur et je reçois l'erreur "Mailer Error: Could not instanciate mail function"

si j'utilise la fonction mail -

mail($to, $subject, $message, $headers);

cela fonctionne très bien, bien que j'ai des difficultés à envoyer du html, c'est pourquoi J'essaie PHPMailer.

voici le code:

<?php
require_once('../class.phpmailer.php');

    $mail             = new PHPMailer(); // defaults to using php "mail()"
    $body             = file_get_contents('contents.html');
    $body             = eregi_replace("[]",'',$body);
        print ($body ); // to verify that I got the html
    $mail->AddReplyTo("reply@domain.com","my name");
    $mail->SetFrom('from@domain.com', 'my name');
    $address = "to@domain.com";
    $mail->AddAddress($address, "her name");
    $mail->Subject    = "PHPMailer Test Subject via mail(), basic";
    $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
    $mail->MsgHTML($body);
    $mail->AddAttachment("images/phpmailer.gif");      // attachment
    $mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

    if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent!";
    }
?>
29
demandé sur Josh 2009-08-19 03:20:20

15 réponses

Essayez d'utiliser SMTP pour envoyer un email:-

$mail->IsSMTP();
$mail->Host = "smtp.example.com";

// optional
// used only when SMTP requires authentication  
$mail->SMTPAuth = true;
$mail->Username = 'smtp_username';
$mail->Password = 'smtp_password';
24
répondu Mukesh Chapagain 2011-08-22 10:00:53
$mail->AddAddress($address, "her name");

devrait être changée en

$mail->AddAddress($address);

Cela a fonctionné pour mon cas..

11
répondu Avinash 2011-08-31 12:09:07

vous devez vous assurer que votre adresse de from est une configuration valide du compte de messagerie sur ce serveur.

10
répondu Dan Fare 2010-06-19 07:31:15

Cela a fonctionné pour moi

$mail->SetFrom("from@domain.co","my name", 0); //notice the third parameter
9
répondu Matías Cánepa 2016-02-27 20:52:09

si vous envoyez des pièces jointes et que votre code fonctionne pour les petites pièces jointes mais ne fonctionne pas pour les grosses pièces jointes:

si vous obtenez l'erreur "ne peut pas instancier la fonction mail" erreur lorsque vous essayez d'envoyer de gros e-mails et votre journal D'erreurs PHP contient le message "ne peut pas envoyer de message: trop gros" alors votre agent de transfert de courrier (sendmail, postfix, exim, etc) refuse de livrer ces e-mails.

LA solution est de configurer le MTA pour permettre une plus grande attachement. Mais ce n'est pas toujours possible. La solution alternative est de utilisez SMTP. Vous aurez besoin de l'accès à un serveur SMTP (et des identifiants de connexion si votre serveur SMTP nécessite une authentification):

$mail             = new PHPMailer();
$mail->IsSMTP();                           // telling the class to use SMTP
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = "mail.yourdomain.com"; // set the SMTP server
$mail->Port       = 26;                    // set the SMTP port
$mail->Username   = "yourname@yourdomain"; // SMTP account username
$mail->Password   = "yourpassword";        // SMTP account password

par défaut, PHPMailer utilise PHP mail() fonction qui utilise les paramètres de php.ini qui utilise normalement sendmail (ou quelque chose de similaire). Dans l'exemple ci-dessus nous remplacer le comportement par défaut.

7
répondu Salman A 2015-10-02 06:41:06

votre code a l'air bon, avez-vous oublié D'installer PostFix sur votre serveur?

sudo apt-get install postfix

Il a travaillé pour moi ;)

Cheers

4
répondu Erenss 2018-09-21 12:55:56

j'ai eu ce problème, et après avoir fait un peu de débogage, et des recherches, j'ai réalisé que le serveur (Godaddy) peut avoir des problèmes.

je vous recommande de contacter votre Fournisseur d'hébergement Web et de parler au sujet de Quota Restrictions sur la fonction mail (ils le font pour empêcher les gens de faire des robots spam ou des emails de masse (spam) ).

ils peuvent être en mesure de vous informer de leurs limites, et si vous les dépassez. Vous pouvez également mettre à niveau limite en allant à Privé serveur.

après avoir parlé avec GoDaddy pendant 15 minutes, le support technique a pu résoudre ce problème en 20 minutes.

cela m'a beaucoup aidé, et j'ai voulu le partager pour que si quelqu'un d'autre tombe dessus, il puisse essayer cette méthode si tout échoue, ou avant d'essayer autre chose.

1
répondu Kray 2017-01-21 07:47:19

PHPMailer aider les docs sur cette erreur a aidé à me mettre sur la bonne voie.

ce que nous avons trouvé est ce php.ini n'avait pas défini le sendmail_path, donc j'ai ajouté cela avec sendmail_path = /usr/sbin/sendmail -t -i;

1
répondu Matt Pope 2017-05-04 01:24:28

Un vieux thread, mais il peut aider quelqu'un comme moi. J'ai résolu le problème en configurant la valeur du serveur SMTP à une valeur légitime en PHP.ini

0
répondu Atif.Net 2013-06-06 00:38:00

j'ai eu ce problème aussi. Ma solution était de désactiver selinux. J'ai essayé d'autoriser 2 Paramètres http différents dans selinux (quelque chose comme httpd_allow_email et http_can_connect) et cela n'a pas fonctionné, donc je l'ai désactivé complètement et il a commencé à fonctionner.

0
répondu iAndy 2014-12-30 19:53:05

j'ai eu ce problème en envoyant des fichiers avec des caractères régionaux dans leurs noms comme: VęryRęgióńął file - name.pdf.

La solution était d'effacer le nom de fichier avant de l'attacher à l'e-mail.

0
répondu jmarceli 2016-08-20 19:20:11

on dirait que dans mon cas c'était juste un rejet de serveur. Veuillez vérifier l'accessibilité de la connexion de votre serveur de messagerie / smtp.

0
répondu Alex 2016-11-10 10:32:16

Vérifier si sendmail est activé, surtout si votre serveur est fourni par une autre société.

0
répondu Gianluca Demarinis 2017-10-05 13:43:16

Pour ce que ça vaut, j'ai eu ce problème et a dû aller dans cPanel, où j'ai vu le message d'erreur

"Attention! Veuillez enregistrer vos identifiants de messagerie utilisés dans les mails non-smtp via cpanel plugin. Les identifiants de messagerie non enregistrés ne seront pas autorisés dans les e-mails non-smtp envoyés par des scripts. Allez dans la section Mail et trouvez le plugin" Registered Mail IDs " dans le thème paper_lantern."

enregistrer les e-mails dans cPanel (enregistrer les ID de courrier) et en attendant 10 minutes a obtenu le mien à travail.

j'Espère que l'aide à quelqu'un.

0
répondu Thomas Byy 2018-06-21 10:19:49

il faut changer les valeurs de 'SMTP' en php.fichier ini php.le fichier ini est situé dans

EasyPHP-DevServer-14.1VC11\binaries\php\php_runningversion\php.ini
-1
répondu user3595601 2014-10-24 05:48:21