Product
Nous venons de rendre open source Flanker, notre bibliothèque Python d’analyse d’adresses email et de types MIME
En juin dernier, nous avons publié notre service de validation d’adresses Guardpost. Depuis, un grand nombre de clients de Mailgun utilisent Guardpost pour valider leurs adresses email et réduire les fausses inscriptions ainsi que leurs taux de rebond. En juin, nous avions promis de rendre open source notre bibliothèque d’analyse d’adresses et de types MIME écrite en Python, et c’est ce que nous faisons aujourd’hui. Poursuivez votre lecture pour obtenir plus de détails ou, si vous souhaitez vous lancer directement, voici le dépôt sur Github, qui inclut un Guide de démarrage rapide, Manuel d’utilisation et Guide de l’API. Vous pouvez également installer flanker via pip.
Présentation de Flanker
Flanker se compose de deux parties :
- mime : il s’agit de notre bibliothèque d’analyse MIME. Pourquoi est-ce si intéressant ? Notre bibliothèque d’analyse MIME peut être jusqu’à 20 fois plus rapide selon vos jeux de données.
- addresslib : il s’agit de la bibliothèque d’analyse d’adresses qui constitue le cœur de Guardpost service. Vous pouvez l’utiliser pour analyser des adresses ou des listes d’adresses en vous basant strictement sur la grammaire RFC, ou pour valider des adresses/listes à partir de vérifications supplémentaires. Ces vérifications supplémentaires incluent la recherche DNS, l’existence des enregistrements MX, la grammaire spécifique au service d’emailing (ESP) et la correction orthographique.
En savoir plus sur Mime
Mailgun analyse une grande quantité de données MIME et a donc besoin d’un package de traitement MIME rapide et efficace. À nos débuts avec Mailgun, nous utilisions la bibliothèque d’analyse Python standard, mais nous avons vite réalisé que nous avions besoin de quelque chose de plus prévisible. La bibliothèque standard étant plutôt rapide pour les petits messages, mais bien moins performante pour les messages plus volumineux, nous avons créé Flanker. C’est dans l’analyse des en-têtes que Flanker excelle vraiment. Flanker n’analyse pas l’intégralité du message si seuls les en-têtes vous intéressent ; cela vous permet d’accéder rapidement aux en-têtes, que votre message MIME fasse 1 Ko ou 10 Mo. Selon le message MIME traité, flanker.mime peut être jusqu’à 20 fois plus rapide que le package d’analyse MIME Python standard, utiliser ~50 % de mémoire en moins et effectuer jusqu’à 730 fois moins d’appels de fonctions. Vous pouvez consulter tous les benchmarks que nous avons réalisés ici.
Quelles sont les autres différences entre flanker.mime et email.parser ?

En savoir plus sur addresslib
L’analyse dans addresslib est une fonctionnalité très puissante, et vous pouvez parcourir la documentation pour découvrir tout ce qu’elle permet de faire. Une autre fonctionnalité très intéressante d’addresslib est la fonction validate. Il s’agit d’un composant majeur de notre service de vérification des emails.
La validation inclut les étapes d’analyse décrites dans la documentation, ainsi que :
Recherche DNS
Une fois l’adresse analysée, le validateur tente une recherche DNS sur le domaine. Les enregistrements MX sont vérifiés en premier ; s’ils n’existent pas, le validateur se rabattra sur les enregistrements A. Si aucun enregistrement MX ou A n’existe, l’adresse est considérée comme invalide. Par défaut, flanker utilise la bibliothèque dnsq (également développée par Mailgun) pour effectuer les recherches DNS ; toutefois, l’utilisation de dnsq n’est pas obligatoire. N’importe quelle bibliothèque de recherche DNS peut être utilisée, à condition qu’elle soit conforme à la même interface qu’un dictionnaire Python. Voir flanker/addresslib/drivers/dns_lookup.py pour voir un exemple.
Existence des enregistrements MX
Si la recherche DNS de l’étape précédente a renvoyé un enregistrement MX ou A valide, l’adresse est vérifiée pour s’assurer qu’un serveur de messagerie répond sur le port 25. Si aucun serveur de messagerie ne répond, le domaine est considéré comme invalide. La recherche DNS et les vérifications d’existence MX sont coûteuses en ressources, et le résultat de ces deux étapes peut être mis en cache pour améliorer les performances. Par défaut, Flanker utilise Redis pour ce cache, mais son utilisation n’est pas obligatoire. De la même manière que pour la bibliothèque de recherche DNS, n’importe quel cache peut être utilisé ici, du moment que l’interface est identique à celle d’un dictionnaire Python. Voir flanker/addresslib/drivers/redis_cache.py pour voir un exemple.
Grammaire personnalisée
Les grands services d’emailing prennent rarement, voire jamais, en charge l’ensemble de la grammaire que la RFC autorise pour les adresses email ; en fait, la plupart appliquent une grammaire assez restrictive. Par exemple, une adresse Yahoo! Mail doit comporter entre 4 et 32 caractères et ne peut utiliser que des caractères alphanumériques, le point (.) et le tiret bas (_). Si le serveur de messagerie de l’étape précédente correspond à celui d’un service d’emailing dont la grammaire est connue, alors le validateur effectuera cette vérification supplémentaire sur la partie locale de l’adresse. Une grammaire personnalisée peut être ajoutée en intégrant un plugin pour le service d’emailing spécifique dans le répertoire flanker/addresslib/plugins. Consultez le Manuel d’utilisation pour plus d’informations.
Suggestion alternative
Une étape distincte, bien que liée, est la correction orthographique sur la partie domaine d’une adresse email. Cela permet de corriger des fautes de frappe courantes, comme gmal.com au lieu de gmail.com. Le correcteur orthographique utilise difflib, qui utilise l’algorithme de Ratcliff-Obershelp pour calculer la similarité de deux chaînes de caractères. Il s’agit d’un algorithme très rapide et précis pour la correction orthographique de domaine. Consultez notre article précédent à ce sujet.
Pour aller plus loin
Vous pouvez forker Flanker et commencer à l’utiliser dès aujourd’hui. Nous sommes ravis à l’idée que la communauté puisse à la fois l’utiliser et y contribuer. Flanker faisant partie intégrante de Mailgun, nous continuerons à le maintenir et à l’améliorer activement tant que nous serons là.
Domaines dans lesquels vous pouvez contribuer :
Nous souhaitons vraiment encourager les nouveaux talents du développement à contribuer à Flanker et aux logiciels open source en général. Voici deux éléments de notre feuille de route qui sont faciles à aborder et sur lesquels toute personne novice en développement peut commencer à contribuer :
- Plus de grammaires spécifiques aux services d’emailing. Nous ne pouvons couvrir qu’un nombre limité de services d’emailing nous-mêmes ; si vous savez ce que votre service d’emailing autorise pour les parties locales, n’hésitez pas à contribuer en proposant un plugin. C’est un excellent moyen de commencer à vous familiariser avec la grammaire et l’analyse.
- Correction automatique des erreurs. Quelques idées qui nous viennent à l’esprit : si vous oubliez de fermer votre adresse email avec un chevron (<), le validateur devrait le détecter et le corriger pour vous. Si vous avez oublié de mettre entre guillemets un caractère spécial tel qu'une parenthèse dans votre nom d'affichage, nous devrions le faire pour vous afin de garantir qu'il s'affiche correctement dans les clients de messagerie.
Bons envois !
L’équipe Mailgun