Le mystère du point disparu dans le corps d’un e-mail
Un protocole simple de transfert de courrier qui ne l’est pas tant que ça
Apparition du problème
- Un client a signalé que des points avaient disparu du corps d’un e-mail qui lui avait été envoyé.
- En envoyant le même e-mail à d’autres clients, les points ne disparaissaient pas.
Souvenir du projet
- Il y a environ 7 ans, une solution a été développée pour unifier les modèles de documents dans un système unique.
- Le client utilisait des modèles Microsoft Word avec des espaces réservés insérés dans les documents.
- Chaque fois qu’un employé envoyait un document par e-mail, il fallait remplacer ces espaces réservés par le contenu réel.
Problème de gestion des modèles
- Il existait plusieurs versions des modèles, ce qui les rendait difficiles à gérer.
- Certains modèles utilisaient d’anciennes conditions générales, d’anciens logos, d’anciennes polices, etc.
- Une solution a été développée pour gérer tous les modèles de manière centralisée.
Mise en œuvre de la solution
- Le client pouvait gérer de façon centralisée les modèles servant à générer des documents PDF, des SMS et le corps des e-mails.
- Par exemple, il était possible de configurer un modèle de lettre de bienvenue à envoyer à un nouveau client.
- Des modèles différents pouvaient être définis selon le canal d’envoi (e-mail, SMS ou courrier).
Reproduction du problème
- Le problème de disparition des points ne se produisait que dans les e-mails envoyés à un client précis.
- Le point était bien présent dans le code source du modèle.
- Lors de la prévisualisation locale du corps de l’e-mail, le point apparaissait correctement.
Analyse de la cause
- Lors de la génération du corps de l’e-mail, un code limitait la longueur de chaque ligne.
- Lorsqu’une ligne dépassait cette longueur, une nouvelle ligne était créée et le reste du contenu y était déplacé.
- Selon la spécification SMTP, lorsqu’une ligne commence par un point, un point supplémentaire est inséré, puis le serveur supprime le premier point.
Solution
- Correction du code : lorsqu’une ligne commence par un point, insérer un point supplémentaire afin qu’un point reste après la suppression du premier par le serveur.
- Les tests du code corrigé ont confirmé que les points ne disparaissaient plus.
- Le problème a été résolu et le bug a également été signalé aux autres équipes.
Problème survenu ensuite
- Quelques mois plus tard, une autre équipe n’ayant pas corrigé le même bug, des points ont disparu d’un e-mail important.
- Certains clients ont reçu un e-mail indiquant un nouveau tarif mensuel de $2700 au lieu de $27.00.
- Le problème a été résolu immédiatement après l’application d’un correctif.
L’avis de GN⁺
- Importance de la compréhension de la spécification SMTP : pour résoudre les problèmes pouvant survenir lors de l’envoi d’e-mails, il est important de bien comprendre la spécification SMTP.
- Complexité de la gestion des modèles : gérer plusieurs versions de modèles peut être complexe, et un système de gestion centralisée est nécessaire.
- Techniques de débogage : la capacité à reproduire le problème et à en analyser la cause est essentielle.
- Communication entre équipes : après avoir résolu un problème, il est important de partager l’information avec les autres équipes.
- Tests automatisés : il est recommandé d’introduire des tests automatisés pour éviter ce type de problème.
2 commentaires
On dirait qu’ils ont interprété « period » comme une durée et non comme un point dans le titre, haha.
Avis Hacker News
Résumé d’un recueil de commentaires Hacker News
La difficulté d’implémenter un client SMTP
L’histoire de la lettre de recommandation en Allemagne
Les tâches cron et les clients SMTP
MAILTO.Deux mauvaises habitudes
Nécessité du dot-stuffing
Problème de pièce jointe MIME HTML
Quand le premier caractère est un point
Notification de correctif de bug
Expérience d’implémentation d’un serveur NNTP