emailmarketing.net

Événements de livraison et diagnostic

La taxonomie des événements de livraison qu’émet un ESP ou un MTA (processed, deferred, delivered, bounce, blocked, dropped, spamreport, open, click), ainsi que les rapports de délivrabilité, le diagnostic des retards et le score de qualité de l’engagement : la couche d’instrumentation sous les procédures de dépannage.

Opérationnel16 min de lecture

À qui cela s’adresse Opérateurs ESP, Expéditeurs

S’applique aux expéditeurs, quelle que soit leur plateforme

Chaque message que traite un ESP passe par une suite d’états, et chaque changement d’état est un événement que la plateforme enregistre et peut transmettre en continu au client. Ce flux d’événements est la télémétrie brute qui sous-tend tout diagnostic de délivrabilité : taux de rebonds et de plaintes, estimations de placement en boîte de réception par fournisseur, analyse des retards et score d’engagement sont tous des agrégations de ce flux. Cet article décrit la taxonomie des événements qu’émet un ESP ou un MTA, en prenant l’Event Webhook de SendGrid comme exemple de référence entièrement spécifié, puis présente les couches de rapports, de diagnostic des retards et de score d’engagement construites par-dessus.

Pour les seuils qu’alimentent ces événements et les mesures correctives qu’ils déclenchent, voir Indicateurs et valeurs de référence de la délivrabilité ; pour les parcours de diagnostic pas à pas, voir Procédures de dépannage de la livraison. Cet article est la couche d’instrumentation sous-jacente à ces deux articles.

La taxonomie des événements

Les événements se répartissent en trois familles : les événements de livraison (ce que le système d’envoi et les serveurs de réception ont fait du message), les événements d’engagement (ce qu’a fait le destinataire) et les événements de compte (changements de statut au niveau de la plateforme). L’Event Webhook de SendGrid les publie en JSON ; les noms sont des libellés propres à l’éditeur, mais toute infrastructure d’envoi produit des états équivalents.

Événements de livraison

Événement Signification Déclencheur
processed La plateforme a accepté le message et peut le livrer Message injecté, validé et placé en file d’attente pour le MTA sortant
deferred Le serveur de réception a refusé le message temporairement Réponse 4.x.x du MTA distant (liste grise, limitation de débit, « try again later ») ; la plateforme réessaie
delivered Le serveur de réception a accepté le message (250 OK) Le MTA distant a renvoyé un succès 2.x.x sur DATA
bounce Le serveur de réception a rejeté le message Rejet permanent 5.x.x (ou échec temporaire dont les nouvelles tentatives sont épuisées), renvoyé pendant la session SMTP ou par DSN asynchrone
blocked Un sous-type de rebond temporaire : rejet temporaire pour des raisons de réputation, de contenu ou techniques Le MTA distant a rejeté le message, mais l’échec n’est pas « adresse invalide » ; représenté comme un rebond type: "blocked"
dropped La plateforme elle-même a refusé d’envoyer : le message n’est jamais parti Destinataire présent dans une liste de suppression (rebond antérieur, désabonnement, signalement de spam, adresse invalide), contenu signalé comme spam, en-tête ou modèle invalide, ou quota dépassé

Les distinctions de sens qu’un opérateur doit avoir intégrées :

  • deferred ≠ bounce. Un report de remise est un refus temporaire que la plateforme continue de retenter ; il ne devient un rebond que lorsque les nouvelles tentatives sont épuisées. Des reports persistants sont la signature classique d’une limitation de débit (voir Diagnostic des retards et de la latence).
  • bounce ou blocked. SendGrid code les deux sous l’événement bounce et les distingue par le champ type : type: "bounce" = rebond définitif (permanent, par exemple une adresse qui n’existe pas) ; type: "blocked" = rebond temporaire (rejet temporaire lié à la réputation, au contenu ou à un problème technique). Dans le rapport Bounces & Blocks de l’interface, un Bounce désigne une adresse email invalide (qui n’a jamais existé ou a été désactivée), tandis qu’un Block signifie que le message a été rejeté pour des « content and reputation issues or technical failures » (problèmes de contenu et de réputation ou défaillances techniques). Un blocage est un signal du récepteur sur vous, pas sur l’adresse : il peut disparaître une fois le problème de réputation ou de contenu corrigé. Voir Listes de blocage DNS et zones Spamhaus.
  • dropped est auto-infligé ou protecteur. La plateforme a supprimé l’envoi avant la transmission. La plupart des abandons sont sains (supprimer une adresse connue comme mauvaise protège la réputation) ; un pic d’abandons pour des raisons inattendues (modèle invalide, quota dépassé) signale un défaut côté expéditeur, pas un problème de récepteur. La portée des suppressions est traitée dans Architecture des listes de suppression.
  • delivered ≠ boîte de réception. delivered est publié sur le 250 OK du serveur de réception. À ce stade, le récepteur peut encore diriger le message vers la boîte de réception, le mettre en file d’attente, le classer en spam ou en courrier indésirable, le supprimer sans rien dire ou (Gmail) le ranger dans un onglet, et la plateforme d’envoi ne reçoit aucun autre signal sur tout cela. La seule preuve en aval est l’engagement du destinataire (ouverture, clic). Un taux de livraison élevé avec un engagement quasi nul est l’empreinte d’un classement en spam. C’est pourquoi le placement en boîte de réception ne peut être qu’estimé (tests sur liste de test, tableaux de bord postmaster des fournisseurs), jamais lu directement dans le flux de livraison. Voir Distorsions du suivi et de la mesure et Surveillance de la réputation.

Classification des rebonds

Pour les événements bounce, SendGrid ajoute un champ bounce_classification qui range l’échec SMTP dans une cause sur laquelle un opérateur peut agir :

Classification Signification et action de l’opérateur
Invalid Address L’adresse n’existe pas ou n’a jamais existé : la retirer définitivement (hygiène de base de données)
Mailbox Unavailable Boîte pleine ou temporairement injoignable : souvent temporaire ; peut se rétablir
Technical Échec DNS, de connexion, de protocole ou TLS : côté infrastructure
Content Le contenu du message a déclenché un rejet ou un filtrage : corriger le contenu ou les liens
Reputation La réputation de l’IP ou du domaine d’envoi a causé le rejet : rétablissement de la réputation
Frequency/Volume Débit ou volume d’envoi trop élevé pour le récepteur : limiter le débit (voir Réglage de la livraison par le MTA)
Unclassified Impossible à classer

Les catégories Content et Reputation sont celles qui alimentent le score de qualité de l’engagement (voir plus bas) comme signal d’alerte précoce, car elles indiquent que le récepteur vous juge, et non que l’adresse est mauvaise.

Événements d’engagement

Événement Signification Déclencheur
open Le destinataire a affiché le message HTML Chargement du pixel de suivi des ouvertures (Open Tracking doit être activé)
click Le destinataire a cliqué sur un lien de suivi Lien réécrit suivi (Click Tracking doit être activé)
spamreport Le destinataire a marqué le message comme spam (une plainte) Action « marquer comme spam » du destinataire, relayée par la feedback loop du fournisseur
unsubscribe Le destinataire a cliqué sur le lien global de désinscription de tous les envois Subscription Tracking activé
group_unsubscribe Le destinataire s’est désabonné d’un groupe de suppression Lien de désabonnement du groupe ou centre de préférences
group_resubscribe Le destinataire s’est réabonné à un groupe Centre de préférences (Subscription Tracking activé)

Précautions sur l’engagement (essentielles pour ne pas être induit en erreur par le flux) :

  • Ouvertures par des machines. SendGrid renseigne sg_machine_open: true lorsque l’ouverture a été générée par Apple Mail Privacy Protection (MPP) et non par un humain. Ces ouvertures doivent être exclues de toute mesure réelle de l’engagement. Le préchargement des images de Gmail déclenche de même des ouvertures sans humain. Voir Distorsions du suivi et de la mesure et Interactions non humaines.
  • spamreport est votre signal de plainte. C’est la moitié, côté expéditeur, de la feedback loop du fournisseur ; un taux de spamreport soutenu est la donnée d’entrée la plus dommageable pour la réputation. Voir Feedback loops de plaintes.

Événements de compte

SendGrid émet account_status_change lorsque la plateforme modifie la situation d’un compte pour des raisons de conformité (phishing, taux de spam élevés, « other bad behavior »). Le champ type porte l’action, par ordre de gravité croissante :

type Effet
compliance_suspend Bloque la livraison ; met les messages en file d’attente et les fait rebondir au moment de la livraison
compliance_deactivate Bloque la livraison ; rejette les files d’attente ; supprime les messages en file d’attente ; bannit l’utilisateur au bout de 48 heures
compliance_ban Bloque la livraison ; rejette et supprime les files d’attente ; retire l’accès à la console ; annule la facturation ; retire les adresses IP
reactivate Rétablit le compte en statut actif

Pour le point de vue de l’opérateur d’ESP (détection, confinement et échelle des sanctions), voir Comptes compromis, Surveillance des envois sortants et Architecture multi-tenant.

Champs de la charge utile des événements

Le JSON du webhook comporte un socle commun et des champs propres à chaque événement. C’est le vocabulaire du diagnostic : les champs que l’on met en correspondance pour répondre à la question « qu’est-il arrivé à ce message ? ».

Champ Type Événements Signification
email chaîne tous Adresse du destinataire
timestamp entier (UNIX) tous Moment où l’événement s’est produit
event chaîne tous Identifiant du type d’événement
sg_event_id chaîne tous Identifiant unique de l’événement (compatible URL, ≤ 100 caractères) : clé de dédoublonnage
sg_message_id chaîne tous Identifiant unique du message : clé de jointure entre les événements d’un même message
smtp-id chaîne livraison + bounce/spam/group Message-ID attribué par le système d’origine
category chaîne / tableau livraison + engagement Étiquettes d’organisation personnalisées définies par l’expéditeur
asm_group_id entier la plupart Identifiant du groupe de désabonnement (suppression)
marketing_campaign_id / _name entier / chaîne livraison + engagement Identifiants de la campagne
pool objet {name, id} processed Pool d’IP depuis lequel le message a été envoyé
ip chaîne delivered, open, click, group unsub/resub IP d’envoi (delivered) ou IP du destinataire (engagement)
response chaîne delivered, deferred Texte intégral de la réponse du serveur de réception
reason chaîne bounce, deferred, dropped Raison de l’erreur ou de l’abandon, lisible par un humain
status chaîne X.Y.Z bounce, dropped Code d’état étendu (voir Codes d’état étendus)
attempt entier deferred Nombre de tentatives de livraison jusqu’ici
type chaîne bounce, account bounce/blocked, ou l’action sur le statut du compte
bounce_classification chaîne bounce Catégorie de cause (tableau ci-dessus)
tls booléen bounce, delivered Indique si la connexion a utilisé TLS
url chaîne click, group unsub/resub L’URL concernée
url_offset entier click Index (à partir de zéro) du lien dans le HTML (les URL en double reçoivent des index distincts)
useragent chaîne open, click, group unsub/resub Programme client qui a généré l’événement
sg_machine_open booléen open Vrai si l’ouverture a été générée par Apple MPP
unique_args objet livraison + engagement Paramètres personnalisés fournis par l’expéditeur

Note opérationnelle : SendGrid recommande de ne jamais placer de données personnelles dans category / unique_args : la plateforme peut s’en servir pour ses opérations internes, elles ne peuvent pas être masquées et elles peuvent être conservées longtemps.

Une requête de diagnostic typique joint tous les événements qui partagent un même sg_message_id et les trie par timestamp pour reconstituer l’historique complet d’un message (processed → deferred×N → delivered → open), ou agrège par event + bounce_classification + domaine de réception pour trouver quel fournisseur rejette quelle catégorie de messages.

Rapports de délivrabilité

Agréger le flux d’événements dans un tableau de bord de diagnostic correspond au modèle « Deliverability Insights » (SendGrid : Stats → Deliverability Insights). Les données ont environ 48 heures de retard sur le temps réel. Le rapport présente quatre vues :

Vue Contenu
Overview Processed (« la quantité de messages que vous avez tenté d’envoyer »), Delivered ( % acceptés par les fournisseurs de messagerie), Bounce & Blocked ( % non livrés), Unique Opens ( % des messages livrés qui ont été ouverts), en tendance dans le temps
Mailbox Providers Les mêmes indicateurs segmentés par fournisseur (Gmail, Yahoo, Microsoft, AOL, …) : taux de livraison, taux d’ouverture, répartition rebonds/blocages
Bounces & Blocks Sépare les deux types d’échec : Bounce = adresse invalide ; Block = rejet pour des raisons de contenu, de réputation ou techniques
Spam & Unsubscribes Comportements de plainte et de désinscription, par fournisseur

Le choix de conception décisif est la segmentation par fournisseur de messagerie. Un taux de livraison global de 95 % peut masquer un blocage total chez un fournisseur ; la réputation se joue fournisseur par fournisseur, donc le diagnostic et le rétablissement aussi (voir Surveillance de la réputation et Réglages de référence par fournisseur). Les seuils d’interprétation publiés par SendGrid pour cette vue :

Signal Seuil
Taux de blocage Objectif ≤ 3 % chez chaque grand fournisseur de messagerie
Taux de signalement de spam ≥ 0,1 % chez un seul fournisseur, c’est excessif
Taux de rebonds Constamment au-dessus de 5 %, c’est préoccupant
Déclencheur de mise en sommeil Messages non ouverts et non cliqués pendant 3 mois → cesser d’écrire à cette adresse

Ces seuils concordent avec les seuils multisources de Indicateurs et valeurs de référence de la délivrabilité (le consensus ≤ 0,1 % de plaintes / < 5 % de rebonds, et la limite de violation de 0,3 % chez Gmail et Yahoo).

Diagnostic des retards et de la latence

« Retard » peut désigner deux choses très différentes, et les confondre égare le diagnostic :

1. Retard côté récepteur (reports de remise, limitation de débit). Le message a quitté la plateforme, mais c’est le récepteur qui le retient : liste grise, limitation de débit ou « try again later ». Cela se traduit par des événements deferred avec un compteur attempt croissant et une response 4.x.x. La plateforme réessaie selon un calendrier ; SendGrid retente les messages reportés pendant 72 heures au maximum, après quoi le message est converti en rebond. Des reports persistants concentrés chez un seul fournisseur = vous dépassez la tolérance de débit ou de volume de ce fournisseur : le remède est d’adapter le trafic au récepteur (réduire la concurrence ou le débit, étaler l’envoi sur davantage d’heures), pas de multiplier les tentatives. Voir Réglage de la livraison par le MTA et Liste grise (RFC 6647).

2. Retard côté plateforme ou à l’injection (bloqué en Processing). Le message n’atteint jamais un récepteur : il reste à l’état processed. SendGrid documente plusieurs causes :

  • Restriction de volume sur une nouvelle adresse IP dédiée : un plafond de volume s’applique pendant les 3 premiers jours sur une nouvelle IP dédiée pour prévenir les abus ; montez en charge en suivant le processus de chauffe d’IP.
  • Mise en attente pour conformité : l’envoi d’un compte en cours d’examen, ou sur lequel une activité inhabituelle a été détectée, est suspendu jusqu’à confirmation par l’équipe Compliance.
  • Engorgement de la file d’attente du MTA : un volume d’envoi très élevé peut accumuler les messages dans la file d’attente du MTA sortant ; mettez l’envoi en pause ou mettez une autre IP en service.
  • Suspension des comptes dormants : les comptes sans aucune connexion sont suspendus automatiquement.

Les messages restent en attente pendant 72 heures au maximum ; si le problème sous-jacent n’est pas résolu, ils deviennent des rebonds définitifs.

3. Latence de transport (intégration, réseau). Le message arrive lentement dans la plateforme. Les recommandations de SendGrid portent sur le débit et le chemin réseau :

  • Utiliser les bibliothèques clientes officielles (C#, PHP, Ruby, Node.js, Python, Go, Java) plutôt que du code écrit à la main.
  • Débit SMTP : jusqu’à 5 000 messages par connexion, jusqu’à 1 000 destinataires To: par message (via l’en-tête x-smtpapi).
  • Ouvrir des connexions simultanées supplémentaires : au maximum ~10 connexions simultanées recommandées.
  • Diagnostic réseau : hping / Test-NetConnection mesurent le temps de réponse et le TTL ; tout ce qui dépasse environ 150 ms de temps de réponse est un premier signal d’alerte. Le mode traceroute révèle la latence de chaque saut (surveillez les hausses brusques d’un saut à l’autre). Les analyseurs d’en-têtes (par exemple celui de Google) montrent le trajet du message de MTA en MTA et le temps passé à chaque étape ; Wireshark capture la conversation SMTP pour une inspection approfondie.

Ordre des opérations du diagnostic : vérifiez d’abord l’état event (processed → problème de plateforme ou de conformité ; deferred → limitation de débit par le récepteur ; delivered sans engagement → classement en spam, qui est un problème de placement et non de retard). Les outils de latence de transport ne s’appliquent qu’une fois confirmé que le message quitte normalement la plateforme.

Score de qualité de l’engagement

L’agrégation de plus haut niveau résume tout le flux d’événements en un seul score de santé. L’API Engagement Quality (SEQ) de SendGrid en est l’exemple de référence : elle renvoie un score de 1 à 5 (plus il est élevé, meilleurs sont l’engagement et la délivrabilité), destiné à permettre à un opérateur de classer les expéditeurs et les sous-utilisateurs à grande échelle et de repérer une dégradation avant qu’elle ne devienne un incident de réputation.

Conditions pour obtenir un score : suivi des ouvertures activé et ≥ 1 000 messages envoyés au cours des 30 derniers jours. Les scores sont conservés 90 jours au maximum. Les points de terminaison renvoient les scores au niveau du compte et par sous-utilisateur.

Le score se compose de cinq composantes pondérées ; ce sont exactement les signaux dérivés des événements décrits plus haut, condensés :

Composante Ce qu’elle mesure
Engagement Recency  % des adresses uniques destinataires au cours des 30 derniers jours qui ont aussi interagi (ouverture ou clic) au cours des 90 derniers jours
Unique Open Rate Taux le plus bas sur les 7 et 30 derniers jours pour les 5 principaux fournisseurs de messagerie ; exclut les ouvertures par les machines d’Apple et les messages non livrés
Bounce Rate  % de rebonds permanents sur les 7 et 30 derniers jours ; retient le plus élevé (le pire) des deux
Bounce Classification Pondère les rebonds classés Reputation ou Content (les catégories où le récepteur vous juge)
Spam Rate Plaintes pour spam récentes sur une fenêtre de 7 jours

Cette conception montre ce qu’une plateforme considère réellement comme de la « qualité » : un engagement récent (écrivez-vous à des gens qui veulent encore vos messages ?), de vraies ouvertures (non générées par des machines) chez les fournisseurs qui comptent, des rebonds permanents qui évoluent dans le mauvais sens, les rebonds de réputation ou de contenu en particulier, et les plaintes. Un ESP peut utiliser ces scores de façon opérationnelle pour répartir les sous-utilisateurs en pools d’IP, signaler les expéditeurs peu performants à la surveillance des envois sortants, et conditionner le passage d’une infrastructure partagée à une infrastructure dédiée, dans un sens comme dans l’autre.

Voir aussi