Hoe maak je een e-mail parser vanaf nul

Portrait of Sylvain Josserand
door Sylvain Josserand
9 min lezen
Laatst bijgewerkt op

Dus, je baas heeft je net gevraagd om het "e-mailprobleem" aan te pakken dat het bedrijf belemmert. Er stromen dagelijks honderden geautomatiseerde e-mails binnen waarop medewerkers handmatig gegevens overnemen, waardoor de inboxen snel vollopen.

Jij bent vindingrijk en ziet meteen dat het automatiseren van dit proces met een e-mail parser een slimme oplossing is. Geweldig idee! Maar het bouwen van een parser is vaak meer werk dan alleen een paar scripts schrijven. Hier zijn zes stappen om een e-mail parser te maken en je workflow voor e-mailgegevensinvoer te automatiseren.

Voordat we beginnen: wat betekent 'parsen' en wat doet een parser?

In de informatica betekent parseren dat je tekst opdeelt in subonderdelen op basis van bepaalde regels.

Een e-mail parser stelt een computer in staat om e-mails te "lezen" en er acties op uit te voeren aan de hand van ingestelde regels. Ideaal haalt het systeem automatisch relevante gegevens uit e-mails en levert deze af aan je backoffice-applicatie. Lees zeker ons artikel voor een diepgaande uitleg over e-mail parsing bij.

Schaamteloze promo: Ken je Parseur al?

Zelf een e-mail parser maken is leerzaam als je wilt weten hoe alles technisch werkt.

Maar het is tijdrovend.

Maak een gratis account aan
Bespaar tijd en moeite met Parseur. Automatiseer je documenten.

Parseur is sinds eind 2015 helemaal vanaf nul opgebouwd en er zijn ruim 5.000 manuren in de back-end gestoken over zes jaar. De front-end (gebruikersinterface, inclusief template-editor) kostte eveneens duizenden uren. Het Parseur-team bestaat uit ervaren ontwikkelaars met elk meer dan 20 jaar professionele ervaring.

En we zijn nog steeds niet klaar; het kost meer tijd dan je verwacht om zelfs maar een “redelijk goede” tekstparser te bouwen.

Heb je snel resultaat nodig? Overweeg dan Parseur. Parseur is een beheerde, gebruiksvriendelijke e-mail parser die je uren werk bespaart bij het ontwikkelen van een eigen systeem. Ontdek onze uitgebreide Parseur-functies.

1. E-mails ontvangen

Op dit moment komen de e-mails waarschijnlijk binnen in de persoonlijke mailboxen van medewerkers, team-inboxen of een algemene bedrijfsbox.

De eerste stap is het instellen van een e-mailaccount dat al die inboxen centraliseert. Of, als je het aandurft, je eigen mailserver opzetten: ook wel een SMTP server genoemd.

Als je technisch onderlegd bent, vind je hier een paar populaire SMTP-servers:

  • Exim is een gratis en open-source e-mailtransferagent (de technische naam voor een mailserver). Het is wereldwijd de meest gebruikte SMTP-server en groeit hard.
  • Postfix is eveneens gratis en open-source en staat bekend om zijn gebruiksgemak. Volgens dit marktaandeelrapport beheren Exim en Postfix samen 80% van de mailservers.
  • Voor Microsoft-gebruikers is er de bekende Exchange. Je haalt je e-mail op via EWS in plaats van de klassieke POP3 of IMAP. Tegenwoordig kun je Exchange als cloud-dienst afnemen.
  • Zelf een server maken. Dit is complex, maar wel leerzaam. Je kunt hem helemaal optimaliseren voor je eigen wensen, maar houd rekening met compatibiliteitsproblemen met talloze e-mailclients. Wil je het proberen? Python biedt een ingebouwde module, smtpd, om je op weg te helpen.

Let op: het zelf versturen van grote hoeveelheden e-mail zonder op blacklists te komen is een vak apart—vaak kun je dit beter uitbesteden.

En onthoud: het opzetten van een eigen mailserver wordt steeds minder gebruikelijk. In het cloud- en SaaS-tijdperk is het makkelijker om een gehoste dienst te gebruiken die het zware werk uit handen neemt. Een aantal grote spelers:

  • Postmark focust op deliverability en biedt een gratis pakket.
  • Mandrill was pionier en is nog steeds populair, met focus op marketing- en transactiemails.
  • Sendgrid specialiseert zich in marketing- en transactiemails.
  • Mailgun richt zich vooral op ontwikkelaars en biedt krachtige API’s én een gratis plan.

Zelf gebruiken wij bij Parseur graag Postmark vanwege de API’s en de goede documentatie. Er zijn SDK’s voor praktisch elke populaire programmeertaal.

2. Zet e-mails om naar een bruikbaar dataformaat

E-mail is een oud protocol — echt “pre-Star Wars” oud — dat door de jaren heen allerlei onhandigheden heeft verzameld. Bijvoorbeeld: internationale tekens werden in de oorspronkelijke specificaties niet ondersteund. Om speciale tekens zoals € goed te verwerken, moet je rekening houden met drie technische documenten (RFC's):

  • RFC 2047 ondersteunt internationale namen en onderwerpsregels in e-mailheaders
  • RFC 5890 ondersteunt internationale domeinnamen in DNS
  • RFC 6532 maakt UTF-8 mogelijk voor internationale tekst in headers

Ook hier kunnen diensten als Postmark of Mailgun het werk voor je doen, zodat jij je niet druk hoeft te maken over issues met UTF-8, MIME en cp1252 (als je niet weet wat dat is: beschouw jezelf gelukkig).

Bijvoorbeeld, via Mailgun worden inkomende e-mails namens jou omgezet in een goed leesbaar JSON document, waarbij die RFC’s netjes worden gevolgd. Met één HTTP POST sturen ze dat bestand naar jouw server (een webhook naar jouw URL).

Voor wie het interessant vindt: hier is een lijst met alle SMTP-gerelateerde RFC's.

Bijvoorbeeld, zo ziet een eenvoudige e-mail eruit die je via Mailgun ontvangt:

{
  "subject": "Mijn favoriete café",
  "sender": "John Doe <[email protected]>",
  "recipient": "Mr. Parseur <[email protected]>",
  "message": "Het heet Awesome Café! Zie de routebeschrijving in de bijlage. Doei.",
  "attachements": [
    { "name": "directions.pdf", "content": "https://url.with.content" },
    { "name": "cappucino.jpg", "content": "https://another.content.url" }
  ]
  /*... andere interessante gegevens hier (lees de documentatie, Luke) ...*/
}

Makkelijk toch? Vergelijk dat eens met klassiek mailformaat:

  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 [... de volledige gecodeerde bijlage hier ...] RK5CYII=
  ==mixed
  Content-Type: image/jpg; name="capuccino.jpg"
  Content-Disposition: attachment; filename="capuccino.jpg"
  Content-Transfer-Encoding: base64
  G+aHAAAA [... nog een bijlage gecodeerd hier ...] ORK5CYII=
  ==mixed==

Gelukkig bieden de meeste programmeertalen handige bibliotheken om e-mails te ontleden, zoals email voor Python of Ruby’s RubyMail.

3. Sla de data op in je database

Nu kun je jouw programmeerkennis inzetten om de binnenkomende HTTP-verzoeken te verwerken en ze te vertalen naar records in de database van jouw keuze.

Hier zijn populaire programmeertalen en frameworks van “minst hip” tot “meest hip”:

De benodigde code hoeft niet moeilijk te zijn, zolang je niet naar een specifiek formaat zoekt. Bepaal welke data je bedrijfsapplicatie verwacht en zet de gegevens om naar dat format. Populaire dataformaten zijn CSV en JSON, maar sommige bedrijfstoepassingen gebruiken eigen of binaire formaten.

Heb je enkel opslag nodig, bijvoorbeeld voor je eigen bedrijfsapplicatie? Kies hoe je de data wilt bewaren.

Ben je zeker dat je nooit complexe analyses op deze data hoeft los te laten? Dan lijkt MongoDB misschien interessant, maar wij raden relationele databases aan (lees bijvoorbeeld deze blogpost).

Elke relationele database, gebaseerd op SQL, kan e-mails prima opslaan. Een minimale opzet is twee tabellen: één voor e-mails, één voor bijlagen.

Elke SQL-database werkt, mits het gegevensvolume niet te groot is. Veel gebruikte keuzes:

  • MySQL, of de betrouwbare fork MariaDB. Let op: sinds Oracle MySQL kocht, is de support wat minder.
  • PostgreSQL biedt meer functionaliteit en schaalbaarheid, maar vraagt om een iets complexere installatie.
  • Natuurlijk zijn er commerciële opties als Oracle—veel features, groot, duur en vooral geschikt voor enterprise.
  • Microsoft SQL Server is de laatste jaren een krachtig alternatief voor Oracle geworden.

Wil je alleen de e-mailinhoud direct opslaan in je databasesysteem, dan ben je met deze stap eigenlijk al klaar.

Maar waarom hier blijven? Vanaf nu heb je interessante, direct bruikbare data in handen voor automatisering. Je e-mails bevatten immers vaak facturen, reisaanvragen, offertes, leads en klantvragen.

Waarom geen stap verder gaan en de relevante data uit deze e-mails halen? Je bedrijfsprocessen kunnen zo verder worden geautomatiseerd en jij bespaart tijd.

4. Extraheer relevante tekst uit iedere e-mail

Nu begint het echte “parsen”. Het doel: de belangrijke informatie uit elke e-mail halen.

Een screenshot van e-mail parser overzicht
Schematische weergave van een e-mail parser die een ontvangen e-mail omzet in gestructureerde data (bijvoorbeeld een spreadsheet of een database)

Er zijn verschillende methodes om deze uitdaging aan te pakken:

Statistische Woordanalyse, oftewel “Woorden tellen”

Statistische analyse werkt vooral als je ongestructureerde mails ontvangt (zoals handmatig getypte berichten). Je stelt zelf categorieën op waarvoor je woordlijsten onderhoudt. Bij het binnenkomen van een e-mail tel je per categorie het aantal gevonden woorden, zo bepaal je het type bericht.

Dit werkt redelijk voor sentimentanalyse. Denk aan een categorie “blije klant” versus “boze klant” en automatiseer je opvolging. In de praktijk blijft menselijke communicatie echter vaag en gevoelig voor context, waardoor zo’n systeem vaak fouten maakt.

Regular expressions

Deze methode is vooral geschikt voor automatisch gegenereerde e-mails, waarvan het format grotendeels gelijk blijft.

Wil je bijvoorbeeld alle passagiersnamen uit duizenden standaard boekingsmails halen, maak je een regular expression om de relevante tekstvelden te vinden. Simpel, totdat het format toch weer licht verandert of het aantal passagiers varieert.

Python’s regexp bibliotheek is handig, net als Ruby’s Regexp module en regular expressions in JavaScript.

Regelmatig horen wij van Parseur-gebruikers in hun reviews dat ze eerst zelf met regexp’s werkten, maar het systeem snel onhoudbaar werd door de vele uitzonderingen in de e-mails.

5. Een beheerde oplossing? Parseur maakt het eenvoudig!

Wil je simpelweg de juiste gegevens automatisch in de juiste kolommen van Excel of je database krijgen?

Dát bieden wij bij Parseur. Onze point-and-click interface laat je binnen een paar klikken aangeven welke gegevens je wilt extraheren. Daarna kun je soortgelijke e-mails blijven ontvangen, waarbij de relevante data er automatisch wordt uitgehaald en naar Excel wordt gestuurd.

Zelf een e-mail parser maken is helemaal niet meer nodig. Na even instellen, loopt het hele proces automatisch. Elke inkomende e-mail is direct een regel in Excel.

6. Integreer met je bedrijfssoftware

Nu de data overzichtelijk in je Excel-bestand staat, wil je deze natuurlijk in je bedrijfsapplicatie kunnen gebruiken.

Tools zoals Zapier en Make maken die integratie eenvoudig. Hiermee verbind je e-mail parsing met de software die jij gebruikt, door slechts een eenvoudige connector aan te maken. Daarna heb je toegang tot duizenden andere koppelingen binnen hun ecosysteem.

Parseur heeft integraties met Google Sheets, Zapier, Integromat en Microsoft Power Automate, zodat je jouw geparste data met een paar klikken verbindt met honderden applicaties.

Succes!

Laatst bijgewerkt op

AI-gebaseerde data-extractiesoftware.
Begin vandaag nog met Parseur.

Automatiseer het extraheren van tekst uit e-mails, PDF’s en spreadsheets.
Bespaar honderden uren handmatig werk.
Omarm werkautomatisering met AI.

Parseur rated 5/5 on Capterra
Parseur.com has the highest adoption on G2
Parseur.com has the happiest users badge on Crozdesk
Parseur rated 5/5 on GetApp
Parseur rated 4.5/5 on Trustpilot