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?

34
demandé sur Ilian Andreev 2010-08-13 18:23:51

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.

56
répondu Marten Koetsier 2016-04-04 14:32:56

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

47
répondu wessel 2017-02-14 19:01:53

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';
10
répondu Viper_Sb 2010-08-13 15:41:13

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.

6
répondu Jasper 2015-06-16 15:55:26

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;   
4
répondu Ronan Dejhero 2014-09-23 21:19:45

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;
4
répondu Sina 2017-01-31 21:26:52

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.

0
répondu David 2012-05-22 12:49:31

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';
0
répondu Francis Sunday 2017-04-20 17:37:59

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();
0
répondu Dumitru Boaghi 2018-06-27 13:54:28