web-dev-qa-db-fra.com

PHPMailer: Erreur SMTP: Impossible de se connecter à l'hôte SMTP

J'ai utilisé PHPMailer sur plusieurs projets mais maintenant je suis bloqué. Cela me donne l'erreur:
Erreur SMTP: Impossible de se connecter à l'hôte SMTP.
J'ai essayé d'envoyer un email de Thunderbird et ça marche! Mais pas via PHPMailer ... Voici les paramètres de Thunderbird:

Nom du serveur: mail.exampleserver.com
Port: 587
Nom d'utilisateur: [email protected]
Authentification sécurisée: Non
Sécurité de la connexion: STARTTLS
 

J'ai comparé ces derniers avec le serveur lors de mon dernier projet où j'utilisais PHPMailer et ils étaient:

Nom du serveur: mail.exampleserver2.com
Port: 465
Nom d'utilisateur: [email protected]
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ù je me trompe?

39
Ilian Andreev

Puisque ces questions sont très présentes dans google, j'aimerais partager ici ma solution pour le cas où PHP vient d'être mis à niveau vers la version 5.6 (dont le comportement SSL est plus strict).

Le wiki de PHPMailer a une section à ce sujet:

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

La solution suggérée consiste à inclure le code suivant:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

Cela devrait fonctionner pour PHPMailer 5.2.10 (et plus).

Note: Évidemment, et comme suggéré dans ce wiki, cela devrait être une solution temporaire! 

Le correctif correct consiste à remplacer le certificat invalide, mal configuré ou auto-signé par un bon.

66
Marten Koetsier

Dans mon cas, l'absence de prise en charge de SSL dans PHP était à l'origine de cette erreur.

J'ai donc activé extension = php_openssl.dll

$mail->SMTPDebug = 1; a également fait allusion à cette solution.

Mise à jour 2017

$mail->SMTPDebug = 2;, voir: https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enabling-debug-output

48
wessel

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, quel que soit 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
Viper_Sb

J'ai eu le même problème et c'est parce que PHPMailer a compris que le serveur prenait en charge STARTTLS. Il a donc essayé de mettre à niveau automatiquement la connexion vers une connexion cryptée. Mon serveur de messagerie se trouve sur le même sous-réseau que le serveur Web de mon réseau, qui se trouve derrière nos pare-feu de domaine. Je ne crains donc pas le cryptage (de plus, les courriers électroniques générés ne contiennent pas de données sensibles). 

Donc, ce que j’ai fait, c’est de changer le SMTPAutoTLS en faux dans le fichier class.phpmailer.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;
6
Sina

J'ai eu un problème similaire et j'ai découvert que c'était la directive de configuration openssl.cafile dans php.ini qui devait être définie pour permettre la vérification des homologues sécurisés. Vous venez de définir l'emplacement d'un fichier d'autorité de certification similaire à celui que vous pouvez obtenir à l'adresse http://curl.haxx.se/docs/caextract.html .

Cette directive est nouvelle à partir de PHP 5.6, elle m’a donc pris au dépourvu lors de la mise à niveau à partir de PHP 5.5.

6
Jasper

mail.exampleserver.com existe-t-il ??? , sinon essayez le code suivant (vous devez avoir un compte gmail)

$mail->SMTPSecure = "ssl";  
$mail->Host='smtp.gmail.com';  
$mail->Port='465';   
$mail->Username   = '[email protected]'; // 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
Ronan Dejhero

Le code suivi 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('[email protected]', '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();
1
Dumitru Boaghi

J'ai eu un problème similaire. J'avais installé PHPMailer version 1.72 qui n'est pas prêt à gérer les connexions SSL. La mise à niveau vers la dernière version a résolu le problème.

0
David

Dans mon cas, dans CPANEL, j’ajoute mon adresse e-mail et, après 30 minutes, cela fonctionne très bien avec la fonction mail php.

0
Dinesh Gurjar

Comme il s'agit d'une erreur courante, consultez le PHPMailer Wiki concernant le dépannage.

Aussi cela a fonctionné pour moi 

$mailer->Port = '587';
0
Francis Sunday
$mail->SMTPDebug = 2; // to see exactly what's the issue

Dans mon cas, cela a aidé:

$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
0
Martin Zvarík