Votre patron vient de vous demander de résoudre le "problème des emails" qui ralentit l'entreprise. Des centaines d'emails automatisés, sur lesquels la saisie de données est effectuée manuellement chaque matin, encombrent les boîtes aux lettres des employés.
Vous, étant intelligent et efficace, voyez immédiatement le potentiel de créer un système de parsing d'emails. Excellente idée ! Même si cela peut être un peu plus compliqué que juste quelques scripts et un peu d'huile de coude. Voici six étapes pour créer un parseur d'emails et automatiser avec succès votre workflow de saisie de données d'emails.
Avant de commencer : définissons parser et ce qu'est le parsing
En informatique, le parsing est l'action de diviser un texte en sous-parties, en suivant un ensemble de règles.
Un parseur d'emails est une façon de faire en sorte qu'un ordinateur lise les emails et agisse sur ceux-ci selon un ensemble de règles. Idéalement, ce système extraira automatiquement les données pertinentes de ces emails et les transmettra à votre application métier. Consultez l'article suivant pour une analyse approfondie du parsing d'emails.
Publicité éhontée : connaissez-vous Parseur ?
Construire votre propre parseur d'emails est un projet amusant pour comprendre comment les choses fonctionnent en profondeur.
Mais c'est aussi un projet chronophage.
Parseur a été créé à partir de zéro fin 2015, et il a fallu environ 5 000 heures-hommes sur une période de six ans rien que pour bâtir le back-end. Le front-end (toute l'interface utilisateur, y compris l’éditeur de modèles) a également nécessité des milliers d'heures-hommes. L’équipe derrière Parseur est composée de développeurs chevronnés avec plus de 20 ans de codage professionnel à leur actif.
Nous n'avons pas terminé et ne pouvons même pas estimer combien de temps il faudrait pour créer un parseur de texte "suffisamment bon".
Si vous voulez des résultats rapidement, vous devriez essayer Parseur. Parseur est un parseur d'emails géré et convivial qui vous fera gagner des heures dans la mise en place de votre propre solution. Découvrez l'ensemble des fonctionnalités de Parseur.
1. Obtenir les emails
Pour l’instant, les emails arrivent dans les boîtes aux lettres individuelles des employés, les listes de diffusion d’équipe, ou la boîte globale de l’entreprise.
La première étape serait de créer un compte de messagerie pour centraliser toutes ces boîtes aux lettres. Voire même, d’installer votre propre serveur de messagerie, également appelé serveur SMTP.
Si vous savez ce que vous faites, voici quelques serveurs SMTP assez populaires à l’heure actuelle :
- Exim est un agent de transfert de courrier électronique (autre nom pour serveur de messagerie) gratuit et open source. C’est le serveur SMTP le plus populaire, et sa popularité augmente un peu plus vite que le deuxième, Postfix.
- Postfix est également gratuit et open source. Il a la réputation de « fonctionner », avec un minimum de problèmes. Selon cet article sur la part de marché des serveurs de messagerie, Exim et Postfix à eux deux représentent 80 % de tous les serveurs de messagerie.
- Du côté de Microsoft, l’omniprésent Exchange. Vous pouvez récupérer les emails via EWS au lieu de POP3 ou IMAP à l’ancienne. Vous pouvez même demander à Microsoft de l’héberger pour vous, moyennant des frais.
- Construisez le vôtre. Ce chemin sera long et sinueux, mais vous apprendrez beaucoup en route. Au final, votre serveur pourrait mieux correspondre à vos besoins. Sauf si vos besoins impliquent la compatibilité avec les innombrables clients mails existants. Si vous êtes déterminé, Python propose un très beau module dans sa bibliothèque standard pour vous lancer. Regardez smtpd.
Notez que l’envoi massif d’emails sans être blacklisté est un art à part entière, mieux maîtrisé par les spécialistes.
Notez aussi que la popularité de l’installation de son propre serveur de messagerie décline. À l’ère du cloud et du SaaS, il est plus pratique d'utiliser un service d’email hébergé qui gère pour vous tout le sale boulot des emails. Voici les principaux acteurs du domaine :
- Postmark se concentre sur la délivrabilité et la fiabilité. De plus, il existe une offre gratuite.
- Mandrill est pionnier dans le secteur et reste populaire. Il vise les emails marketing et transactionnels.
- Sendgrid se positionne aussi en plateforme d’emails marketing et transactionnels.
- Mailgun vise davantage les développeurs et l’API. Ici aussi il existe une offre gratuite.
Nous aimons particulièrement Postmark chez Parseur. Leur API est excellente et la documentation remarquable. Il y a de nombreux SDK pour tous les langages de programmation les plus répandus.
2. Traduire l’email dans un format de données approprié
L'email est un format ancien, du genre « créé avant Star Wars », et il a accumulé quelques défauts au fil des décennies. Par exemple, la gestion des caractères internationaux (hors US) n’était pas prévue dans la spécification initiale. Pour gérer les caractères spéciaux, comme €, il faut tenir compte de 3 documents techniques (également appelés RFC) :
- RFC 2047 ajoute la prise en charge des noms internationaux et des objets, dans l’en-tête des emails
- RFC 5890 ajoute la prise en charge des noms de domaine internationaux dans le système DNS
- RFC 6532 autorise l’utilisation de l’UTF-8 (autre façon de stocker du texte international) dans une section d’en-tête d’email
Ici encore, des services comme Postmark ou Mailgun peuvent vous sauver la mise en s’occupant de la traduction à votre place. Vous pouvez oublier les histoires d’horreur impliquant UTF-8, MIME et cp1252 (jamais entendu parler d’UTF-8, MIME ou cp1252 ? Je vous envie).
Par exemple, si vous utilisez Mailgun, les serveurs recevront l’email pour vous et le transformeront en un document JSON facile à manipuler, en tenant compte de toutes les RFC connues. Ce document sera ensuite envoyé sur votre propre serveur, à l’URL de votre choix, en tant que webhook via une seule requête HTTP POST.
Pour les curieux, voici une liste de toutes les RFC liées au SMTP. Je vous en prie.
Par exemple, un simple email reçu sur Mailgun arrivera sur votre serveur comme ceci :
{
"subject": "My favorite café",
"sender": "John Doe <[email protected]>",
"recipient": "Mr. Parseur <[email protected]>",
"message": "It's called Awesome Café! See directions in the attachment. Bye.",
"attachements": [
{ "name": "directions.pdf", "content": "https://url.with.content" },
{ "name": "cappucino.jpg", "content": "https://another.content.url" }
]
/*... other interesting pieces of data here (read the doc, Luke) ...*/
}
N'est-ce pas merveilleux ? Comparez cela avec un format d’email traditionnel :
MIME-Version: 1.0
Received: by 102.29.23.176 with HTTP; Sat, 12 Aug 2016 14:13:31 -0700 (PDT)
Date: Sat, 12 Aug 2016 14:13:31 -0700
Delivered-To: =?ISO-8859-1?Q?Mr. Parseur <[email protected]>
Message-ID: <CAAJL_=kPAJZ=fryb21wBOALp8-XOEL-h9j84s3SjpXYQjN3Z3A@mail.gmail.com>
Subject: =?ISO-8859-1?Q?My=20Favorite=20Caf=E9
From: =?ISO-8859-1?Q?John Doe <[email protected]>
To: =?ISO-8859-1?Q?Mr. Parseur <[email protected]>
Content-Type: multipart/mixed; boundary=mixed
==mixed
Content-Type: multipart/alternative; boundary=alternative
==alternative
Content-Type: text/plain; charset="utf-8"
It's called Awesome Caf=C3=A9! See directions in the attachm= ent. Bye.
==alternative
Content-Type: text/html; charset="utf-8"
It's called <b>Awesome Caf=C3=A9</b>! See directions in the = attachment. Bye. ==alternative== ==mixed
Content-Type: document/pdf; name="directions.pdf"
Content-Disposition: attachment; filename="directions.pdf"
Content-Transfer-Encoding: base64
iVBORw [... the whole encoded attachment here ...] RK5CYII=
==mixed
Content-Type: image/jpg; name="capuccino.jpg"
Content-Disposition: attachment; filename="capuccino.jpg"
Content-Transfer-Encoding: base64
G+aHAAAA [... another attachment encoded here ...] ORK5CYII=
==mixed==
Heureusement, la plupart des langages de programmation dignes de ce nom sont livrés avec des bibliothèques pour lire les emails, comme le module email pour Python, ou la bibliothèque RubyMail pour Ruby.
3. Intégrer les données dans la base de données
À partir de là, vous pouvez compter sur vos compétences en codage pour gérer toutes ces requêtes HTTP et les transformer en belles entrées dans la base de données de votre choix.
Voici quelques langages de programmation et frameworks populaires pour vous aider dans cette tâche, par ordre de tendance croissante :
- PHP Symfony ou Zend
- Django, Tornado ou Flask pour Python
- Ruby sur Rails
- Et Meteor, Express.js, Laravel...
Le code nécessaire sera trivial si vous ne ciblez aucun format particulier. Cependant, vous devrez sans doute vous renseigner sur le format accepté par votre logiciel métier et convertir vos données dans ce format. Les formats d'échange courants incluent CSV et JSON, mais certains logiciels métiers utilisent des formats binaires plus obscurs.
Si tout ce dont vous avez besoin est du stockage (éventuellement pour votre propre application métier personnalisée), il vous suffit de décider comment stocker les données.
Si vous savez que vous ne ferez jamais de statistiques ni d'accès non séquentiels sur ces emails, vous pouvez envisager MongoDB par exemple. Cependant, je le déconseille, en m’appuyant sur cet excellent article de blog.
Tout système de gestion de base de données relationnelles basé sur SQL conviendra parfaitement. Au minimum, vous devrez définir deux tables : une pour les emails, une autre pour leurs pièces jointes si vous décidez de les stocker.
N'importe quel moteur de base de données SQL saura faire l’affaire, tant que votre volumétrie et votre charge restent sur un seul serveur. Voici quelques choix populaires de bases de données relationnelles de nos jours :
- MySQL, et son fork recommandé mais non officiel, MariaDB sont des choix basiques mais toujours populaires. Notez que depuis qu'Oracle a acheté MySQL, le support n'est plus aussi fort qu'autrefois. Surprise.
- Postgresql est un moteur plus massif et riche en fonctionnalités, avec plus d’options pour la mise à l’échelle et une configuration plus complexe que MySQL.
- Au-delà de ces bases gratuites et open-source, il y a bien sûr Oracle, avec son lot de fonctionnalités pour répondre aux besoins des grandes entreprises. Très vaste, complexe et coûteuse. Êtes-vous sûr que votre simple système de stockage d'emails en a besoin ?
- Également sur le versant commercial, Microsoft SQL Server s'est beaucoup amélioré ces dernières années et apparaît désormais comme un concurrent crédible d'Oracle.
Nous y sommes. Si vous vouliez juste mettre vos emails tels quels dans la base de données de votre logiciel, c’est fait.
Mais pourquoi s’arrêter là ? Vous possédez maintenant de nombreuses données intéressantes à portée de main. Ce dataset est très intéressant car il concerne au cœur de votre métier. Vos emails contiennent sûrement des factures, notes de frais, devis, prospects ou clients.
Pourquoi ne pas aller plus loin et extraire les données pertinentes de ces emails ? Affiner les données que vous possédez peut vous permettre d’automatiser vos workflows, vous faisant gagner un temps précieux à vous et à vos collaborateurs.
4. Extraire le texte pertinent de chaque email
C'est là que le vrai parsing entre en scène. Idéalement, nous voulons faire ceci :

Voici quelques approches possibles pour résoudre ce vaste problème :
Analyse statistique des mots, ou « comptage de mots »
L’analyse statistique fonctionne bien pour les emails sans structure pré-établie, typiquement ceux rédigés par un humain. Vous pouvez définir plusieurs catégories d’emails, chacune associée à un ensemble de mots. Ensuite, parser chaque email, compter, pour chaque catégorie, le nombre de mots présents, puis décider si l’email appartient à telle ou telle catégorie.
Cela fonctionne très bien par exemple pour l’analyse de sentiments. Vous pourriez créer une catégorie « client satisfait » et une « client furieux » et rediriger les messages de clients furieux à la corbeille et ceux des clients satisfaits à votre chef. Je plaisante, mais vous avez compris l’idée.
Mais, comme vous le savez sûrement, la communication humaine est sujette aux erreurs, aux ambiguïtés et très sensible au contexte. Et tant qu’on n’a pas de véritable intelligence artificielle, ces ambiguïtés ne seront pas résolues. Cela peut rendre votre système au mieux peu fiable, au pire inutile.
Expressions régulières
Cette méthode fonctionne mieux pour les emails générés automatiquement, là où la majorité du texte reste identique d’un email à l’autre.
Par exemple, supposons que vous vouliez parser un million d’emails de réservation American Airlines et en extraire le nom du passager. Cela pourrait se faire en créant une expression régulière qui « matche » l’email entier en ne capturant que le nom du passager. Facile, non ? Mais que se passe-t-il si d'autres parties de l'email changent aussi ? Et s’il y a trois passagers sur le même vol au lieu d’un seul ? Oups.
Python dispose d’une bonne bibliothèque pour les expressions régulières. Les expressions régulières, ou regexp, font partie du core Ruby via le module Regexp. Elles sont aussi natives en JavaScript.
L’inconvénient, c’est que les expressions régulières sont complexes à maintenir et leur lisibilité laisse à désirer. De nombreux clients Parseur nous ont dit qu’ils avaient commencé à développer leur propre moteur de parsing à l’aide de Regexps, pour finalement abandonner lorsqu’ils ont vu la charge de maintenance liée au flot d’emails changeant constamment.
5. Une solution gérée ? Parseur peut vous aider !
Ne serait-il pas agréable d’obtenir directement les données qu’il vous faut, organisées dans les bonnes colonnes d’un fichier Excel ou d’une base de données ?
C’est exactement notre objectif chez Parseur. Nous vous proposons une interface « pointer-cliquer » pour définir une fois pour toutes les informations qui vous intéressent. Vous pouvez ensuite envoyer des emails similaires, et leurs données seront extraites automatiquement pour aller dans un fichier Excel.
Vous n'avez donc pas besoin de créer votre propre parseur d’emails en partant de zéro. Et plus besoin de traitement manuel après cette première (courte) session de pointage-cliquage. Un email = une ligne Excel.
6. Intégrer à votre logiciel métier
Une fois vos données extraites bien insérées dans votre feuille Excel, il ne vous reste « plus qu’à » les pousser là où elles comptent : dans votre logiciel métier.
Des outils comme Zapier ou Make peuvent vous être d’une grande aide : ils permettent de connecter votre application email à votre logiciel métier. Il suffit d’écrire un connecteur pour ces services et vous bénéficiez de toute leur bibliothèque de connecteurs.
Parseur s’intègre à Google Sheets, Zapier, Integromat et Microsoft Power Automate, ouvrant vos données parsées à des milliers d’applications en quelques clics.
Bonne chance !
Dernière mise à jour le



