Votre patron vient de vous demander de résoudre le problème récurrent des emails qui ralentit l'entreprise. Des centaines d'emails automatisés nécessitent une saisie manuelle des données chaque matin, encombrant les boîtes aux lettres des employés.
Vous, étant intelligent et efficace, voyez immédiatement le potentiel de la création d'un parseur d'emails. Excellente idée ! Bien que cela puisse être plus complexe que 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éfinition du parsing et d'un parseur
En informatique, le parsing consiste à diviser un texte en sous-parties, en suivant un ensemble de règles.
Un parseur d'emails permet à un ordinateur de lire des emails et d'agir sur ceux-ci en fonction d'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 un aperçu approfondi du parsing d'emails.
Publicité éhontée : connaissez-vous Parseur ?
Construire votre propre parseur d'emails est un projet amusant pour comprendre le fonctionnement interne des choses.
Mais c'est 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, juste pour construire 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 pour être construit. L'équipe derrière Parseur est composée de développeurs chevronnés avec plus de 20 ans de codage professionnel à leur actif.
Et ce n'est pas fini, nous ne pouvons même pas estimer combien de temps il faudrait pour créer un parseur de texte « suffisamment bon ».
Si vous avez besoin de résultats rapides, essayez 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 aux lettres de l'entreprise.
La première étape consisterait à configurer un compte de messagerie centralisé pour toutes ces boîtes aux lettres. Voire même, configurer votre propre serveur de messagerie, également appelé serveur SMTP.
Si vous savez ce que vous faites, voici quelques serveurs SMTP assez populaires en ce moment :
- 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 plus rapidement 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 représentent ensemble 80 % de tous les serveurs de messagerie.
- Du côté de Microsoft, l'omniprésent Exchange. Vous pouvez récupérer les emails de celui-ci via EWS au lieu de POP3 ou IMAP plus anciens. De nos jours, 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 cours de route. En fin de compte, votre serveur pourrait mieux répondre à vos besoins. Si vos besoins n'impliquent pas de compatibilité avec les milliards de clients de messagerie existants. Si vous êtes déterminé à suivre cette voie, Python a un joli module dans sa bibliothèque standard pour vous aider à démarrer. Jetez un œil à smtpd.
Notez qu'envoyer beaucoup d'emails sans être blacklisté est un art en soi, qu'il vaut mieux laisser aux spécialistes.
Notez également que la configuration de son propre serveur de messagerie est en perte de vitesse. À l'ère du cloud et du SaaS, il est plus pratique d'utiliser un service de messagerie hébergé qui fait le sale boulot de la messagerie pour vous. Voici les principaux acteurs de cet espace :
- Postmark se concentre sur la délivrabilité et la fiabilité. De plus, il propose une offre gratuite.
- Mandrill a eu un avantage de pionnier et reste populaire. Il se concentre sur le marketing et les emails transactionnels.
- Sendgrid se positionne également comme une plateforme d'emailing marketing et transactionnel.
- Mailgun se concentre davantage sur les développeurs et les API. De plus, il propose une offre gratuite.
Nous aimons Postmark ici chez Parseur. Leur API est excellente et la documentation est remarquable. Il existe de nombreux SDK pour tous les langages de programmation les plus populaires.
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 verrues au fil des décennies. Par exemple, la gestion des caractères internationaux (hors États-Unis) ne faisait pas partie de la spécification initiale. Pour gérer les caractères spéciaux, comme €, vous devez tenir compte de 3 documents techniques (également appelés RFC) :
- RFC 2047 prend en charge les noms internationaux et les lignes d'objet, dans l'en-tête de l'email
- RFC 5890 prend en charge les noms de domaine internationaux dans le système de noms de domaine (DNS)
- RFC 6532 permet l'utilisation de l'UTF-8 (une autre façon de stocker du texte international) dans une section d'en-tête de courrier
Encore une fois, des services comme Postmark ou Mailgun peuvent vous sauver la mise ici et faire la traduction pour vous. Vous pouvez oublier les histoires d'horreur impliquant UTF-8, MIME et cp1252 (jamais entendu parler d'UTF-8, MIME ou cp1252 ? J'envie votre vie).
Par exemple, si vous utilisez Mailgun, les serveurs recevront l'email pour vous et le transformeront en un document JSON facile à gérer, en prenant soin de toutes les RFC connues de l'humanité. Il le publiera ensuite sur votre propre serveur à l'URL de votre choix en tant que webhook en 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 décents sont livrés avec une bibliothèque pour déchiffrer les emails, tels que le module email pour Python ou la bibliothèque RubyMail de 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 beaucoup, beaucoup d'autres...
Le code impliqué devrait être trivial si vous ne ciblez aucun format particulier. Cependant, vous devrez peut-être vous renseigner sur le format accepté par votre logiciel métier et convertir dans ce format. Les formats d'échange populaires incluent CSV et JSON, mais certaines applications métier utilisent des formats binaires plus obscures.
Si tout ce dont vous avez besoin est du stockage (éventuellement pour votre propre application métier personnalisée), il vous suffit de choisir comment vous allez stocker les données.
Si vous savez que vous n'aurez jamais besoin de faire des statistiques ou des opérations non séquentielles sur ces emails stockés, vous pouvez envisager d'utiliser MongoDB, par exemple. Cependant, je le déconseille, en utilisant des arguments de cet excellent article de blog.
Tout système de gestion de base de données relationnelle, basé sur SQL stockera très bien vos emails. Au minimum, vous devrez définir deux tables : une pour les emails et une autre pour leurs pièces jointes si vous décidez de les stocker.
N'importe quel moteur de base de données SQL devrait gérer cela, tant que votre volume et votre charge tiennent sur un serveur. Il existe quelques choix populaires pour les bases de données relationnelles de nos jours :
- MySQL, et son fork recommandé, mais non officiel, MariaDB sont des choix de serveurs de base de données basiques et toujours populaires. Notez que depuis qu'Oracle a acheté MySQL, le support n'est plus aussi solide qu'avant. Surprenant.
- Postgresql est un moteur de base de données plus volumineux et riche en fonctionnalités avec plus d'options de mise à l'échelle et une configuration plus complexe que MySQL.
- Outre ces bases de données gratuites et open source, il y a bien sûr Oracle, avec une multitude de fonctionnalités pour répondre aux besoins des grandes entreprises. Très grand, complexe et coûteux. Êtes-vous sûr que votre simple solution de stockage d'emails a besoin d'autant d'évolutivité ?
- Également du côté commercial, Microsoft SQL Server s'est beaucoup amélioré ces dernières années et apparaît désormais comme un concurrent viable à Oracle.
Nous y voilà. Si vous souhaitez insérer le contenu de vos emails tel quel dans la base de données de votre application, vous avez terminé.
Mais pourquoi s'arrêter là ? Vous avez maintenant beaucoup de données intéressantes à portée de main. Cet ensemble de données est très intéressant car il est pertinent pour votre cœur de métier. Vos emails sont probablement pleins de factures, de frais de déplacement, de devis, de prospects et de clients.
Que diriez-vous d'aller plus loin et d'extraire les données pertinentes de ces emails ? Affiner les données dont vous disposez peut vous aider à automatiser votre flux de travail métier, vous faisant ainsi gagner du temps, à vous et à vos employés.
4. Extraire le texte pertinent de chaque email
C'est là que le véritable parsing entre en jeu. Idéalement, nous voulons faire ceci :
Voici quelques approches pour résoudre ce vaste problème :
Analyse statistique des mots, ou « comptage des mots »
L'analyse statistique est bien adaptée aux emails sans formulaire prédéfini, typiquement les emails rédigés par un humain. Vous pouvez définir plusieurs catégories d'emails avec un ensemble de mots appartenant à chacune de ces catégories. Vous allez ensuite parser chaque email, compter les mots de chaque catégorie, puis décider si l'email appartient à une ou plusieurs de ces catégories.
Cela fonctionne plutôt bien pour l'analyse des sentiments. Par exemple, vous pouvez définir une catégorie « client satisfait » et une catégorie « client furieux » et envoyer les emails des clients satisfaits à votre patron et les emails des clients furieux à la corbeille. Je plaisante, mais vous avez compris l'idée.
Mais, comme vous le savez peut-être, la communication d'homme à homme est sujette aux erreurs, aux ambiguïtés et est très sensible au contexte. Et, tant que nous n'aurons pas de véritable intelligence artificielle, ces mêmes ambiguïtés ne seront pas résolues. Elles peuvent rendre votre système au mieux peu fiable et au pire inutile.
Expressions régulières
Cette approche fonctionne mieux pour les emails générés automatiquement, la plupart du texte restant le même entre les emails.
Par exemple, supposons que vous souhaitiez parser un million d'emails de réservation d'American Airlines et extraire le nom du passager de chacun d'eux. Cela pourrait être fait en créant une expression régulière qui correspond à l'intégralité de l'email et ne capture que le nom du passager. Cela semble facile, non ? Mais que se passe-t-il lorsque d'autres parties de l'email changent également ? Et s'il y a trois passagers sur ce vol au lieu d'un seul ? Oups.
Python a une belle bibliothèque pour les expressions régulières. Les expressions régulières, ou regexp en abrégé, font partie de Ruby Core en tant que module Regexp. Ce sont également des citoyens de première classe en JavaScript.
L'inconvénient est que les expressions régulières sont complexes à maintenir et que leur lisibilité est passable au mieux. De nombreux clients de Parseur nous ont dit qu'ils avaient initialement commencé à développer leur propre moteur de parsing à l'aide de Regexps, mais qu'ils n'étaient pas en mesure de continuer à le maintenir face au flux d'emails en constante évolution qu'ils recevaient.
5. Une solution gérée ? Parseur peut vous aider !
Ne serait-il pas agréable d'obtenir simplement les données que vous souhaitez, triées dans les colonnes appropriées d'une feuille de calcul ou d'une base de données Excel ?
Eh bien, c'est notre objectif ici chez Parseur. Nous vous fournissons une interface simple « pointer-cliquer » pour définir une fois pour toutes les données qui vous intéressent. Vous pouvez ensuite envoyer des emails similaires et leurs données seront extraites et automatiquement placées dans une feuille de calcul Excel.
Vous n'avez pas besoin de créer vous-même un parseur d'emails à partir de zéro. Vous n'avez pas à effectuer de traitement manuel après cette première courte session de pointage et de clic. Chaque email devient une ligne Excel à part entière.
6. Intégrer à votre logiciel métier
Une fois que vos données extraites sont correctement placées dans votre feuille de calcul Excel, il vous « suffit » de les placer là où elles comptent : dans votre application métier.
Des outils comme Zapier ou Make peuvent vous aider énormément ici, car ils peuvent connecter votre application de messagerie à votre application métier. Il ne vous reste plus qu'à écrire un connecteur pour ces services. Vous pouvez ensuite profiter des nombreux autres connecteurs qui font partie de leur écosystème.
Parseur s'intègre à Google Sheets, Zapier, Integromat, Microsoft Flow et Getswift, ouvrant vos données parsées à des milliers d'applications en quelques clics.
Bonne chance !
Dernière mise à jour le