Traitement des bounces email

Mar 30, 2021

Qu’est-ce qu’un Bounce ?

Un mail « bounced » pour rebondi, est un mail envoyé automatiquement par un MTA (Mail Transfert Agent) à l’expéditeur pour informer que le message n’a pas été correctement reçu par le destinataire.

Les mails ainsi retournés contiennent les informations de bounce : un code avec une description (cf. les RFC suivantes : 3463 & 6522)

Les codes de statut sont définis en 3 catégories :

Success – Le mail a été délivré (2)

Soft Bounce – Une erreur temporaire est survenue

Hard Bounce – Une erreur permanente est survenue

 

Les codes de statut ont la syntaxe ci-dessous :

status-code = class « . » subject « . » detail

 

Les codes d’état se composent de trois champs numériques séparés par « . ».

Le premier sous-code (class) indique si la tentative de distribution a réussi.

Le deuxième sous-code (subject) indique la source probable de toute anomalie de livraison.

Le troisième sous-code (detail) indique une condition d’erreur précise.

 

Le sous-code (class) fournit une classification générale du statut. Les valeurs énumérées pour chaque classe sont définies comme suit dans la RFC :

2.XXX.XXX Success
Success specifies that the DSN is reporting a positive delivery action. Detail sub-codes may provide notification of transformations required for delivery.

4.XXX.XXX Persistent Transient Failure
A persistent transient failure is one in which the message as sent is valid, but persistence of some temporary condition has caused abandonment or delay of attempts to send the message. If this code accompanies a delivery failure report, sending in the future may be successful.

5.XXX.XXX Permanent Failure
A permanent failure is one which is not likely to be resolved by resending the message in the current form. Some change to the message or the destination must be made for successful delivery.

Quelques exemples de code & description :

  • 4.2.2 : Over quota
  • 4.4.5 : Insufficient disk space
  • 5.0.0 : Invalid domain name
  • 5.2.2 : Mailbox Full
  • 5.7.1 : Message content rejected

Rappelons que le traitement des bounces est un basique et pré-requis en Délivrabilité.

Sisimai – Mail Analyzing Interface

 

Sisimai Overview

Sisimai est un outil open source en Perl et Ruby pouvant traiter et analyser des bounces afin de les transformer en format JSON.

Il est sous licence BSD 2-Clause.

En se basant sur différentes normes, il peut lire et parser les mails provenant d’une cinquantaine de MTA, ESP (email service provider) et Outils. Quelques moteurs supportés :

  • Postfix
  • Exim
  • Office365
  • Barracuda
  • Amavis
  • Exchange2007

Chaque mail sera analysé pour normaliser son code & sa description parmi 29 valeurs possibles. Par exemple :

  • mailboxfull
  • rejected
  • spamdetected
  • userunknown
C’est un outil très simple et performant. Ci dessous un exemple d’utilisation en Perl :


#!/usr/bin/perl

use strict;

use warnings;

use Sisimai::Mail::Maildir;
use Sisimai::Data;
use Sisimai::Message;

my $mails = Sisimai::Mail::Maildir->new(/path/to/maildir/);
while (my $content = $mails->read()) {
my $mesg = Sisimai::Message->new(‘data’ => $content);
my $data = Sisimai::Data->make(‘data’ => $mesg);
print ( @{$data}[0]->damn );
}

::

{
…
‘deliverystatus’ => ‘5.1.1’,
…
‘diagnosticcode’ => ‘SMTP error from remote mail server after RCPT TO:<xxxx@xxxx.net>: host 192.0.2.22 [192.0.2.22]: 550 5.1.1 <xxxx@xxxx.net>: Recipient address rejected: User unknown in local recipient table’,
‘diagnostictype’ => ‘SMTP’,
…
‘reason’ => ‘userunknown’,
…
‘replycode’ => ‘550’,
…
‘smtpagent’ => ‘Exim’,
‘smtpcommand’ => ‘RCPT’,
‘softbounce’ => 0,
…
};

Toutes les informations pour utiliser ou rejoindre et participer à ce projet sont ici : https://libsisimai.org/en/