web-dev-qa-db-fra.com

Impossible instancier la fonction mail. Pourquoi cette erreur survenue

Lorsque j'essaie d'envoyer un courrier via PHPMailer, je reçois ce message d'erreur. Mon code est ci-dessous:

<?
require("phpmailer/class.phpmailer.php"); // First we require the PHPMailer libary in our script
$mail = new PHPMailer(); // Next we create a new object of the PHPMailer called $mail
$mail->From = "[email protected]";
$mail->FromName = "Rajasekar";
$mail->AddAddress("[email protected]"); // This is the adress to witch the email has to be send.
$mail->Subject = "First PHP Email message"; // This is the subject  of the email message.
$mail->Body = "Hi! \n\n This is my first e-mail sent through PHP."; // This is the actual email message
if(!$mail->Send()) // Now we send the email and check if it was send or not.
{
   echo 'Message was not sent.';
   echo 'Mailer error: ' . $mail->ErrorInfo;
}
else
{
   echo 'Message has been sent.';
}
?>
19
Rajasekar

Dans Ubuntu (au moins 12.04), il semble que sendmail n’est pas installé par défaut. Vous devrez l'installer en utilisant la commande Sudo apt-get install sendmail-bin

Vous devrez peut-être également configurer les autorisations appropriées, comme indiqué ci-dessus.

40
Michael Yagudaev

J'ai utilisé cette ligne de code

if($phpMailer->Send()){

    echo 'Sent.<br/>';

}else{

    echo 'Not sent: <pre>'.print_r(error_get_last(), true).'</pre>';

}

pour savoir quel était le problème. En fait, je courais en mode sans échec et, à la ligne 770 ou quelque chose du genre, un cinquième argument, $params, a été attribué à mail(), qui n'est pas pris en charge lors de l'exécution en mode sans échec. Je l'ai simplement commenté, et voilà, ça a fonctionné:

$rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header/*, $params*/);

Cela relève de la fonction MailSend- de PHPMailer.

12
arik

Je viens d'avoir ce problème et j'ai trouvé dans mon journal des erreurs Apache que sendmail n'était pas installé, après l'installation, tout fonctionnait comme il se doit!

root@web1:~$ tail /var/log/Apache2/error.log
sh: 1: /usr/sbin/sendmail: not found
6
Jacta

J'ai eu le même problème. Je viens de jeter un rapide coup d'œil au fichier Apache2 error.log et il a dit exactement quel était le problème:

> sh: /usr/sbin/sendmail: Permission denied

Donc, la solution a été de donner les permissions appropriées pour le fichier /usr/sbin/sendmail (il n'était pas accessible depuis php).

Commande pour faire cela serait: 

> chmod 777 /usr/sbin/sendmail

assurez-vous qu'il existe même!

3
slawkens

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';
2
Mukesh Chapagain

Assurez-vous d'inclure également la classe smtp fournie avec phpmailer:

// for mailing
require("phpmailer/class.phpmailer.php");
require("phpmailer/class.smtp.php");
2
Sarfraz

Pour revenir sur un ancien fil de discussion, mon problème était que l’une des adresses électroniques "AddressTo" n’était pas valide. La suppression de cette adresse électronique a supprimé l'erreur.

2
Greg A

Comme noté ici , "Cela signifie que votre installation PHP n'est pas configurée pour appeler correctement la fonction mail () (par exemple, sendmail_path n'est pas défini correctement dans votre php.ini), ou vous n'avez pas de courrier local serveur installé et configuré. "

Dans mon cas, je devais autoriser la fonction mail () ("activer la file d'attente mail ()") dans les paramètres de mon hébergeur.

1
Fanky

Essayez avec une adresse qui n'est pas Gmail. Pour autant que je sache, ils ne permettent pas un accès smpt pour envoyer des mails. Je faisais un programme de messagerie simple la semaine dernière et ils n'utilisent pas non plus les ports par défaut pour envoyer et nécessitent le transport via https

1
Kieran

Vérifiez auprès de votre hôte pour voir s'il existe des limites horaires d'envoi d'e-mails.

1
Sir Lojik

C'est une erreur système. 

Vérifier l'erreur du système avec: 

tail /var/log/httpd/error_log

Cela peut être n'importe quelle raison.

1
Alexey

En revoyant l’ancien thread, vous pouvez déboguer PHPMailer en profondeur en ajoutant:

print_r(error_get_last());

cela affichera l'erreur exacte pour vous qui cause la casse du mail php par défaut ().

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

0
Shuja Ahmed

Un ancien fil de discussion, mais il pourrait aider quelqu'un comme moi ... J'ai résolu le problème en définissant la valeur du serveur SMTP sur une valeur légitime dans PHP.ini

0
Atif.Net

J'ai eu la même erreur. Le Reply-to était à l'origine du problème. Je l'ai enlevé.

$email->AddReplyTo( $admin_email, $admin_name ); 
0
Zeke

Dans CentOS, cela peut être dû à la stratégie SELinux . Exécutez le code suivant pour voir s'il est activé.

getsebool httpd_can_sendmail

Vous pouvez l'activer en appelant la commande ci-dessous. Le paramètre -P le rend permanent.

setsebool -P httpd_can_sendmail 1
0
Roman Štefko

"Impossible d'instancier la fonction mail" est le moyen utilisé par PHPMailer pour signaler l'échec de l'appel à mail () (dans l'extension Mail). (Vous utilisez donc le mailer 'mail'.)

Vous pouvez essayer de supprimer les @ avant les appels à mail () dans PHPMailer :: MailSend et de voir quelles erreurs, le cas échéant, sont supprimées en mode silencieux.

0
Frank Shearar

j'ai résolu mon problème (pour wamp)

    $mail->IsSMTP(); 

    $mail->Host='hote_smtp'; 

de corse changer hote_smtp par la bonne valeur

0
khaled_webdev