+212662161818 Du Lundi au Samedi / 8h à  21h

" Erreur SMTP:Impossible de se coonnecter à l'hote."

Retour

" Erreur SMTP:Impossible de se coonnecter à l'hote."

Cela peut également apparaître comme SMTP connect () a échoué ou a appelé Mail () sans être connecté dans la sortie de débogage. Ceci est souvent signalé comme un problème de PHPMailer, mais il est presque toujours dû à une défaillance DNS locale, à un blocage de pare-feu (par exemple, comme le fait GoDaddy) ou à un autre problème sur votre réseau local. Cela signifie que PHPMailer est incapable de contacter le serveur SMTP que vous avez spécifié dans la propriété Host, mais ne dit pas exactement pourquoi. Cela peut également être dû au fait que l'extension openssl n'est pas chargée (voir les notes de chiffrement ci-dessous).

Certaines techniques pour diagnostiquer la source de cette erreur sont discutées ci-dessous.

GoDaddy

 

Le fournisseur d'hébergement américain populaire GoDaddy impose des contraintes très strictes (au point de devenir presque inutiles) lors de l'envoi d'un email. Ils bloquent le SMTP sortant vers les ports 25, 465 et 587 vers tous les serveurs sauf le leur. Ce problème fait l'objet de nombreuses questions frustrantes dans Stack Overflow. Si vous trouvez que votre script fonctionne sur votre ordinateur local, mais pas quand vous le téléchargez sur GoDaddy, c'est ce qui vous arrive. La solution est extrêmement mal documentée par GoDaddy: vous devez envoyer à travers leurs serveurs, et aussi désactiver toutes les fonctionnalités de sécurité, nom d'utilisateur, et mot de passe (super, hein?!), Ce qui vous donne cette config pour PHPMailer:

$ mail-> isSMTP ();
$ mail-> Host = 'relay-hosting.secureserver.net';
$ mail-> Port = 25;
$ mail-> SMTPAuth = false;
$ mail-> SMTPSecure = false;

GoDaddy refuse également d'envoyer avec une adresse De appartenant à n'importe quel domaine aol, gmail, yahoo, hotmail, live, aim, ou msn. C'est parce que tous ces domaines déploient des mesures anti-falsification SPF et DKIM, et truquer votre adresse est une falsification.

 Lire la transcription SMTP

Si vous définissez SMTPDebug = 2 ou plus, vous verrez ce que dit le serveur SMTP distant. Très souvent cela vous dira exactement ce qui ne va pas - des choses comme "mot de passe incorrect", ou parfois l'URL d'une page pour vous aider à diagnostiquer le problème. Lisez ce qu'il dit. Google le fait beaucoup - voir ci-dessous pour plus d'informations sur leur "Autoriser moins d'applications sécurisées".

les échecs DNS

Si vous définissez SMTPDebug = 2 ou plus, vous verrez ce que dit le serveur SMTP distant. Très souvent cela vous dira exactement ce qui ne va pas - des choses comme "mot de passe incorrect", ou parfois l'URL d'une page pour vous aider à diagnostiquer le problème. ReadThese sont souvent considérés comme des délais d'attente de connexion, ou "échec temporaire dans la résolution de nom", "impossible de résoudre l'hôte", "getaddrinfo failed" ou des erreurs similaires. Vérifiez que votre DNS fonctionne en utilisant l'outil dig (du paquet dnsutils sur Debian / Ubuntu):

dig + court smtp.gmail.com

Vous obtiendrez quelque chose comme ceci si votre DNS fonctionne:

gmail-smtp-msa.l.google.com.
173.194.67.108
173.194.67.109

Si cela échoue, PHPMailer ne pourra pas envoyer de courrier électronique car il ne sera pas en mesure d'obtenir la bonne adresse IP pour se connecter. Si vous n'avez peut-être pas de nom dans DNS, vous pouvez utiliser une adresse IP directement comme nom d'hôte. Pour résoudre ce problème, vous devez comprendre pourquoi votre DNS ne fonctionne pas - peut-être n'avez-vous pas configuré vos résolveurs? ce que ça dit. Google le fait beaucoup - voir ci-dessous pour plus d'informations sur leur "Autoriser moins d'applications sécurisées".

Vérifiez c'est là du tout

64 bytes from 74.125.133.108: icmp_seq=2 ttl=43 time=68.500 ms

Même un serveur avec tous les services désactivés répondra généralement aux pings simples, donc si vous savez que votre DNS est correct, vérifiez que le serveur est bien là:

ping smtp.gmail.com

Vous devriez voir quelque chose comme ça (appuyez sur ctrl-C pour l'arrêter):

PING gmail-smtp-msa.l.google.com (74.125.133.108): 56 octets de données
64 octets de 74.125.133.108: icmp_seq = 0 ttl = 43 temps = 72.636 ms
64 octets de 74.125.133.108: icmp_seq = 1 ttl = 43 temps = 68.841 ms
64 octets de 74.125.133.108: icmp_seq = 2 ttl = 43 temps = 68.500 ms

Vérifiez que c'est un serveur de messagerie

Il se peut qu'un autre service soit en cours d'exécution sur le port SMTP auquel vous essayez de vous connecter. Vous pouvez vérifier ceci en utilisant l'outil Telnet, comme ceci (se connecter à Gmail sur son port de service de soumission):

telnet smtp.gmail.com 587

Cela devrait vous donner quelque chose comme ceci:

Trying 173.194.67.109...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP ex2sm16805587wjd.30 - gsmtp



(Entrez quitter pour sortir de ça). Si le port 587 ne fonctionne pas, vous pouvez essayer le port 465 ou le port 25, et utiliser celui qui fonctionne, bien que le port 25 ne supporte souvent pas le cryptage (voir les notes de cryptage).

S'il ne produit aucune sortie ou quelque chose qui ne démarre pas avec 220, alors votre serveur est en panne ou vous avez le mauvais serveur.

Redirection du pare-feu

Une autre chose à vérifier ici est que le nom du serveur de messagerie doit être lié au serveur que vous avez demandé, comme vous pouvez le voir dans l'exemple ci-dessus - nous avons demandé smtp.gmail.com et obtenu gmail-smtp-msa. l.google.com, qui ressemble à Google - si à la place vous voyez quelque chose comme le nom de votre FAI, cela peut signifier que le pare-feu de votre FAI vous redirige de manière transparente vers ses propres serveurs de messagerie, et vous êtes susceptibles de voir l'authentification et les échecs de vérification de certificat TLS (voir ci-dessous pour plus) parce que vous vous connectez au mauvais serveur. Cela est très susceptible de se produire sur le port 25, mais moins susceptible de se produire sur les ports 465 et 587, c'est donc une autre raison d'utiliser le cryptage!

 SELinux bloquant

Si vous voyez une erreur comme SMTP -> ERREUR: Impossible de se connecter au serveur: Autorisation refusée (13), vous pouvez être en train d'utiliser SELinux pour empêcher PHP ou le serveur Web d'envoyer des emails. Ceci est particulièrement probable sur RedHat / Fedora / Centos. À l'aide de la commande getsebool, nous pouvons vérifier si le démon httpd est autorisé à établir une connexion sur le réseau et à envoyer un courrier électronique:

getsebool httpd_can_sendmail
getsebool httpd_can_network_connect


Cette commande va retourner un booléen on ou off. Si c'est désactivé, nous pouvons l'activer:

sudo setsebool -P httpd_can_sendmail 1
sudo setsebool -P httpd_can_network_connect 1



Si vous utilisez PHP-FPM via fastcgi, vous devrez peut-être l'appliquer au démon fpm plutôt qu'à httpd.

Blocage IPv6

Certains fournisseurs de services (y compris Digital Ocean) fournissent une connectivité IPv6 pour les serveurs mais bloquent le SMTP sortant sur IPv6 tout en l'autorisant sur IPv4. Cela peut être contourné en définissant explicitement la propriété Host à une adresse IPv4 (la fonction gethostbyname effectue uniquement les recherches IPv4):

$ mail-> Host = gethostbyname ('smtp.gmail.com');

Le seul problème avec cette approche est que vous finissez par demander à vous connecter à une adresse IPv4 explicite, ce qui entraînera généralement l'échec des vérifications de nom de certificat. Vous pouvez désactiver cela (voir SMTPOptions ailleurs dans ce document), mais cela devrait être considéré comme une solution de contournement médiocre - la bonne solution consiste à réparer votre réseau.

Remarque: lorsque vous utilisez le service Digital Ocean, vérifiez si votre port SMTP est réellement déverrouillé. Comme il s'agit d'une société américaine, il contient une série de consignes pour ne pas tomber dans le spam. Vous devez donc demander le déverrouillage et suivre les étapes pour confirmer avec Digital. Ocean Le but de l'envoi de vos emails avec PHPMailer.

Échecs d'authentification

 Si votre authentification échoue, il existe plusieurs causes probables:

  •      Vous avez le mauvais nom d'utilisateur ou mot de passe
  •      Votre connexion est redirigée vers un serveur différent (comme ci-dessus)
  •      Vous avez spécifié l'authentification sans cryptage


Généralement, vous ne voulez pas envoyer un nom d'utilisateur ou un mot de passe sur un lien non crypté. Certains schémas d'authentification SMTP ajoutent un niveau de sécurité minimal (envoi de hachages courts plutôt que de texte clair), mais ceux-ci n'offrent qu'une protection minimale et, par conséquent, la plupart des serveurs n'autorisent pas l'authentification sans cryptage. Corrigez cela en définissant SMTPSecure = 'tls' et Port = 587 et en définissant les propriétés Nom d'utilisateur et Mot de passe.

 Utiliser le chiffrement

Vous devriez utiliser le cryptage à chaque occasion, sinon vous invitez toutes sortes de possibilités désagréables pour le phishing, le vol d'identité, l'écoute clandestine, les informations d'identification volées, etc.

PHPMailer utilise le cryptage TLS; TLS est simplement le "nouveau" (depuis 1998!) Nom pour SSL. Les deux noms sont essentiellement interchangeables.

La configuration TLS / SSL que vous utilisez pour le courrier électronique n'a rien à voir avec les certificats que vous pouvez utiliser sur votre site Web; vous pouvez toujours utiliser un e-mail chiffré même si votre site n'a pas de certificat.

 Vérifiez que vous avez l'extension openssl

Pour utiliser n'importe quel type de cryptage, vous devez activer l'extension PHP openssl. Si vous ne l'avez pas installé ou s'il est mal configuré, vous risquez d'avoir des problèmes lors de la phase STARTTLS des connexions. Vérifiez cela en regardant la sortie de phpinfo () ou php -i (recherchez une section 'openssl'), ou openssl listés dans la sortie de php -m, ou exécutez cette ligne de code:

 

Encryption flavours Saveurs de chiffrement

Il y a deux "saveurs" de cryptage de transport disponibles pour l'email:

  •     "SMTPS", également appelé "implicite", car il suppose que vous allez utiliser le cryptage dès le début de la connexion. Dans PHPMailer, ce mode est sélectionné en définissant SMTPSecure = 'ssl' et requiert généralement Port = 465.
  •     "SMTP + STARTTLS", également appelé "explicite" car il se connecte d'abord de manière non sécurisée, puis demande explicitement que la connexion commence à utiliser le chiffrement. Dans PHPMailer, ce mode est sélectionné en définissant SMTPSecure = 'tls', et nécessite habituellement Port = 587, bien qu'il puisse fonctionner sur n'importe quel port.


SMTPS sur le port 465 est officiellement obsolète depuis 1998 et était seulement utilisé par les produits Microsoft qui n'ont pas reçu le mémo; les normes recommandent d'utiliser SMTP + STARTTLS sur le port 587 à la place. Cependant, SMTPS sur le port 465 est sur le point de devenir une solution recommandée à nouveau.

$ mail-> SMTPSecure = 'tls';
$ mail-> Host = 'smtp.gmail.com';
$ mail-> Port = 587;
// ou plus succinctement:
$ mail-> Host = 'tls: //smtp.gmail.com: 587';

ou

$ mail-> SMTPSecure = 'ssl';
$ mail-> Host = 'smtp.gmail.com';
$ mail-> Port = 465;
// ou plus succinctement:
$ mail-> Host = 'ssl: //smtp.gmail.com: 465';

Ne mélangez pas ces modes ssl sur le port 587 ou tls sur le port 465 ne fonctionnera pas.



TLS opportuniste

PHPMailer 5.2.10 a introduit le TLS opportuniste - s'il voit que le serveur annonce le cryptage TLS (après vous être connecté au serveur), il active automatiquement le cryptage, même si vous n'avez pas défini SMTPSecure. Cela peut provoquer des problèmes si le serveur annonce TLS avec un certificat non valide, mais vous pouvez le désactiver avec $ mail-> SMTPAutoTLS = false ;.

 

commander