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é.
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.
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).
| Commande | Rôle |
|---|---|
HELO domain | Salutation ancienne. Identifie l’hôte qui se connecte par son nom. Le serveur répond 250. |
EHLO domain | Salutation 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). |
DATA | Commence 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.) |
RSET | Réinitialise la transaction en cours (oublie MAIL FROM / RCPT TO) sans fermer la connexion. |
VRFY user | Demande 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 list | Demande 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é. |
STARTTLS | Met à 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 / PLAIN | Authentifie un utilisateur (nécessaire pour envoyer du courrier via les ports de soumission, pas pour la vérification). |
NOOP | Ne fait rien ; le serveur répond 250. Utile pour maintenir une connexion active ou tester la réactivité. |
HELP | Demande au serveur de lister les commandes qu’il prend en charge. |
QUIT | Termine poliment la session. Le serveur répond 221 et ferme la connexion. |
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 :
354 après DATA).| Code | Signification |
|---|---|
220 | Service prêt (la bannière d’accueil). |
221 | Fermeture de la connexion (réponse à QUIT). |
250 | OK — commande acceptée (la réponse souhaitée après RCPT TO). |
251 / 252 | Utilisateur non local mais sera transmis / impossible de vérifier mais tentative de livraison. |
354 | Commencez à envoyer le corps du message (après DATA). |
421 | Service indisponible, fermeture — souvent une limitation de débit. |
450 / 451 / 452 | Problème temporaire (boîte aux lettres occupée, erreur locale, stockage insuffisant). Le greylisting apparaît fréquemment ici. |
502 | Commande non implémentée (réponse typique à VRFY / EXPN). |
550 | Boîte aux lettres indisponible / aucun utilisateur de ce nom — l’adresse n’existe pas. |
551 / 552 / 553 / 554 | Utilisateur non local / quota dépassé / nom de boîte aux lettres incorrect / échec de la transaction. |
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
4xx temporaire lors de la première tentative, vous demandant de revenir plus tard. Un 4xx ne signifie pas que l’adresse est invalide.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.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.