Hur du skapar en e-postparser från grunden

Så, din chef har precis bett dig att lösa "e-postproblemet" som saktar ner företaget. Det strömmar in hundratals automatiserade e-postmeddelanden där datainmatning fortfarande sker manuellt varje morgon, vilket överbelastar medarbetarnas inkorgar.

Du, som är både smart och effektiv, ser direkt möjligheten att skapa en e-postparser som automatiserar processen. Utmärkt idé! Det är dock lite mer komplext än några snabba skript. Här är sex steg för att skapa en e-postparser och effektivisera arbetsflödet för e-postbaserad datainmatning.

Innan vi börjar: låt oss definiera vad "parse" och "parsing" innebär

Inom datavetenskap betyder parsing (tolkning) att dela upp en text i dess olika beståndsdelar enligt specifika regler.

En e-postparser gör det möjligt för en dator att läsa inkommande e-post och agera efter fördefinierade regler. Målet är att automatiskt plocka ut relevant data från dessa e-postmeddelanden och föra över dem till ditt backoffice- eller affärssystem. Läs gärna vår fördjupningsartikel om e-postparsing.

Schamlig reklam: Har du träffat Parseur?

Att bygga en egen parser är ett spännande projekt för att förstå tekniken bakom, men det tar mycket tid.

Skapa ditt gratis konto
Spara tid och ansträngning med Parseur. Automatisera dina dokument.

Parseur startades från grunden 2015 och bara backendutvecklingen tog cirka 5 000 arbetstimmar över sex år. Frontenden med användargränssnitt, inklusive malleditorn, krävde ytterligare tusentals timmar. Utvecklarteamet har över 20 års yrkeserfarenhet av programmering.

Vi är fortfarande inte färdiga och har svårt att uppskatta hur lång tid det skulle tagit att skapa en "tillräckligt bra" parser från grunden.

Behöver du en lösning snabbt? Testa Parseur! Parseur är ett användarvänligt, driftsatt verktyg för e-postparsing som sparar dig mängder av tid jämfört med att skapa en egen parser. Kolla in vårt breda utbud av Parseur-funktioner.

1. Ta emot e-postmeddelandena

Just nu går e-postmeddelandena antingen till enskilda inkorgar, team-adresser eller företagets delade mailbox.

Första steget är att skapa ett e-postkonto dit alla relevanta meddelanden centraliseras. Alternativt, om du har riktig koll, kan du sätta upp en egen server – även känd som SMTP-server.

Om det lockar, här är några av de mest populära SMTP-servrarna idag:

  • Exim är en gratis, öppen källkodslösning för e-postöverföring och den marknadsledande SMTP-servern.
  • Postfix är också gratis och öppen källkod. Känd för att "bara funka" och kräver lite underhåll. Tillsammans står Exim och Postfix för 80 % av alla mejlservrar enligt den här marknadsrapporten.
  • Exchange från Microsoft finns fortfarande överallt. Här kan du läsa e-post via EWS, eller via POP3 och IMAP. Idag kan Microsoft hosta allt åt dig, mot en avgift.
  • Bygg din egen lösning. Den vägen är lång men lärorik. Om du går den, erbjuder Python ett smidigt standardbibliotek: smtpd.

Tänk på att massemail och att undvika svartlistning är en konst i sig och bör som regel överlåtas till proffsen.

I takt med övergången till molnlösningar och SaaS är det nu vanligare att nyttja hostade mailtjänster. De största leverantörerna är:

  • Postmark som har leveranssäkerhet och tillförlitlighet i fokus (gratisplan finns).
  • Mandrill, en veteran på marknaden, riktigt populär för transaktions- och marknadsföringsmejl.
  • Sendgrid profilerar sig för både marknads- och transaktionsmail.
  • Mailgun är API-orienterad och riktad mot utvecklare, och erbjuder också en gratisplan.

Vi gillar Postmark på Parseur — deras API är smidigt och dokumentationen superbra. Det finns SDK för de flesta språk.

2. Gör om e-posten till ett datavänligt format

E-post är riktigt gammal teknik, och har därför vissa udda egenheter. Bland annat stödde ursprungligen inte formatet internationella tecken, vilket numera kräver att du tar hänsyn till olika tekniska standarder (så kallade RFC):

  • RFC 2047 möjliggör internationella tecken i e-posthuvudet och ämnesraden
  • RFC 5890 möjliggör internationella domännamn i DNS
  • RFC 6532 låter dig använda UTF-8 i mejlets header

Tjänster som Postmark och Mailgun hanterar denna konvertering åt dig, så du slipper oroa dig för krångliga textformat som UTF-8, MIME och cp1252.

Använder du t.ex. Mailgun, tar deras servrar emot e-post och konverterar dem till användbara JSON-dokument, där alla RFC-huvudvärk redan är hanterad. Meddelandet skickas sedan vidare till din server som en webhook via ett enkelt HTTP POST-anrop.

Den nyfikne kan fördjupa sig i listan över alla SMTP-relaterade RFC:er.

Ett exempel: ett vanligt e-postmeddelande taget emot via Mailgun till din server ser då ut så här:

{
  "subject": "Mitt favoritcafé",
  "sender": "John Doe <[email protected]>",
  "recipient": "Mr. Parseur <[email protected]>",
  "message": "Det heter Awesome Café! Se vägbeskrivning i bifogad fil. Hej då.",
  "attachements": [
    { "name": "directions.pdf", "content": "https://url.with.content" },
    { "name": "cappucino.jpg", "content": "https://another.content.url" }
  ]
  /*... annan intressant data här (läs dokumentationen, Luke) ...*/
}

Bekvämt, eller hur? Jämför det med rå e-post i sitt ursprungliga format:

  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==

Lyckligtvis finns det idag bibliotek i de flesta programmeringsspråk som underlättar e-posttolkning, till exempel email-modulen i Python och RubyMail i Ruby.

3. Få in datan i databasen

Härifrån behövs programmering för att ta emot HTTP-anropen och föra över innehållet till din valda databas.

Här är några populära språk och ramverk:

Så länge du inte har särskilda formatkrav är det lätt, men ibland måste datan konverteras till det format ditt affärssystem accepterar. Vanliga format är CSV och JSON, men vissa system förväntar sig binära eller egna format.

Om syftet enbart är lagring i din egen applikation, välj en passande databas.

Om du är säker på att du aldrig kommer göra analyser eller sökningar annat än sekventiell läsning, kan NoSQL-lösningar som MongoDB vara ett alternativ – men läs argumenten i detta kritiska blogginlägg först.

Annars duger vilken relationsdatabas som helst, baserad på SQL. Du behöver åtminstone två tabeller: en för mejl och en för bilagor om du ska spara dem.

Populära val är:

  • MySQL och rekommenderade MariaDB. Observera att Oracles köp av MySQL har påverkat stödet.
  • Postgresql, med fler avancerade funktioner och skalbarhet, men också mer komplex installation.
  • Oracle, mest lämpat för mycket stora behov och företag – dyrt, stort och komplext.
  • Microsoft SQL server har blivit ett konkurrenskraftigt alternativ.

Så! Om allt du ville var att lagra e-postinnehåll i din databas är du nu i mål.

Men varför stanna där? Alla dessa e-postmeddelanden innehåller värdefull affärskritisk information: fakturor, kvitton, offerter, prospekt och kunder.

Varför inte gå längre och extrahera relevant data direkt ur e-posten? Genom att raffinera informationen kan du automatisera arbetsflöden och frigöra tid.

4. Extrahera relevant text ur varje e-post

Det är nu själva parsingsteget kommer in. Idealbilden ser ut så här:

A screen capture of email parser overview
Scheman över en e-postparser som omvandlar ett mottaget mejl till strukturerad data (till exempel ett kalkylblad eller en databas)

Här är några olika angreppssätt på detta klassiska problem:

Statistisk ordanalys eller "word counting"

Statistisk analys fungerar bra när det saknas fasta mallar, som vid mejl skrivna för hand. Då kan du skapa olika kategorier och definiera ordbanker för varje kategori. Parsern räknar sedan antalet ord från varje kategori, och avgör vilken/vilka kategorier mejlet tillhör.

Det funkar utmärkt för sentimentanalys. Exempel: en kategori för "nöjd kund" och en för "arg kund", och sortera därefter. (Kanske inte slänga arga kunders mejl i papperskorgen — men du fattar grejen.)

Men mänsklig kommunikation är full av fel, oklarheter och tolkningsproblem. Så länge vi saknar verklig AI kommer datorer inte förstå allt. Detta kan göra din parser opålitlig.

Reguljära uttryck

Fungerar bäst för automatiskt genererade e-postmeddelanden, där innehållet nästan alltid följer samma struktur.

Tänk att du vill tolka en miljon bokningsmail från American Airlines och extrahera passagerarens namn. Ett reguljärt uttryck kan hämta namnet, men vad händer när mejlets övriga innehåll ändras? Eller om det är flera resenärer? Det kan lätt bli komplext.

Python har ett bra regexp-bibliotek. Ruby har Regexp-modulen, och JavaScript har regex inbyggt så här.

Nackdelen är att reguljära uttryck ofta blir svåra att underhålla och läsa. Många av våra Parseur-användare berättar att de började bygga egna lösningar med reguljära uttryck, men gav upp när mängden olika och föränderliga e-postformat blev för stor.

5. En hanterad lösning? Parseur kan hjälpa!

Vill du att datan direkt hamnar i rätt kolumner i ett Excel-ark eller en databas utan krångel?

Det är precis det Parseur erbjuder. Med ett enkelt pek-och-klick-gränssnitt väljer du en gång för alla ut den data som är relevant för dig — sedan extraheras data automatiskt varje gång ett liknande e-postmeddelande anländer.

Du behöver alltså inte skapa en egen parser. Allt sker automatiskt efter en snabb första setup. Varje mejl blir en rad i ditt Excel-ark.

6. Integrera med ditt affärssystem

När du har din extraherade data i t.ex. Excel behöver du ofta "bara" få in den i affärssystemet.

Tjänster som Zapier eller Make gör denna del enkel, genom att koppla ihop e-postparsern med ditt övriga system. Ofta finns färdiga connectors, så du kan integrera vidare med hundratals eller tusentals andra appar — utan något avancerat kodande.

Parseur erbjuder integrationer med Google Sheets, Zapier, Integromat, Microsoft Power Automate och öppnar dina parserade data för tusentals appar med några klick.

Lycka till!

Senast uppdaterad

Kom igång

Är du redo att eliminera manuellt arbete
från din verksamhet?

Skapa ett gratis konto på några minuter och se hur Parseur kan optimera ditt arbetsflöde.

Ingen modellträning krävs
Byggd för verkliga arbetsflöden, inte för experiment
Skalbar från ett enkelt gränssnitt till full API-integration