web-dev-qa-db-fra.com

Utilisation de SMTP, Gmail et STARTTLS

J'apprends donc SMTP et j'essaie d'utiliser telnet pour envoyer du courrier via SMTP.

J'ai facilement pu envoyer du courrier à mon compte gmail via:

$ Host gmail.com
...
gmail.com mail is handled by 5 gmail-smtp-in.l.google.com.
...
$ telnet gmail-smtp-in.l.google.com 25
Trying 74.125.142.27...
...
Connected to gmail-smtp-in.l.google.com.
...
HELO <[email protected]>
...

Cependant, j'ai du mal à envoyer de mon compte gmail. D'après ce que je comprends de SMTP, je devrais utiliser SMTP pour envoyer du courrier de <[email protected]> vers les serveurs SMTP gmail sortants, qui à leur tour utilisent SMTP pour transférer le courrier vers le récepteur SMTP entrant du récepteur ect.

Cependant, j'ai des difficultés. Si je telnet dans smtp.gmail.com via le port 465 (serveur de messagerie smtp gmail sortant canonique), je suis immédiatement déconnecté après avoir commencé par HELO <[email protected]>, ou demandé à STARTTLS. Je ne trouve pas de réponses sur la façon de procéder.

Toute aide est appréciée.

Sidenote: Actuellement, j'utilise le Wi-Fi gratuit de Starbucks pour accéder à Internet. Je ne parviens pas à telnet directement à partir de mon ordinateur (aucune erreur d'itinéraire vers l'hôte). Au lieu de cela, cela ne fonctionne que si je ssh dans une boîte Linux distante sur le réseau de mon école d'abord, puis telnet à partir de là. Une idée pourquoi c'est?

Merci!

10
gone

Tout d'abord, il semble que vous utilisez le mauvais port. Gmail expose le port 465 pour SMTP sur SSL et le port 587 pour SMTP avec STARTTLS, comme documenté ici . La différence entre ces deux est que SMTP sur SSL établit d'abord une connexion SSL/TLS sécurisée et conduit SMTP sur cette connexion, et SMTP avec STARTTLS commence avec SMTP non chiffré, puis passe à SSL/TLS. C'est pourquoi vous n'obtenez pas de réponse à votre HELO.

$ telnet smtp.gmail.com 587
Trying 74.125.25.108...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP fr1sm24834956pbb.26 - gsmtp
HELO <[email protected]>
250 mx.google.com at your service
STARTTLS
220 2.0.0 Ready to start TLS

Mais même si vous vous connectez au port 587, vous ne pourrez toujours pas envoyer d'e-mail à la main. Pour faire quelque chose d'intéressant, vous devrez STARTTLS , et vous ne pourrez pas gérer le protocole binaire SSL/TLS = pour négocier le cryptage.

23
rhashimoto

Le client telnet ne négociera pas de session TLS pour vous. Vous devez utiliser un autre outil, tel que s_client d'OpenSSL. Ce qui suit émet la commande STARTTLS pour vous et gère la négociation TLS:

$ openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf

Alternativement, vous pouvez vous connecter directement au port SMTPS:

$ openssl s_client -connect smtp.gmail.com:465 -crlf
17
Erwan Legrand