Hello la communauté,

J'utilise PHPmailer sur une application que je viens de transférer sur un nouveau serveur (OVH, Dédié, Debian 7.6) suite au crash du premier. PHPmailer me sert a envoyer des mails depuis un compte gmail.

Alors que tout se passait très bien sur le serveur précéent, je suis maintenant incapable de l'utiliser que ce soit via les ports 25, 465 ou 587. PHP me répond

SMTP ERROR: Failed to connect to server:
Connection timed out (110) SMTP connect() failed.

La fonction mail() de PHP quant a elle fonctionne très bien.

Je sais que le script PHP est bon, donc, et je me suis farci une petite séance de debugging telle qu'indiquée sur github. Je bloque a l'étape telnet, qui ne me retourne rien

root@server > telnet smtp.gmail.com 465
Trying 2a00:1450:400c:c07::6c...
Trying 74.125.133.109...
Trying 74.125.133.108...
telnet: Unable to connect to remote host: Connection timed out

Une idée d'ou cela peut venir ?
Les ports 25, 465, 587 sont ouvert (de meme que 53 pour les dns mais de toute facon je peux résoudre l'IP donc je sais que c'est pas lui le problème).

mon firewall (non exhaustif):

iptables -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

Toute suggestion serait bienvenue :)

EDIT:
Je précise aussi que je n'ai pasplus de succès avec openssl:

root@server > openssl s_cient -connect smtp.gmail.com:465
connect: Connection timed out
connect:errno=110

15 réponses


elhebert
Réponse acceptée

Je viens d'y penser, c'est peut être stupide, mais est-ce que tu as bien ouvert ton port 23 ? Tente de te connecter à autre chose en telnet,et si tu n'y arrive pas, tu aura trouvé ton problème :)

Salut :)

Si j'en crois ce que tu nous montre, tu as une erreur au niveau du serveur SMTP (Merci Cap'tain Obvious).

Tu dit que l'erreur est arrivée lorsque tu as changer de serveur, si tu tournais sur une ancienne version de Debian je te conseille de te renseigner si ils ont changé quelque chose du côté SMTP.

Un exemple stupide, sur Debian 7 sudo n'est plus installé de base.

Si l'erreur ne vient pas de ton serveur c'est soit du côté de gmail, soit du côté de PHPmailer : il se peut aussi que google ai modifié sont serveur smtp (quoique improbable) ou que PHPmailer ai été mis à jour entre temps.

Je ne sais que c'est pas grand chose, mais je n'ai jamais été un expert en smtp. J'aurais aimé pouvoir t'aider un peu plus que ça. Je sais à quel point ça peut être frustrant.

Vallyan
Auteur

Merci pour ta réponse,

J'etais déja sous Debian 7 (me souvient plus de la version par contre) et quoique je ne peux pas l'exclure je serais bien surpris qu'ils aient changé quelque chose a ce point que je ne puisse plus me connecter a gmail en SMTP :o ...

A priori l'erreur ne vient pas de PHPmailer puisque telnet est en amont, et que c'est manifestement le probleme avec telnet qui fait foirer PHPmailer.

Je sais aussi que gmail blacklist certaines IP et plages d'IP, et je me suis dit a un moment que j'avais peut-etre récupéré une IP utilisée pour du spamming a une époque. Mais dans ce cas ils répondent vec une erreur 412 ou 550. Or je me prends une 110 ce qui correspondrait a un problème de mon coté, et non du leur.

Donc je continue de penser que c'est moi qui merdouille quelque part, mais vraiment je ne sais pas ou :(

S'il y a des gourous iptables, ils peuvent peyt-etre me dire comment vérifier que mon problème ne vient pas de la ?
J'ai essayé d'ajouter temporairement, a la fin de mon fichier iptables, les règles suivantes:

iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
  • Est-ce que ca annule bien les règles précédentes ?
  • Est-ce que je laisser bien passer n'importe quel trafic de cette facon ?
    Parce que suite a cela je suis toujours incapable de smtp gmail :'(

Tes iptables me semblent correcte (mais je suis pas un gourou :D)

J'ai testé sur mon serveur de me connecter au smtp de gmail via telnet, et ça a fonctionné sans soucis :

www@elhebert:~$ telnet smtp.gmail.com 465
Trying 2a00:1450:400c:c09::6c...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.

Donc le problème doit venir de la configuration de ton serveur. As-tu essayé de désactiver tes iptables (et non pas annulé les règles) pour être sur que ce n'est pas ça ?
Car sur mon serveur, j'ai un serveur mail (postfix), un serveur web (apache2 + php + mysql), un serveur ftp et un serveur voice (ts) et c'est tout ce que j'ai.

Une solution serait de demander à OVH de formater ton serveur et de tout reinstaller, et de tester à chaque étape la connection au serveur smtp de gmail. Tu sera alors en mesure de trouver ce qui bloque ta connection maintenant.

Vallyan
Auteur

Je viens de me palucher 2 / 3 jours de mise en place de mon serveur et vérifications diverses, si je pouvais éviter de tout réinstaller j'avoue que je préferrerais ^^

Je ne suis pas sur de savoir comment déactiver iptables (ce n'est pas un service), mais je vais regarder effectivement.
Je n'ai pas de serveur mail installé ... serait-ce indispensable ?? Je peux toujours installer postfix pour vérifier ...

Je ne pense pas que cela change quelque chose puisque c'est bien au niveau de smtp qu'il y a un soucis.

Pour les iptables j'ai trouvé ceci :

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

C'est censé annulé tes iptables et accepter tout. ce qui est très proche de ce que tu avais déjà fait. Tu peux aussi essayer de te connecter à un autre serveur smtp que celui de gmail, histoire d'être sur.

Et je vois que les iptables qui pourrait être un soucis, je vois pas ce qui pourrait t'empecher de te connecter si ce n'est pas le firewall...

Quels sont les autres services qui tournent sur ton serveur ?

Vallyan
Auteur

Rien qui écoute sur les ports 465 et 587, si c'est la question, après vérification avec un petit

netstat -tulpn

Sinon j'ai, en vrac:
sshd
rserver
exim4
apache@
mysqld
protpd
...

Rien de particulièrement floklo.

Je vais essayer ton truc iptables, merci de chercher pour moi en tous cas :)

Vallyan
Auteur

nope, pas plus de succès ...

Vallyan
Auteur

Bien vu, mon port 23 n'était effectivement pas ouvert :/
Je peux telnet smtp.mail.yahoo.com sans problème, par exemple, mais ca coince toujours pour gmail.
Du coup je ne vois vraiment pas ou est mon problème :(

C'est assez étrange pour le coup. Tu as donc un soucis avec gmail spécifiquement... as-tu tenté un ping vers leur smtp ? Pour vérifier que tu arrive bien à le joindre ?
Petit à petit on va réduire les possibilités et on finira par trouver :D

Vallyan
Auteur

oui oui, le ping fonctionne très bien (et le dig +short smtp.gmail.com essayé avant aussi pour tester la résoltion de leur IP)

C'est d'autant plus perturbant... J'ai vraiment aucunes idées du coup.
Je te conseil de te tourner vers StackOverflow, tu aura plus de chance d'avoir une solution. Il te faudra juste écrire en anglais ^^

Vallyan
Auteur

L'anglais n'est pas tellement un problème, c'est plutot la communauté stackoverflow, qui est souvent un peu aggressive, qui me gène ... et puis si je peux faire tourner le forum de Graf', j'aime autant. Enfin je finirai par y aller si je ne peux pas faire autrement :p

Bon par contre on progresse:

  • Si je telnet sur le port 25, la premiere IP résolue (IPv6) foire toujours, mais quand il passe a la suivante (IPv4), la ca fonctionne \o/
  • Du coup si je telnet en forcant l'IPv4 (option -4), la ca marche immédiatement sur le port 25
  • Mais si je teste les ports 465 ou 587, meme en forcant l'IPv4, ca marche pas ...

Donc il y a quand meme un truc pas net sur mon serveur puisque tu ne rencontre pas de problème depuis le tiens, mais au moins i y a quelque chose qui fonctionne. Je vais peut etre voir si je peux modifier PHPmailer pour qu'il passe par l'IPv4, port 25, mais je voudrais surtout comprendre ce qui merdouille en dehors de ca sur ma Debian ...

Vallyan
Auteur

Bon, problème partiellement résolu (en tous cas pour PHPmailer) de la facon suivante:
Dans ma classe email, mes settings sont :

$this->_mail = new PHPmailer;
...
$this->_mail->SMTPsecure = 'tls'
$this->_mail->host = getHostByName('smtp.gmail.com') //Retourne l'adresse IPv4 d'un serveur
$this->_mail->port = 25
...

Du coup ca fonctionne ... mais je reste frustré de ne pas comprendre ce qui foire dans ma config Debian

Merci a toi elhebert pour m'avoir accompagné dans cette mini galère :)

Pas de soucis. Pour une fois que mes connaissances en Linux sont utiles :D

Bonne continuation !