PHPMailer: Erreur SMTP: impossible de se connecter à L'hôte SMTP
J'ai utilisé PHPMailer sur plusieurs projets mais maintenant je suis coincé. Il me donne l'erreur:
Erreur SMTP: impossible de se connecter à L'hôte SMTP.
J'ai essayé D'envoyer des e-mails de Thunderbird et ça marche ! Mais pas par PHPMailer ... Voici les paramètres de Thunderbird:
nom du Serveur: mail.exampleserver.com
Port: 587
Nom d'utilisateur: user@exampleserver.com
Authentification Sécurisée: Pas de
Sécurité de la connexion: STARTTLS
je les ai comparés avec le serveur de mon dernier projet où J'ai utilisé PHPMailer et ils étaient:
nom du Serveur: mail.exampleserver2.com
Port: 465
Nom d'utilisateur: user@exampleserver2.com
Authentification Sécurisée: Non
Sécurité de la connexion: SSL / TLS
mon code php est:
$mail = new PHPMailer();
$mail->IsSMTP(); // send via SMTP
$mail->Host = SMTP_HOST; // SMTP servers
$mail->Port = SMTP_PORT; // SMTP servers
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = SMTP_USER; // SMTP username
$mail->Password = SMTP_PASSWORD; // SMTP password
$mail->From = MAIL_SYSTEM;
$mail->FromName = MAIL_SYSTEM_NAME;
$mail->AddAddress($aSecuredGetRequest['email']);
$mail->IsHTML(true); // send as HTML
Où ai-je tort?
9 réponses
puisque ces questions apparaissent haut dans google, je voudrais partager ici ma solution pour le cas où PHP a été juste mis à niveau à la version 5.6 (qui a un comportement SSL plus strict).
le wiki PHPMailer a une section sur ceci:
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure
la solution suggérée est d'inclure le code suivant:
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
Cela devrait travailler pour PHPMailer 5.2.10 (et plus).
Remarque: évidemment, et aussi comme suggéré dans ce wiki, cela devrait être une solution temporaire!
la bonne solution est de remplacer le certificat invalide, mal configuré ou auto-signé par un bon.
dans mon cas, C'est un manque de support SSL en PHP qui a donné cette erreur.
donc j'ai activé extension=php_openssl.dll
$mail->SMTPDebug = 1;
fait également allusion à cette solution.
mise à Jour de 2017
$mail->SMTPDebug = 2;
, voir: https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enabling-debug-output
Votre problème est probablement ce
sécurité de la connexion: STARTTLS Sécurité de la connexion: SSL / TLS
Ce sont 2 protocoles différents, utilisez-vous le bon, celui que vous utilisez dans Thunderbird doit être utilisé.
Essayez de définir la variable:
// if you're using SSL
$mail->SMTPSecure = 'ssl';
// OR use TLS
$mail->SMTPSecure = 'tls';
j'ai eu un problème similaire et en déduit que c'était le openssl.cafile
directive de configuration dans php.ini
cela devait être réglé pour permettre la vérification des pairs sécurisés. Vous venez de définir à l'emplacement d'un certificat de l'autorité de fichier comme celui que vous pouvez obtenir à http://curl.haxx.se/docs/caextract.html.
cette directive est nouvelle à partir de PHP 5.6 donc cela m'a pris au dépourvu lors de la mise à niveau à partir de PHP 5.5.
ne mail.exampleserver.com existent-ils ??? si pas, essayez le code suivant (vous devez avoir un compte gmail)
$mail->SMTPSecure = "ssl";
$mail->Host='smtp.gmail.com';
$mail->Port='465';
$mail->Username = 'you@gmail.com'; // SMTP account username
$mail->Password = 'your gmail password';
$mail->SMTPKeepAlive = true;
$mail->Mailer = "smtp";
$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->CharSet = 'utf-8';
$mail->SMTPDebug = 0;
j'ai eu le même problème et C'est parce que PHPMailer a réalisé que le serveur supportait STARTTLS donc il a essayé de mettre à jour automatiquement la connexion à une connexion cryptée. Mon serveur de messagerie est sur le même sous-réseau que le serveur web dans mon réseau qui est tout derrière nos pare-feu de domaine donc je ne suis pas trop inquiet d'utiliser le cryptage (plus les e-mails générés ne contiennent pas de données sensibles de toute façon).
alors ce que j'ai fait, c'est changer les SMTPAutoTLS En false dans le classe.phpmailer.fichier php.
/**
* Whether to enable TLS encryption automatically if a server supports it,
* even if `SMTPSecure` is not set to 'tls'.
* Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
* @var boolean
*/
public $SMTPAutoTLS = false;
j'ai eu un problème similaire. J'avais installé la version 1.72 de PHPMailer qui n'est pas prête à gérer les connexions SSL. La mise à niveau vers la dernière version a résolu le problème.
comme il s'agit d'une erreur populaire, vérifiez le PHPMailer Wiki sur le dépannage.
cela a aussi fonctionné pour moi
$mailer->Port = '587';
suivi du code a fonctionné pour moi:
$mail = new PHPMailer(true);
$mail->isSMTP();// Set mailer to use SMTP
$mail->CharSet = "utf-8";// set charset to utf8
$mail->SMTPAuth = true;// Enable SMTP authentication
$mail->SMTPSecure = 'tls';// Enable TLS encryption, `ssl` also accepted
$mail->Host = 'smtp.gmail.com';// Specify main and backup SMTP servers
$mail->Port = 587;// TCP port to connect to
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->isHTML(true);// Set email format to HTML
$mail->Username = 'Sender Email';// SMTP username
$mail->Password = 'Sender Email Password';// SMTP password
$mail->setFrom('example@mail.com', 'John Smith');//Your application NAME and EMAIL
$mail->Subject = 'Test';//Message subject
$mail->MsgHTML('HTML code');// Message body
$mail->addAddress('User Email', 'User Name');// Target email
$mail->send();