web-dev-qa-db-fra.com

erreur phpmailer "Impossible d'instancier la fonction mail"

J'utilise l'exemple de base mail() légèrement modifié pour mon identifiant d'utilisateur et le message d'erreur «Erreur de courrier: impossible d'instancier la fonction courrier»

si j'utilise la fonction mail - 

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

cela fonctionne bien, même si je ne parviens pas à envoyer du code HTML, raison pour laquelle j’essaie d’essayer PHPMailer.

c'est 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("[email protected]","my name");
    $mail->SetFrom('[email protected]', 'my name');
    $address = "[email protected]";
    $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!";
    }
?>
32
sdfor

Essayez d’utiliserSMTPpour 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';
26
Mukesh Chapagain
$mail->AddAddress($address, "her name");

devrait être changé en 

$mail->AddAddress($address);

Cela a fonctionné pour mon cas ..

11
Avinash

Cela a fonctionné pour moi

$mail->SetFrom("[email protected]","my name", 0); //notice the third parameter
11
Matías Cánepa

Vous devez vous assurer que votre adresse de départ est une configuration de compte de messagerie valide sur ce serveur.

10
Dan Fare

Si vous envoyez des pièces jointes et que votre code fonctionne pour les pièces jointes de petite taille mais échoue pour les pièces jointes de grande taille:

Si vous obtenez le message d'erreur «Impossible d'instancier la fonction de messagerie» lorsque vous essayez d'envoyer des messages électroniques volumineux et que votre journal d'erreur PHP contient le message «Impossible d'envoyer le message: trop volumineux», votre agent de transfert de courrier exim, etc.) refuse de livrer ces courriels.

La solution consiste à configurer le MTA pour autoriser les pièces jointes plus volumineuses. Mais ce n'est pas toujours possible. La solution alternative consiste à utiliser SMTP . Vous aurez besoin d’un accès à un serveur SMTP (et d’identifiants de connexion si votre serveur SMTP requiert 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

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

8
Salman A

Votre code a l'air bien, avez-vous oublié d'installer PostFix sur votre serveur?

Sudo apt-get install postfix

Cela a fonctionné pour moi;)

À votre santé

5
Erenss

Les documents d’aide de PHPMailer sur cette erreur spécifique ont contribué à me mettre sur la bonne voie.

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

2
Matt Pope

Dans mon cas, il semble que ce soit juste le REJET DU SERVEUR. Veuillez vérifier l’accessibilité de votre connexion au journal du serveur de messagerie/smtp.

1
Alex

J'ai eu ce problème, et après avoir fait un peu de débogage et de recherche, 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 lui parler deQuota Restrictionssur la fonction de messagerie (pour éviter que des personnes ne fassent des spams ou n’envoient des e-mails en masse (spam)).

Ils pourront peut-être vous informer de leurs limites et si vous les dépassez. Vous pouvez également éventuellement mettre à niveau la limite en allant sur un serveur privé.

Après avoir parlé avec GoDaddy pendant 15 minutes, le support technique a été en mesure de résoudre ce problème en 20 minutes.

Cela m'a beaucoup aidé et je voulais le partager pour que si quelqu'un d'autre le découvre, il peut essayer cette méthode si tout échoue ou avant d'essayer autre chose.

1
Kray

Dans mon cas, c’est la taille limite des pièces jointes qui est à l’origine du problème. Vérifiez et augmentez la taille limite du courrier qui a fonctionné pour moi.

1
fiskcn

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

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

L'enregistrement des e-mails dans cPanel (Register Mail IDs) et l'attente de 10 minutes ont permis au mien de fonctionner.

J'espère que ça aide quelqu'un.

0
Thomas Byy

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

0

J'ai eu ce problème aussi. Ma solution a été 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 ne fonctionnait pas. Je l'ai donc complètement désactivé et cela a commencé à fonctionner.

0
iAndy

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

0
Atif.Net

J'avais ce problème lors de l'envoi de fichiers contenant des noms de caractères régionaux, tels que: VęryRęgióńął file - name.pdf.

La solution consistait à effacer le nom du fichier avant de le joindre au courrier électronique.

0
jmarceli