Vérification SMTP avec telnet

Un guide pratique pour tester un serveur de messagerie à la main. Découvrez ce que fait chaque commande SMTP, comment le serveur répond et comment mener une session de vérification complète avec telnet ou openssl.

SMTP (Simple Mail Transfer Protocol) est un protocole en texte clair, organisé par lignes. Cela signifie que vous pouvez dialoguer directement avec un serveur de messagerie depuis un terminal et lire exactement ce qu’il répond — sans aucun logiciel spécial. C’est la manière la plus transparente de vérifier si une boîte aux lettres existe, si un serveur est joignable, et comment il est configuré.

1. Se connecter à un serveur de messagerie

Trouvez d’abord le serveur de messagerie (hôte MX) du domaine, puis ouvrez une connexion TCP vers son port SMTP. Le port classique est le 25. Les ports de soumission 587 et 2525 sont utilisés avec STARTTLS ; le port 465 correspond au TLS implicite (SMTPS).

Connexion en clair (port 25) :

telnet mail.example.com 25

Port STARTTLS (587 ou 25) — telnet ne gère pas le TLS, utilisez openssl :

openssl s_client -connect mail.example.com:587 -starttls smtp -crlf

Port TLS implicite (465) :

openssl s_client -connect mail.example.com:465 -crlf

Remarque : de nombreux FAI domestiques et mobiles bloquent le port 25 sortant pour lutter contre le spam. Si telnet ... 25 reste simplement bloqué, c’est généralement le fait de votre fournisseur, et non du serveur de messagerie. Testez depuis un serveur/VPS où le port 25 est ouvert, ou utilisez les ports de soumission.

2. Les commandes SMTP expliquées

Vous tapez des commandes (insensibles à la casse) ; le serveur répond avec un code à 3 chiffres et un texte. Terminez chaque commande par Entrée (CRLF).

CommandeRôle
HELO domainSalutation ancienne. Identifie l’hôte qui se connecte par son nom. Le serveur répond 250.
EHLO domainSalutation moderne (Extended HELO). Identique à HELO, mais le serveur énumère aussi les extensions prises en charge (STARTTLS, AUTH, SIZE, PIPELINING…).
MAIL FROM:<addr>Démarre un nouveau message et définit l’expéditeur d’enveloppe (le “return path”). Réponse 250 si accepté.
RCPT TO:<addr>La commande clé pour la vérification. Demande au serveur d’accepter un destinataire. 250 = la boîte aux lettres est acceptée ; 550 = aucun utilisateur de ce nom ; 4xx = réessayer plus tard (par exemple greylisting).
DATACommence le corps du message. Le serveur répond 354 ; vous envoyez les en-têtes + le corps et terminez par un point unique . seul sur sa ligne. (Pour une vérification, vous n’atteignez jamais cette étape.)
RSETRéinitialise la transaction en cours (oublie MAIL FROM / RCPT TO) sans fermer la connexion.
VRFY userDemande au serveur de vérifier un nom d’utilisateur/une adresse. Conçue exactement pour cela, mais presque toujours désactivée aujourd’hui (renvoie 252 ou 502) car elle divulgue des adresses valides aux spammeurs.
EXPN listDemande au serveur de développer une liste de diffusion en ses membres. Comme VRFY, désactivée presque partout pour la même raison de confidentialité.
STARTTLSMet à niveau une connexion en clair vers une connexion TLS chiffrée (sur les ports 25/587). Proposé uniquement s’il figure dans la réponse EHLO.
AUTH LOGIN / PLAINAuthentifie un utilisateur (nécessaire pour envoyer du courrier via les ports de soumission, pas pour la vérification).
NOOPNe fait rien ; le serveur répond 250. Utile pour maintenir une connexion active ou tester la réactivité.
HELPDemande au serveur de lister les commandes qu’il prend en charge.
QUITTermine poliment la session. Le serveur répond 221 et ferme la connexion.

3. Codes de réponse

Le premier chiffre vous indique la catégorie, de sorte que vous pouvez lire n’importe quelle réponse même sans connaître le code exact :

  • 2xx — succès (commande acceptée).
  • 3xx — intermédiaire, le serveur attend davantage d’informations (par exemple 354 après DATA).
  • 4xx — échec temporaire : réessayez plus tard. L’adresse peut tout de même être valide.
  • 5xx — échec permanent : la commande ou l’adresse a été rejetée.
CodeSignification
220Service prêt (la bannière d’accueil).
221Fermeture de la connexion (réponse à QUIT).
250OK — commande acceptée (la réponse souhaitée après RCPT TO).
251 / 252Utilisateur non local mais sera transmis / impossible de vérifier mais tentative de livraison.
354Commencez à envoyer le corps du message (après DATA).
421Service indisponible, fermeture — souvent une limitation de débit.
450 / 451 / 452Problème temporaire (boîte aux lettres occupée, erreur locale, stockage insuffisant). Le greylisting apparaît fréquemment ici.
502Commande non implémentée (réponse typique à VRFY / EXPN).
550Boîte aux lettres indisponible / aucun utilisateur de ce nom — l’adresse n’existe pas.
551 / 552 / 553 / 554Utilisateur non local / quota dépassé / nom de boîte aux lettres incorrect / échec de la transaction.

4. Un exemple complet détaillé

Vérification de l’existence de john@example.com. Les lignes que vous tapez sont marquées > ; tout le reste provient du serveur :

$ telnet mail.example.com 25 220 mail.example.com ESMTP ready > EHLO checkemail.test 250-mail.example.com Hello checkemail.test 250-STARTTLS 250-SIZE 52428800 250 PIPELINING > MAIL FROM:<probe@checkemail.test> 250 2.1.0 Ok > RCPT TO:<john@example.com> 250 2.1.5 Ok ← la boîte aux lettres EXISTE > RSET 250 2.0.0 Ok > QUIT 221 2.0.0 Bye

Si, au contraire, le destinataire n’existe pas, vous verriez quelque chose comme :

> RCPT TO:<nosuchuser@example.com> 550 5.1.1 <nosuchuser@example.com>: Recipient address rejected: User unknown

5. Ce qui rend les résultats incertains

  • Greylisting — le serveur renvoie volontairement un 4xx temporaire lors de la première tentative, vous demandant de revenir plus tard. Un 4xx ne signifie pas que l’adresse est invalide.
  • Domaines catch-all — certains serveurs acceptent tous les destinataires avec 250 et font le tri ensuite. Dans ce cas, RCPT TO ne peut pas prouver l’existence d’une boîte aux lettres précise. Pour détecter un catch-all, essayez une adresse manifestement aléatoire : si elle est elle aussi acceptée, le domaine est catch-all.
  • Défenses anti-abus — les serveurs peuvent retarder, masquer le véritable statut ou bloquer les sondages répétés depuis une seule IP. Testez poliment et ne sollicitez pas un serveur de manière excessive.
  • VRFY / EXPN désactivées — ne vous y fiez pas ; RCPT TO est le signal concret.

Vous voulez que tout cela soit fait automatiquement, y compris la recherche MX, la détection des catch-all et un verdict clair ? Utilisez notre Vérificateur d’e-mails sur la page d’accueil.