Aller au contenu

Paramètres des cookies

Choisissez, par catégorie, les cookies que vous autorisez. Vous pouvez modifier votre choix à tout moment via Paramètres des cookies, en bas de chaque page. Politique de confidentialité

Nécessaires

Toujours activés

Indispensables pour vous connecter, conserver votre panier et mémoriser vos choix. Ils sont toujours activés.

Quels cookies ?
  • weboke_sessie, weboke_klant, weboke_remember: votre session et le maintien de la connexion
  • weboke_basket: votre panier
  • wkBtwIncl: l'affichage des prix TTC ou HT
  • wok_cookies: votre choix concernant les cookies, 12 mois

Mesure quelle publicité mène à une visite ou à une commande, pour que nous ne payions pas des publicités inefficaces.

Quels cookies ?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), jusqu'à 90 jours
  • OpenAI Ads, publicités dans ChatGPT
  • wok_aff: le partenaire qui vous a orienté vers nous (programme d'affiliation), 60 jours

4,6

Pays et langue

Chaque pays a son propre site, avec les prix et la TVA de ce pays.

Afficher

Module 1 · 1.2

SMTP : la conversation entre serveurs de messagerie

Module 1: Comment fonctionne l'e-mail · Temps de lecture : 10 minutes

Objectif pédagogique : après cette leçon, vous saurez lire une conversation SMTP, expliquer à quoi servent EHLO, MAIL FROM, RCPT TO et DATA, et reconnaître, à partir d'un code de réponse, si une erreur est temporaire ou définitive.

Notions clés : SMTP (RFC 5321), session, EHLO/HELO, MAIL FROM, RCPT TO, DATA, QUIT, code de réponse (2xx, 3xx, 4xx, 5xx), code de statut étendu, extensions (STARTTLS, AUTH, SIZE), null MX

Une conversation en texte brut

SMTP est un protocole très ancien (la première version date de 1982) et donc très lisible. Deux serveurs s'échangent des lignes de texte. L'expéditeur (le client) envoie une commande, le destinataire (le serveur) répond par un nombre de trois chiffres suivi d'une courte explication. Vous pouvez relire une telle conversation telle quelle dans un message d'erreur ou un journal, et c'est précisément pour cela qu'il est utile de la comprendre.

Voici ci-dessous une conversation complète. S: désigne le serveur destinataire, C: le serveur expéditeur. Le message va de anna@example.com à jan@example.net.

S: 220 mx1.mailprovider.example ESMTP ready
C: EHLO out.hosting.example
S: 250-mx1.mailprovider.example Hello out.hosting.example [192.0.2.25]
S: 250-SIZE 52428800
S: 250-8BITMIME
S: 250-STARTTLS
S: 250 SMTPUTF8
C: STARTTLS
S: 220 2.0.0 Ready to start TLS
   (à partir d'ici, la connexion est chiffrée ; le client renvoie EHLO)
C: EHLO out.hosting.example
S: 250 ...
C: MAIL FROM:<anna@example.com> SIZE=24310
S: 250 2.1.0 Ok
C: RCPT TO:<jan@example.net>
S: 250 2.1.5 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: Anna <anna@example.com>
C: To: Jan <jan@example.net>
C: Subject: Offerte
C: Date: Sun, 8 Nov 2026 10:15:00 +0100
C: Message-ID: <a1b2c3@example.com>
C:
C: Hoi Jan, hierbij de offerte.
C: .
S: 250 2.0.0 Ok: queued as 4F2A1B
C: QUIT
S: 221 2.0.0 Bye

Les commandes une par une

CommandeSignificationÀ noter
(connexion)Le serveur salue avec 220 et son nom.C'est ce qu'on appelle la banner. Si le serveur répond immédiatement 554, c'est qu'il ne veut pas du tout parler à votre IP (souvent une liste de blocage).
EHLO nom« Bonjour, je suis out.hosting.example. » Le serveur répond avec les extensions qu'il connaît.Le nom doit être le véritable nom du serveur expéditeur, de préférence identique à son enregistrement PTR (leçon 5.1). HELO est l'ancienne variante, sans extensions.
STARTTLS« Chiffrons désormais la connexion. »Uniquement si le serveur le propose. Entre serveurs, c'est généralement facultatif (leçon 5.4).
MAIL FROM:<adresse>L'expéditeur d'enveloppe : c'est là que partent les messages d'erreur.Deviendra ensuite l'en-tête Return-Path. SPF contrôle cette adresse. Une adresse vide <> est utilisée par les serveurs pour leurs propres messages d'erreur, afin qu'un bounce ne génère jamais lui-même un bounce.
RCPT TO:<adresse>Le destinataire. Peut apparaître plusieurs fois, une par destinataire.C'est ici que le serveur devrait déjà indiquer si l'adresse existe. Un 550 5.1.1 à ce stade est une erreur propre, identifiée immédiatement.
DATA« Voici maintenant le message lui-même. » Le serveur répond 354.Suivent ensuite les en-têtes, une ligne vide et le texte. Une ligne ne contenant qu'un point marque la fin.
QUITFin de la conversation.

L'élément essentiel à retenir : tout ce qui précède DATA est l'enveloppe, tout ce qui suit DATA est le contenu. Ce qui figure dans MAIL FROM et ce qui figure dans l'en-tête From: sont fournis séparément et n'ont pas besoin d'être identiques. Le serveur délivre selon RCPT TO ; la ligne To: du contenu ne joue aucun rôle dans la remise.

Les codes de réponse

Le premier chiffre du code est le plus important :

Commence parSignificationQue fait l'expéditeur ?
2Réussite.Passage à l'étape suivante. Un 250 après DATA signifie : le serveur a accepté le message et en est désormais responsable.
3Continuez, j'attends la suite.Uniquement pour 354 après DATA (et lors de l'authentification).
4Erreur temporaire : pas maintenant, réessayez plus tard.Le message reste dans la file d'attente et sera présenté à nouveau plus tard.
5Erreur définitive : cela ne pourra pas fonctionner.L'expéditeur abandonne et envoie un message d'erreur (bounce) à l'expéditeur d'enveloppe.

Après les trois chiffres, les serveurs modernes indiquent un code de statut étendu sous la forme class.subject.detail (RFC 3463), par exemple 5.1.1. Le premier chiffre vaut à nouveau 2, 4 ou 5. Le deuxième chiffre précise le sujet : 1 = adresse, 2 = boîte aux lettres, 3 = système de messagerie, 4 = réseau et routage, 5 = protocole, 6 = contenu, 7 = sécurité et politique. Quelques exemples fréquents :

550 5.1.1  The email account that you tried to reach does not exist
452 4.2.2  Mailbox full (temporaire)
552 5.3.4  Message size exceeds fixed limit
451 4.7.1  Greylisted, please try again later
550 5.7.1  Message rejected (politique : spam, liste de blocage, DMARC)

Au module 6, vous apprendrez à lire un bounce complet et vous trouverez un tableau avec les codes les plus fréquents.

Pourquoi la distinction temporaire/définitif est si importante

Un serveur qui hésite répond souvent par un 4xx. Un exemple bien connu est le greylisting : un serveur qui ne connaît pas encore un expéditeur dit, la première fois, « réessayez plus tard ». Un vrai serveur de messagerie revient après quelques minutes, beaucoup de programmes d'envoi de spam ne le font pas. Les grands destinataires utilisent également des 4xx pour ralentir le rythme lorsqu'ils ne font pas encore confiance à une adresse IP. Pour vous, en tant qu'expéditeur, cela signifie : un retard, mais pas une perte. Le système résout généralement cela de lui-même.

Un 5xx est différent. Dans ce cas, l'expéditeur ne va pas réessayer. Si vous recevez un 5xx, il faut que quelqu'un change quelque chose : l'adresse, le contenu, ou les paramètres du domaine expéditeur.

Un piège : certains serveurs renvoient un 5xx alors que le problème est temporaire (par exemple pour une boîte aux lettres pleine, 552 5.2.2), et d'autres renvoient un 4xx pour quelque chose qui ne fonctionnera jamais. Lisez donc toujours le texte qui suit le code, pas seulement le chiffre.

Qui est responsable ?

Après le 250 sur le point final de DATA, la responsabilité incombe au serveur destinataire. S'il ne parvient ensuite pas à déposer le message dans la boîte aux lettres, c'est à lui de renvoyer un message d'erreur. C'est l'origine d'un phénomène gênant : le backscatter. Un serveur qui accepte d'abord tout et ne se rend compte qu'ensuite que l'adresse n'existe pas envoie un bounce à l'expéditeur d'enveloppe. Si celui-ci a été falsifié par un spammeur, c'est un tiers innocent qui reçoit le bounce. C'est pourquoi les serveurs devraient refuser dès RCPT TO ce qui ne peut pas fonctionner (voir aussi le catch-all à la leçon 3.3).

En pratique : voir SMTP dans votre propre environnement

Un utilisateur ordinaire voit rarement l'intégralité de la conversation SMTP, mais il en voit des fragments :

  • dans un bounce figure la dernière ligne de la conversation, par exemple Remote-MTA: mx1.mailprovider.example et Diagnostic-Code: smtp; 550 5.1.1 ... ;
  • dans les en-têtes d'un message reçu figure, pour chaque serveur, une ligne Received: avec le nom EHLO et l'adresse IP (leçon 1.5) ;
  • dans un panneau de journal de messagerie, comme Suivi des e-mails dans DirectAdmin chez WebOké, vous voyez, pour chaque message, la réponse du serveur destinataire. Chez d'autres fournisseurs, cela s'appelle par exemple suivi des messages ou mail log, et le contenu est comparable.

Vous n'avez donc pas besoin de vous connecter vous-même à un serveur de messagerie pour pouvoir lire cela. Pour ceux qui souhaitent néanmoins essayer : avec openssl s_client -starttls smtp -connect server:25, vous pouvez mener la conversation vous-même, mais de nombreux fournisseurs d'accès grand public bloquent le trafic sortant sur le port 25 (leçon 1.4).

Résumé

  • SMTP est une conversation lisible : EHLO, (STARTTLS), MAIL FROM, RCPT TO, DATA, QUIT.
  • Tout ce qui précède DATA est l'enveloppe (remise et messages d'erreur), tout ce qui suit est le contenu avec les en-têtes que vous voyez.
  • 2xx = réussite, 4xx = temporaire (à réessayer plus tard), 5xx = définitif (bounce).
  • Le code étendu X.Y.Z indique le sujet concerné : X.1 adresse, X.2 boîte aux lettres, X.7 politique et sécurité.
  • Lisez toujours le texte qui suit le code ; les serveurs ne sont pas toujours cohérents.

Quiz

1. Quelle commande contient l'adresse vers laquelle un message d'erreur est envoyé ?



2. Un serveur répond 451 4.7.1 Greylisted, please try again later. Que fait un bon serveur expéditeur ?



3. Dans quelle partie de la conversation figure l'en-tête Subject: ?



4. Que signifie le deuxième chiffre dans 550 5.1.1 ?



5. Pourquoi est-il préférable qu'un serveur refuse une adresse inexistante dès RCPT TO, plutôt que d'accepter d'abord le message ?



Exercice

Exercice Z1.2 : Un domaine qui ne reçoit pas de courrier. Recherchez les enregistrements MX de example.com. Indiquez ce que vous trouvez et choisissez ce que fait un serveur expéditeur avec un message destiné à info@example.com : (a) le remettre au serveur de priorité 0, (b) essayer l'enregistrement A, (c) abandonner immédiatement, ou (d) réessayer plus tard. Le programme interroge l'enregistrement MX en direct et vérifie la réponse.

Exercice Z1.2: Un domaine qui ne reçoit pas de courrier

Recherchez les enregistrements MX de example.com et choisissez ce que fait un serveur d'envoi avec un courrier destiné à info@example.com.



Nous ne conservons pas ce que vous saisissez ni ce que nous trouvons. Votre navigateur mémorise vos réponses et si l'exercice est réussi. Si vous êtes connecté, nous enregistrons uniquement dans Mes formations que l'exercice était (presque) correct ; vous pouvez aussi le supprimer à cet endroit.

Pour aller plus loin

Les étapes décrites dans ces articles valent pour les panneaux de WebOké ; chez d'autres fournisseurs, le fonctionnement est comparable.

Un instant…

Configurez vos domaines

Pour chaque domaine, réglez les serveurs de noms, l'association à votre hébergement et le futur titulaire.

Chargement de vos domaines…