Optimiser le taux de remise des courriels applicatifs

La RFC 2822, qui standardise le format des courriers électroniques, impose un encodage particulier pour les entêtes de message. Un, en particulier, va retenir notre attention ici : le sujet. Correctement encoder ce dernier vous permettra d'augmenter le taux de remise et, donc, de lecture de vos messages applicatifs (confirmations, notifications, newsletter, etc.).

Ce que dit la RFC 2822

Un nom de champ DOIT être composé de caractères imprimables US-ASCII (ayant un code ASCI entre 22 et 126 compris), ou du caractère "virgule". La valeur d'un champ peut être composée de n'importe-quel caractère du jeu US-ASCII, et de CR ou LF.

Jeu de caractères US-ASCII

Cependant, dans notre alphabet, ce champ "sujet" doit pouvoir contenir des caractères accentués, qui ne sont PAS compris dans le jeu US-ASCII. Il est alors essentiel de correctement l'encoder pour ne pas risquer de voir le courriel rabaisser au rang de SPAM par certains serveurs de mail équipés de filtres anti-spam (comme Amavis par exemple) pour non respect de la RFC.

Cas pratique

Imaginons que l'entête sujet de votre message soit le suivant :

Subject : Ce sujet est mal encodé !

Le serveur d'envoi peut détecter le problème d'encodage et mettre le courriel en quarantaine. Au final, le message sera peut être remis, mais le délai de transmission s'en voit ralongé (d'un poil, certes, mais sur un gros volume ceci consomme des cycles processeur sur le serveur d'envoi !). Le message sera alors remis avec un champ d'entête supplémentaire :

X-Quarantine-ID: <fb2QBXfjQ4Nx>

Un fichier de quarantaine Amavis relatif à cette erreur contiendrait :

Delivered-To: bad-header-quarantine
X-Amavis-Alert: BAD HEADER SECTION Non-encoded 8-bit data (char C3 hex):
Subject: Ce sujet est mal encod\303\251[...]

Le serveur de réception, ou le client de lecture final, peut également détecter ce problème d'encodage, ou prendre ce champ en considération et marquer le message comme courrier indésirable. Rassurez-vous, il y a bien sûr...

La solution

Elle est universelle, quelque soit le jeu de caractère utilisé pour le message ! En PHP, il suffit simplement d'encoder le sujet du message à l'aide de la fonction mb_encode_mimeheader.

$subject = mb_encode_mimeheader( $subject );

Cette fonction encode la valeur passée au format MIME, ici en ISO-8859, dans le plus pur respect de la RFC :

Subject: =?iso-8859-1?Q?Sujet_mal_encod=E9_!?=

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.