Dus, je baas heeft je net gevraagd om het "e-mailprobleem" aan te pakken dat het bedrijf vertraagt. Er zijn honderden geautomatiseerde e-mails waarbij elke ochtend handmatig gegevens worden ingevoerd—en dat verstopt de mailboxen van je collega's.
Jij bent slim en doeltreffend en ziet meteen de kans om een e-mail parser op te zetten. Top idee! Maar het is waarschijnlijk iets complexer dan simpelweg wat scripts schrijven. Hier zijn zes stappen om een e-mail parser te maken en met succes je workflow voor e-mailgegevensinvoer te automatiseren.
Voordat we beginnen: wat betekent ‘parsen’ en wat doet een parser?
In de informatica betekent parseren het opdelen van tekst in subdelen volgens een set regels.
Een e-mail parser is een systeem waarmee een computer e-mails leest en actie onderneemt op basis van een set regels. In het ideale geval haalt zo'n systeem automatisch relevante data uit de e-mails en stuurt die door naar je backoffice-applicatie. Check ook het volgende artikel voor een deep dive over e-mail parsing bij.
Schaamteloze promo: Ken je Parseur al?
Zelf een e-mail parser bouwen is een leuk project als je wil snappen hoe alles onder de motorkap werkt.
Maar het kost veel tijd.
Parseur is eind 2015 helemaal vanaf nul gebouwd, en alleen de back-end kostte ongeveer 5.000 manuren over een periode van zes jaar. De front-end (dus alles wat je ziet, ook de template-editor) kostte óók duizenden uren. Het Parseur-team bestaat uit doorgewinterde developers met meer dan 20 jaar programmeerervaring op zak.
We zijn nog niet klaar en kunnen niet eens schatten hoe lang het zou duren om een "voldoende goede" tekstparser te bouwen.
Wil je snel resultaat? Probeer dan Parseur. Parseur is een beheerde, gebruiksvriendelijke e-mail parser die je uren werk bespaart ten opzichte van je eigen oplossing. Bekijk onze uitgebreide Parseur-functies.
1. E-mails ontvangen
Op dit moment komen de e-mails waarschijnlijk binnen in persoonlijke inboxen van medewerkers, team-mailinglijsten of een centrale bedrijfsbox.
De eerste stap is een e-mailaccount instellen om al die inboxen te centraliseren. Of, als je het aandurft: je eigen mailserver opzetten, oftewel een SMTP-server.
Als je weet wat je doet, zijn dit een paar populaire SMTP-servers:
- Exim is een gratis, open-source e-mail transfer agent (wéér een naam voor mailserver). Het is wereldwijd de populairste SMTP-server en wint sneller aan populariteit dan bijvoorbeeld Postfix.
- Postfix is ook gratis en open-source. Staat erom bekend dat het "gewoon werkt", zonder veel problemen. Volgens dit artikel over marktaandeel mailservers zijn Exim en Postfix samen goed voor 80% van alle mailservers.
- Aan de Microsoft-kant heb je de bekende Exchange. Je kunt de e-mails hieruit halen via EWS in plaats van de ouderwetse POP3 of IMAP. Tegenwoordig kun je Microsoft zelfs laten hosten tegen betaling.
- Bouw je eigen. Dat pad zal lang en bochtig zijn, maar je leert er veel van. Uiteindelijk past je server misschien perfect bij jouw wensen. Zolang je geen compatibiliteit met ontelbare mailclients nodig hebt, dat is. Als je die kant op wilt: Python heeft een prima module in de standaardbibliotheek om je op weg te helpen: smtpd.
Let op: het versturen van veel e-mails zonder op een blacklist te komen is echt een vak apart en laat je liever aan specialisten over.
Let ook op: een eigen mailserver opzetten wordt steeds minder populair. In deze tijd van cloud en SaaS is het vaak makkelijker om een gehoste maildienst te gebruiken die het vuile werk voor jou doet. Grote spelers zijn:
- Postmark legt de nadruk op afleverbaarheid en betrouwbaarheid. Heeft ook een gratis abonnement.
- Mandrill was er vroeg bij en is nog steeds populair. Gericht op marketing- en transactiemails.
- Sendgrid positioneert zich ook als een marketing- en transactionele e-mailoplossing.
- Mailgun is meer gefocust op developers en een goede API. Biedt ook een gratis plan.
Wij zijn bij Parseur enorme fans van Postmark. Hun API is geweldig en de documentatie bijzonder goed. Er zijn veel SDK's voor alle populaire programmeertalen.
2. Zet e-mails om naar een bruikbaar dataformaat
E-mail is een oud formaat, het soort “ouder-dan-Star Wars”-oud, en het heeft in de loop van de decennia de nodige rafelranden opgelopen. Bijvoorbeeld: internationale (niet-Amerikaanse) karakters zaten niet in de eerste specificaties. Voor speciale tekens zoals €, moet je met 3 technische documenten (RFC’s) rekening houden:
- RFC 2047 ondersteunt internationale namen en onderwerpregels in de e-mailheader
- RFC 5890 ondersteunt internationale domeinnamen in het Domain Name System (DNS)
- RFC 6532 maakt het gebruik van UTF-8 (een andere manier om internationale tekst op te slaan) mogelijk in mailheaders
Ook nu kunnen diensten als Postmark of Mailgun jouw dag redden en deze omzetting voor je regelen. Jij hoeft je dan geen zorgen te maken over horrorverhalen met UTF-8, MIME of cp1252 (nooit van gehoord? Dan prijs ik jou gelukkig).
Maak je bijvoorbeeld gebruik van Mailgun, dan ontvangen hun servers de mail voor jou en zetten deze om in een makkelijk te verwerken JSON document, waarbij ze alle bestaande RFC’s volgen. Vervolgens sturen ze dat als webhook via één enkele HTTP POST door naar jouw eigen server op het door jou gekozen adres.
Voor de nieuwsgierigen is hier een lijst van alle SMTP-gerelateerde RFC's. Graag gedaan.
Een voorbeeldje: zo ziet een simpele e-mail die via Mailgun binnenkomt eruit op jouw server:
{
"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 doc, Luke) ...*/
}
Ziet er heerlijk overzichtelijk uit! Vergelijk dat eens met traditioneel 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 leveren de meeste fatsoenlijke programmeertalen bibliotheken om e-mails te ontleden, zoals email voor Python of Ruby's RubyMail.
3. Sla de data op in je database
Vanaf hier kun je vertrouwen op je programmeerskills om al deze HTTP-verzoeken te verwerken en ze als nette records op te slaan in jouw favoriete database.
Hier wat populaire programmeertalen en frameworks die je hierbij helpen, op volgorde van ‘klassiek’ naar ‘trendy’:
- PHP Symfony of Zend
- Django, Tornado of Flask voor Python
- Ruby on Rails
- En Meteor, Express.js, Laravel...
De benodigde code is eenvoudig als je geen specifiek formaat nodig hebt. Maar je moet wel uitzoeken welk formaat je eigen bedrijfssoftware accepteert en zo nodig je data omzetten. Bekende uitwisselformaten zijn CSV en JSON, maar sommige bedrijfsapps gebruiken afwijkende of zelfs binaire formaten.
Heb je alleen opslag nodig (bijvoorbeeld voor je eigen maatwerk app), hoef je alleen te kiezen hoe je de data bewaart.
Denk je dat je nooit statistieken of niet-sequentiële queries wil uitvoeren op deze mails? Je zou dan bijvoorbeeld MongoDB kunnen gebruiken. Maar ik raad het af, onderbouwd met deze fantastische blogpost.
Elke relationele database-oplossing, gebaseerd op SQL, slaat je e-mails prima op. Twee tabellen is vaak genoeg: één voor e-mails en één voor bijlagen als je die wilt bewaren.
Elke SQL database engine doet dat prima, zolang volume en belasting binnen één server passen. Populaire keuzes zijn:
- MySQL, en de aanbevolen fork MariaDB zijn toegankelijke, populaire databases. Let op: sinds Oracle MySQL heeft overgenomen is de support helaas afgenomen. Verrasend hè.
- Postgresql is een grotere, rijk uitgeruste database met meer mogelijkheden om te schalen, wel iets ingewikkeldere setup dan MySQL.
- Naast deze gratis open-source databases heb je natuurlijk ook Oracle, met een vrachtlading aan features voor grote bedrijven. Heel uitgebreid, complex en prijzig. Heb je al die schaalbaarheid wel echt nodig voor deze simpele e-mailopslag?
- Ook betaald: Microsoft SQL server is sterk verbeterd de laatste jaren en nu echt een concurrent van Oracle.
Daar zijn we. Als je alleen de inhoud van je e-mails als data in je app wilt zetten, ben je in principe klaar.
Maar waarom hier stoppen? Je hebt nu waardevolle, interessante data binnen handbereik. Deze dataset is superrelevant voor je bedrijf. Je e-mails zitten waarschijnlijk vol facturen, reisdeclaraties, offertes, prospects en klantgegevens.
Waarom zou je niet nog een stap verder gaan en relevante info uit deze e-mails extraheren? Door je data te verfijnen kun je workflows automatiseren en tijd besparen—voor jezelf én je collega's.
4. Extraheer relevante tekst uit iedere e-mail
Dit is waar het échte parsen gebeurt. Ideaal wil je dit bereiken:

Hier zijn enkele benaderingen voor dit enorme vraagstuk:
Statistische Woordanalyse, oftewel “woorden tellen”
Statistische analyse is geschikt voor e-mails zonder vast format, meestal mails geschreven door een mens. Je bepaalt verschillende categorieën, met bijbehorende lijsten van woorden. Vervolgens tel je in elke mail de woorden per categorie en bepaal je in welke (combinatie van) categorieën hij valt.
Dit werkt best aardig voor sentimentanalyse. Je zou een categorie “blije klant” en een “boze klant” kunnen maken en de blije klanten Mails aan je baas doorsturen en de boze klanten naar de prullenbak. Geintje natuurlijk, maar je snapt het idee.
Toch geldt: menselijke communicatie zit vol fouten, ambiguïteiten en context. En zolang er geen échte kunstmatige intelligentie is heb je geen waterdicht systeem. Het is al snel onbetrouwbaar.
Regular expressions
Dit werkt het beste voor automatisch gegenereerde e-mails, met tekst die grotendeels hetzelfde blijft.
Stel, je wilt een miljoen boekingsmails van American Airlines parsen en per mail de passagiersnaam eruit halen. Dat kan met een regular expression die het hele mailtje matcht en alleen de naam eruit vist. Klinkt makkelijk, toch? Maar wat als andere stukken van het bericht veranderen? Of als er drie passagiers zijn op die vlucht? Oeps.
Python heeft een mooie regexp bibliotheek. Regular expressions zijn core in Ruby via de Regexp module. In JavaScript zijn het zelfs first class citizens.
De keerzijde is dat regular expressions lastig te onderhouden zijn en de leesbaarheid hooguit matig is. Veel van onze Parseur-klanten hebben ons verteld dat zij ooit zelf begonnen met een parser op regexps, maar dat niet konden volhouden met de voortdurend veranderende stroom e-mails die zij ontvingen.
5. Een beheerde oplossing? Parseur maakt het eenvoudig!
Hoe fijn zou het zijn als je gewoon de data die je nodig hebt keurig in de juiste kolommen van Excel of je database krijgt?
Dat is precies waar Parseur zich op richt. Met onze eenvoudige point-and-click interface geef je éénmalig aan welke data voor jou relevant is, en klaar. Daarna kun je soortgelijke e-mails doormailen, en worden de gegevens automatisch geëxtraheerd en direct in een Excel-sheet gezet.
Je hoeft zelf geen e-mail parser from scratch te bouwen. Je hoeft na het selecteren ook geen handmatige nabewerking meer te doen. Elke mail wordt één Excel-rij.
6. Integreer met je bedrijfssoftware
Zodra jouw geëxtraheerde data netjes in je Excel staat, moet je het "alleen nog even" naar je echte bedrijfssysteem krijgen.
Tools als Zapier of Make helpen je hier enorm bij, want zij verbinden je e-mailparser direct aan jouw bedrijfsapplicatie. Het enige wat je hoeft te doen is een connector maken voor zo’n dienst. Dan profiteer je meteen van hun volledige ecosysteem aan integraties.
Parseur integreert met Google Sheets, Zapier, Integromat en Microsoft Power Automate, waardoor je je geparste data in enkele klikken aan duizenden applicaties kunt koppelen.
Succes!
Laatst bijgewerkt op



