Więc Twój szef właśnie poprosił Cię o rozwiązanie „problemu z e-mailami”, który spowalnia działanie firmy. Każdego ranka setki automatycznych wiadomości muszą być ręcznie analizowane, co prowadzi do żmudnego wpisywania danych i zalewania skrzynek odbiorczych pracowników.
Jako osoba myśląca nowocześnie i efektywnie, od razu widzisz potencjał w automatyzacji tego procesu przez stworzenie systemu do obsługi e-maili. Świetna decyzja! Jednak taka automatyzacja to coś więcej niż kilka prostych skryptów. Oto sześć kroków, które pozwolą Ci stworzyć parser e-maili i z powodzeniem zautomatyzować przetwarzanie danych z wiadomości.
Zanim zaczniemy: co oznacza parsowanie i czym jest parser?
W informatyce parsowanie to proces dzielenia tekstu na części w zgodzie z określonym zestawem reguł.
Parser e-maili pozwala „nauczyć” komputer odczytywania wiadomości e-mail i działania zgodnie z przyjętymi zasadami. W idealnym scenariuszu system taki automatycznie wydobywa kluczowe dane z maili i przesyła je do aplikacji biznesowej firmy. Zajrzyj do artykułu wyjaśniającego definicję parsera e-maili.
Oczywista autoreklama: Znasz już Parseur?
Stworzenie własnego parsera e-maili to doskonały projekt edukacyjny, który pozwala zrozumieć, jak wszystko działa w praktyce.
Jednak to również bardzo czasochłonne zadanie.
Parseur został stworzony od zera pod koniec 2015 roku i samo zbudowanie back-endu pochłonęło ok. 5 000 roboczogodzin w ciągu sześciu lat. Budowa front-endu (czyli całego interfejsu użytkownika, w tym edytora szablonów) to kolejne tysiące godzin pracy. Zespół odpowiedzialny za Parseur to doświadczeni programiści z ponad 20-letnią praktyką.
Wciąż nie skończyliśmy i nawet nie próbujemy szacować, ile mogłoby zająć stworzenie parsera tekstu „wystarczająco dobrego”.
Jeśli zależy Ci na szybkim wdrożeniu, wypróbuj Parseur. Parseur to zarządzany i przyjazny użytkownikowi parser e-maili, który pozwoli Ci zaoszczędzić godziny potrzebne na stworzenie własnego rozwiązania. Przejrzyj szczegółowy opis funkcji Parseur.
1. Pozyskaj e-maile
Obecnie wiadomości trafiają do indywidualnych skrzynek pracowników, na wspólne listy czy do firmowej skrzynki odbiorczej.
Pierwszym krokiem jest konfiguracja konta e-mail, które scentralizuje obsługę tych skrzynek. Ewentualnie możesz uruchomić własny serwer pocztowy, czyli tzw. serwer SMTP.
Jeśli masz odpowiednią wiedzę, poniżej znajdziesz kilku popularnych serwerów SMTP:
- Exim — darmowy, open-source agent transferu poczty (czyli serwer e-mail). To obecnie najpopularniejszy serwer SMTP, zyskujący przewagę nad drugim — Postfix.
- Postfix — również open-source’owy i ceniony za swoją niezawodność oraz prostotę konfiguracji. Zgodnie z badaniem udziału w rynku serwerów mailowych, Exim i Postfix obsługują łącznie 80% wszystkich serwerów.
- W świecie Microsoft króluje Exchange. Możesz pobierać z niego e-maile przez EWS, zamiast przez bardziej przestarzałe POP3 lub IMAP. Możesz nawet pozwolić Microsoftowi obsługiwać e-maile za Ciebie, za opłatą.
- Możesz też stworzyć własny serwer. To będzie długa i wyboista droga, ale dużo się nauczysz po drodze. Twój serwer może lepiej odpowiadać Twoim potrzebom (chyba że musi być kompatybilny z miliardem klientów pocztowych). Jeśli jesteś zdecydowany pójść tą ścieżką, Python oferuje prosty moduł w swojej standardowej bibliotece: smtpd.
Wysyłka dużej ilości e-maili bez ryzyka trafienia na czarne listy to osobne zagadnienie — w tej dziedzinie zdecydowanie warto korzystać z gotowych rozwiązań.
Warto zauważyć, że popularność własnych serwerów pocztowych stale spada. W dobie chmury i SaaS wygodniej jest korzystać z hostowanych usług, które wykonują całą brudną robotę za Ciebie. Oto najważniejsi gracze w tej kategorii:
- Postmark — skupia się na dostarczalności i niezawodności oraz posiada darmowy plan.
- Mandrill — miał przewagę pierwszego gracza na rynku i nadal cieszy się popularnością. Specjalizuje się w e-mailach marketingowych i transakcyjnych.
- Sendgrid — również koncentruje się na marketingu i wiadomościach transakcyjnych.
- Mailgun — najbardziej odpowiada deweloperom i API, również posiada darmowy pakiet startowy.
W Parseur polecamy Postmarka — ich API jest świetne, a dokumentacja doskonała. Istnieje wiele SDK do wszystkich popularnych języków programowania.
2. Przekonwertuj e-mail do przyjaznego formatu danych
E-mail to bardzo stary format — tak stary jak „Gwiezdne Wojny”! Z biegiem dekad dorobił się licznych pułapek. Przykładowo obsługa znaków międzynarodowych nie była częścią początkowej specyfikacji. Aby obsłużyć znaki specjalne, jak €, trzeba uwzględnić trzy istotne RFC:
- RFC 2047 — zapewnia wsparcie dla międzynarodowych nazw i tematów w nagłówkach e-maili
- RFC 5890 — pozwala na międzynarodowe nazwy domen w DNS
- RFC 6532 — pozwala stosować UTF-8 w nagłówku wiadomości
Usługi takie jak Postmark czy Mailgun mogą rozwiązać ten problem, wykonując potrzebne konwersje za Ciebie. Dzięki nim nie musisz się obawiać kłopotów z kodowaniem znaków, MIME czy cp1252 (jeśli nigdy nie słyszałeś o UTF-8, MIME lub cp1252 — zazdrościmy Ci życia).
Przykładowo, korzystając z Mailgun, ich serwery odbiorą e-maila za Ciebie i przekształcą go w wygodny do przetwarzania dokument JSON, obsługując przy tym wszystkie RFC znane ludzkości. Następnie wyślą go na Twój serwer pod dowolny adres URL jako webhook, w jednym żądaniu HTTP POST.
Dla zainteresowanych: tutaj znajdziesz pełną listę RFC powiązanych z SMTP. Proszę bardzo!
Przykład prostego e-maila odbieranego przez Mailgun, który dociera na Twój serwer w formie:
{
"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" }
]
/*... inne ciekawe dane tutaj (przeczytaj dokumentację, Luke) ...*/
}
Wygląda przyjaźnie? Porównaj to z tradycyjnym formatem e-maila:
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 [... cały załącznik tutaj ...] RK5CYII=
==mixed
Content-Type: image/jpg; name="capuccino.jpg"
Content-Disposition: attachment; filename="capuccino.jpg"
Content-Transfer-Encoding: base64
G+aHAAAA [... kolejny załącznik tutaj ...] ORK5CYII=
==mixed==
Na szczęście większość popularnych języków programowania oferuje biblioteki do czytania i rozkodowywania wiadomości e-mail — np. email dla Pythona czy RubyMail dla Ruby.
3. Zapisz dane do bazy danych
Na tym etapie możesz wykorzystać swoje umiejętności programistyczne do obsługi tych żądań HTTP i przekładania ich na rekordy w wybranej bazie danych.
Oto kilka popularnych języków i frameworków, które mogą pomóc, ułożonych według rosnącej „trendy”:
- PHP wraz z Symfony lub Zend
- Django, Tornado i Flask dla Pythona
- Ruby na Rails
- A także Meteor, Express.js, Laravel...
Kod będzie prosty, o ile nie celujesz w konkretny format. Jednak być może będziesz musiał sprawdzić, w jakim formacie Twoje oprogramowanie biznesowe akceptuje dane i do tego formatu je przekonwertować. Najpopularniejsze formaty wymiany danych to CSV oraz JSON, ale niektóre aplikacje używają mniej znanych, binarnych formatów.
Jeśli potrzebujesz tylko przechowywać dane (np. dla własnej niestandardowej aplikacji biznesowej), po prostu zdecyduj, w jaki sposób będziesz przechowywać te dane.
Jeśli wiesz, że nigdy nie będziesz potrzebować statystyk lub operacji niesekwencyjnych na tych e-mailach, możesz rozważyć MongoDB. Jednak odradzam to wybierając argumenty zawarte w tym świetnym artykule o MongoDB.
Każdy system zarządzania relacyjnymi bazami danych, oparty na SQL, poradzi sobie doskonale. Wystarczy zdefiniować dwie tabele: jedną na e-maile oraz drugą na załączniki, jeśli zdecydujesz się je przechowywać.
Każda baza SQL sobie z tym poradzi, o ile Twój wolumen i obciążenie zmieści się na jednym serwerze. Oto kilka najpopularniejszych rozwiązań relacyjnych baz danych obecnie:
- MySQL oraz zalecany, choć nieoficjalny, fork MariaDB — podstawowe i wciąż bardzo popularne bazy. Po przejęciu przez Oracle wsparcie dla MySQL nie jest już tak dobre jak dawniej.
- Postgresql — większa i bogatsza w funkcje baza, daje więcej możliwości skalowania, ale i wymaga bardziej zaawansowanej konfiguracji niż MySQL.
- Oprócz tych darmowych, open-source'owych baz, jest oczywiście Oracle z ogromną ilością funkcji, odpowiadających wymaganiom największych firm. Bardzo rozbudowane, zaawansowane i drogie. Czy naprawdę Twoja prosta aplikacja do przechowywania e-maili potrzebuje aż takiej skalowalności?
- Po stronie komercyjnej Microsoft SQL server — w ostatnich latach mocno się rozwinął i obecnie realnie konkuruje z Oracle.
Na tym etapie masz gotowe narzędzie do zapisu treści e-maili do bazy danych Twojej aplikacji.
Ale po co na tym kończyć? Teraz masz dostęp do ogromu interesujących danych. Ten zestaw jest szczególnie ciekawy, bo jest ściśle powiązany z Twoim core biznesem — Twoje e-maile to źródło faktur, kosztów podróży, ofert, leadów i klientów.
Możesz pójść o krok dalej i wydobyć z tych maili najważniejsze dane. Taka automatyzacja usprawni Twój workflow i pozwoli zaoszczędzić czas.
4. Wydobądź kluczowe dane tekstowe z każdego e-maila
To jest moment, kiedy następuje właściwe parsowanie. W idealnym świecie powinno to wyglądać tak:

Oto kilka sposobów na rozwiązanie tego szerokiego problemu:
Analiza statystyczna tekstu (liczenie słów)
Statystyczna analiza najlepiej sprawdza się przy e-mailach nie mających określonego szablonu — czyli pisanych przez ludzi. Możesz zdefiniować kilka kategorii oraz zbiory słów należących do każdej kategorii. Następnie analizujesz treść e-maila, liczysz wystąpienia w każdej kategorii i decydujesz, czy wiadomość podpada pod którąś z nich.
To technika przydatna np. do analizy nastrojów (sentiment analysis). Możesz zdefiniować kategorię „zadowolony klient” i „wściekły klient”, by kierować „zadowolonych” do szefa, a „wściekłych” do kosza (żart, ale wiesz, o co chodzi).
Jednak, jak wiadomo, ludzka komunikacja jest pełna błędów, niejednoznaczna i bardzo podatna na kontekst. Dopóki nie doczekamy prawdziwej sztucznej inteligencji — te niejednoznaczności pozostają nierozwiązane, przez co taki system będzie co najwyżej zawodny lub zupełnie bezużyteczny.
Wyrażenia regularne
Najlepsza metoda do automatycznie generowanych, powtarzalnych e-maili — gdzie większość treści w każdej wiadomości jest podobna.
Załóżmy, że musisz przeanalizować milion wiadomości z American Airlines i wydobyć nazwisko pasażera z każdej z nich. Można to zrobić stosując wyrażenie regularne, które dopasuje całą wiadomość i wychwyci tylko imię i nazwisko pasażera. Proste, prawda? Ale co, jeśli inne fragmenty e-maila także się zmienią? Albo gdy trafi się lot dla trzech pasażerów zamiast jednego? Oops.
Python oferuje bardzo dobrą implementację wyrażeń regularnych, w Ruby są one dostępne jako moduł Regexp w standardzie. W JavaScript są również „obywatelami pierwszej kategorii”.
Minusem wyrażeń regularnych jest ich złożoność i trudność w późniejszej modyfikacji. Wielu użytkowników Parseur przyznało, że budowali parsery na regułach regex, ale nie byli w stanie utrzymać ich przy ciągle zmieniających się szablonach e-maili.
5. Potrzebujesz gotowego rozwiązania? Parseur jest odpowiedzią!
Czy nie byłoby wygodnie po prostu otrzymywać kluczowe dane w idealnie uporządkowanym Excelu lub bazie danych?
Taki jest właśnie cel Parseur. Udostępniamy prosty interfejs typu "wskaż i kliknij" — nie musisz kodować reguł ani ciągle zmieniać algorytmów. Określasz, które dane są dla Ciebie istotne, a następnie podobne e-maile zostaną automatycznie przetworzone i zamienione na wiersze Excela.
Nie musisz budować parsera e-maili od zera, ani przeprowadzać ręcznej obróbki po pierwszym, krótkim klikaniu. Każdy e-mail stanie się osobnym wierszem Excela.
6. Zintegruj parser z Twoimi aplikacjami biznesowymi
Gdy dane masz już w Excelu — wystarczy „tylko” przenieść je tam, gdzie są naprawdę potrzebne — np. do Twojego systemu biznesowego.
Te zadania znacząco ułatwiają narzędzia takie jak Zapier lub Make, które mogą połączyć Twoje aplikacje e-mailowe z aplikacjami firmowymi. Wystarczy napisać konektor. Potem możesz korzystać z setek gotowych integracji dostępnych w ich ekosystemie.
Parseur integruje się z Google Sheets, Zapier, Integromat i Microsoft Power Automate, dzięki czemu otwierasz swoje dane na tysiące aplikacji w kilka kliknięć.
Powodzenia!
Ostatnia aktualizacja



