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!";
}
?>
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';
$mail->AddAddress($address, "her name");
devrait être changée en
$mail->AddAddress($address);
Cela a fonctionné pour mon cas..
vous devez vous assurer que votre adresse de from est une configuration valide du compte de messagerie sur ce serveur.
Cela a fonctionné pour moi
$mail->SetFrom("from@domain.co","my name", 0); //notice the third parameter
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.
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
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.
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;
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
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.
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.
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.
Vérifier si sendmail est activé, surtout si votre serveur est fourni par une autre société.
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.
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