Delivery Status Notifications : le format des DSN (RFC 3464)
Comment sont structurés les messages de rebond : le format DSN multipart/report, les champs par message et par destinataire (Action, Status, Diagnostic-Code), et comment les expéditeurs devraient les analyser.
Référence6 min de lecture
À qui cela s’adresse Opérateurs ESP, Expéditeurs
S’applique aux expéditeurs, quelle que soit leur plateforme
SommaireSur cette page : 6 sections
La RFC 3464 définit le format normalisé du message de rebond lisible par une machine : la Delivery Status Notification (DSN), ou notification d’état de livraison. Lorsqu’un message ne peut pas être livré (ou que sa livraison est retardée, ou qu’une notification positive demandée se déclenche), le MTA qui fait le rapport renvoie une DSN à l’expéditeur d’enveloppe. Tout processeur automatique de rebonds est, au fond, un analyseur de ce format, complété d’heuristiques pour le reste, qui n’est pas conforme.
Règles d’enveloppe
- Une DSN envoyée par SMTP DOIT utiliser une adresse de retour nulle :
MAIL FROM:<>. Cela empêche les boucles de messagerie : aucune DSN n’est jamais générée pour une DSN. - Corollaire pour les expéditeurs : les rebonds arrivent à l’adresse que vous avez indiquée dans le
MAIL FROMdu message d’origine. Utiliser une adresse de retour encodée par destinataire (VERP, par exemplebounces+user=example.com@sender.com) permet d’identifier le destinataire en échec même lorsque le corps de la DSN est mal formé, et permet à un processeur de feedback loop de réutiliser la même chaîne de suppression. - Chaque destinataire indiqué par l’expéditeur DEVRAIT donner lieu à au plus une DSN « delivered » ou « failed ». Lorsqu’un message atteint un alias de liste de diffusion, le MTA de transfert DEVRAIT émettre une DSN « expanded » pour le destinataire d’origine et ne pas propager la demande de DSN aux adresses issues de l’expansion.
Structure générale : multipart/report
Une DSN est un message MIME Content-Type: multipart/report; report-type=delivery-status, qui contient :
| Partie | Content-Type | Rôle |
|---|---|---|
| 1 | text/plain (en général) |
Explication lisible par un humain de ce qui s’est passé |
| 2 | message/delivery-status |
État analysable par une machine : la partie que lisent les processeurs de rebonds |
| 3 | message/rfc822 ou text/rfc822-headers |
Le message d’origine renvoyé (ou ses en-têtes), facultatif |
La partie message/delivery-status est un ensemble de groupes de champs de type en-tête : un groupe par message, puis un groupe par destinataire pour chaque destinataire rapporté, chaque groupe étant séparé par une ligne vide.
Champs par message
| Champ | Obligatoire ? | Syntaxe / signification |
|---|---|---|
Reporting-MTA |
Obligatoire | mta-name-type; mta-name : le MTA qui rapporte le résultat, par exemple dns; mail.example.net |
Original-Envelope-Id |
Facultatif | Identifiant de transaction fourni à la soumission, pour rapprocher la DSN de l’envoi d’origine |
DSN-Gateway |
Conditionnel | Présent uniquement quand la DSN a été traduite depuis un système de rapport étranger (non Internet) |
Received-From-MTA |
Facultatif | Nom du MTA dont le message a été reçu |
Arrival-Date |
Facultatif | Date et heure RFC 822 d’arrivée du message au MTA qui fait le rapport |
Les noms de MTA sont sensibles à la casse ; leur orthographe doit être conservée exactement.
Champs par destinataire
| Champ | Obligatoire ? | Syntaxe / signification |
|---|---|---|
Final-Recipient |
Obligatoire | address-type; generic-address : l’adresse du destinataire telle que l’a vue le MTA qui fait le rapport |
Action |
Obligatoire | L’une des cinq valeurs ci-dessous |
Status |
Obligatoire | Code d’état étendu, DIGIT.1*3DIGIT.1*3DIGIT (par exemple 5.1.1) |
Original-Recipient |
Facultatif | L’adresse telle que l’expéditeur l’a indiquée à l’origine (avant transfert ou réécriture) |
Remote-MTA |
Facultatif | Le MTA du saut suivant impliqué dans la tentative de livraison rapportée |
Diagnostic-Code |
Facultatif | diagnostic-type; text : l’erreur réelle au niveau du transport, par exemple la réponse SMTP complète du serveur distant |
Last-Attempt-Date |
Facultatif | Date et heure RFC 822 de la dernière tentative de livraison |
Final-Log-ID |
Facultatif | Référence dans le journal de livraison du MTA qui fait le rapport |
Will-Retry-Until |
Facultatif | Pour delayed uniquement : moment où le MTA abandonnera |
Valeurs d’Action (exactement cinq, insensibles à la casse)
| Action | Signification | Traitement par le processeur de rebonds |
|---|---|---|
failed |
N’a pas pu être livré ; l’abandon est définitif | Le rebond. Classer à l’aide de Status et de Diagnostic-Code |
delayed |
Pas encore livré ; les tentatives continuent (voir Will-Retry-Until) |
Informatif ; ne pas supprimer l’adresse : une DSN failed peut suivre ou non |
delivered |
Livré avec succès à l’adresse du destinataire | DSN positive (uniquement si demandée) ; pas un rebond |
relayed |
Transmis vers un environnement qui n’accepte pas la responsabilité des DSN | Terminal du point de vue des DSN, mais pas une preuve de livraison |
expanded |
Livré à l’adresse indiquée par l’expéditeur, qui était un alias ou une liste à plusieurs destinataires qui l’a renvoyé | Non terminal ; utilisé uniquement pour les alias à plusieurs destinataires |
Status et Diagnostic-Code
Statusporte le code d’état étendu, indépendant du transport : c’est la clé de classement principale (4.x.xtemporaire,5.x.xdéfinitif).Diagnostic-Codeconserve l’erreur de transport brute ; le typesmtpsignifie que le texte est la réponse SMTP du serveur distant. La RFC note qu’il est « quelque peu redondant » avecStatus, mais qu’il est fourni pour conserver l’information d’origine. LorsqueRemote-MTAest présent, le diagnostic vient de ce MTA ; sinon, du MTA qui fait le rapport. En pratique, le texte du diagnostic contient souvent des détails propres au fournisseur (noms de listes de blocage, URL de politique, « user unknown ») que leStatusnumérique ne donne pas : analysez les deux.
Conventions de type
- Les valeurs
address-type,mta-name-typeetdiagnostic-typesont des atomes insensibles à la casse : les valeurs standard sontrfc822(adresses),dns(noms de MTA),smtp(diagnostics) ;unknownquand le type ne peut pas être déterminé ; préfixeX-pour les types expérimentaux ; les nouveaux types sont enregistrés auprès de l’IANA. - Le contenu qui suit le type peut être sensible à la casse (parties locales des boîtes aux lettres) et doit être conservé exactement.
Exemple (tiré de la RFC)
Reporting-MTA: dns; cs.utk.edu
Original-Recipient: rfc822;louisl@larry.slip.umd.edu
Final-Recipient: rfc822;louisl@larry.slip.umd.edu
Action: failed
Status: 4.0.0
Diagnostic-Code: smtp; 426 connection timed out
Last-Attempt-Date: Thu, 7 Jul 1994 17:15:49 -0400
Conseils d’analyse pour les expéditeurs
- Identifier le destinataire : privilégier
Original-Recipient, à défautFinal-Recipient; retirer le préfixe de typerfc822;. Si le corps est inexploitable, se rabattre sur l’adresse de retour encodée par VERP. - Filtrer sur
Action: seulfaileddéclenche la suppression. Ignorerdelayedpour l’hygiène de base de données (le journaliser pour la surveillance de la livraison) ; traiterdelivered/relayed/expandedcomme des non-rebonds. - Classer sur
Status:5.x.x→ logique de rebond définitif,4.x.x→ compteurs de rebonds temporaires. Utiliser la table des codes de détail pour séparer les codes d’adresse invalide (à supprimer) des codes de politique ou de réputation (à investiguer : une vague de5.7.1est un problème d’expéditeur, pas un problème de liste). - Affiner sur
Diagnostic-Code: des règles par expression régulière ou mot-clé sur le texte SMTP brut détectent les situations propres à un fournisseur que le code numérique masque (listes de blocage nommées, « spam content », avis de limitation de débit). - S’attendre à plusieurs groupes de destinataires par DSN : un seul message de rebond peut rapporter plusieurs destinataires ; traiter chaque groupe indépendamment.
- S’attendre à la non-conformité : beaucoup de rebonds réels sont du texte libre sans aucune partie
message/delivery-status. L’analyse RFC 3464 est la voie rapide ; gardez une solution de repli heuristique et VERP comme filet de sécurité. - Ne jamais répondre automatiquement à une DSN, et ne jamais envoyer vos propres rebonds avec une adresse de retour non nulle : c’est la règle
MAIL FROM:<>qui préserve l’écosystème des boucles.
Vérifier votre propre enregistrement
Le diagnostic gratuit lit ce que votre domaine publie dans le DNS.
Dans ce thème
Les 3 articles du thème Gestion des rebonds →