Zum Inhalt springen

Parsen

Warum dieser Schritt

Ein Paket mit Schichten: MIME

Die Email ist im System angekommen und liegt als ein langer Text in der Datenbank. Roher Inhalt, eine einzige Zeichenkette. Daraus müssen jetzt verständliche Felder werden: Absender, Betreff, Datum, Textkörper, Anhänge. Genau darum geht es in diesem Schritt.

Mehr als Text: Eine Email ist ein Paket

Was ein Mensch als eine Nachricht sieht, ist technisch ein verpacktes Objekt. Anna schickt eine Email mit dem Text "Hallo Karl", dazu ein PDF-Anhang und ein Foto. Für Anna ist das eine Email. Für den Mailserver ist das eine einzige Datei, in der Text, PDF und Foto auf eine bestimmte Weise nebeneinander verpackt sind.

Um den PDF-Anhang zu extrahieren, muss ein Programm dieses Paket erst auspacken und die einzelnen Teile voneinander trennen. Genau das macht der MIME-Parser.

Anna: eine EmailText + PDF + Foto
Ein verpackter Textalle Teile in einem
MIME-Parserauspacken
Textteilbody_text
PDFAnhang
FotoAnhang

Das MIME-Format: Der Standard dahinter

Das Format, in dem Emails aufgebaut sind, heißt MIME (en: Multipurpose Internet Mail Extensions). Es beschreibt, wie eine Email strukturiert ist: zuerst die Metadaten, dann der Inhalt, und innerhalb des Inhalts die Möglichkeit, mehrere Teile gleichzeitig zu transportieren.

Der Standard existiert seit den frühen 1990er Jahren und ist in der RFC 5322 beschrieben. Die MIME-Erweiterungen für mehrteilige Inhalte, Zeichensätze und Kodierung sind vor allem in RFC 2045 bis 2049 definiert. Diese Standards bilden die gemeinsame Grundlage der Internet-Email. Reale Implementierungen halten sich meist weitgehend daran, weichen im Detail aber teils ab. Darum können Emails zwischen beliebigen Systemen hin und her wandern.

Absenderpackt MIME
NetzMailserver
Empfängerentpackt MIME
email2ragentpackt MIME
Universeller Standard: RFC 5322

Header und Body: Die erste Trennung

Jede MIME-Email besteht aus zwei Blöcken, die der Parser als Erstes trennt:

  • Ein Header-Block oben mit den Metadaten: Absender, Empfänger, Betreff, Datum, Message-ID und viele weitere Steuerfelder.
  • Ein Body-Block unten mit dem eigentlichen Inhalt: Text, HTML, Anhänge.

Die Trennung zwischen Header und Body ist eine einzige Leerzeile. Das klingt fragil, ist aber seit Jahrzehnten die verbindliche Regel. Der Parser teilt die Email an dieser Leerzeile, und alles davor ist Header, alles danach Body.

Roh-Emaileine Zeichenkette
LeerzeileTrennstelle
Header-BlockAbsender, Betreff, Datum, ...
Body-BlockText, HTML, Anhänge

Warum das Format so komplex ist

MIME wirkt auf den ersten Blick überladen. Würde nicht "Absender, Betreff, Text, fertig" ausreichen? Die Antwort liegt in der Geschichte. Emails mussten ursprünglich nur 7-Bit-ASCII-Text enthalten. Keine Umlaute, keine Anhänge, kein HTML, nichts Binäres.

Als später Umlaute, Bilder, HTML und Anhänge dazukommen mussten, durfte das bestehende Email-System dabei nicht kaputtgehen. Die Lösung: Alle Erweiterungen werden in der 7-Bit-Text-Form verpackt (kodiert) und wieder entpackt. Das MIME-Format ist im Kern eine Verpackungsanleitung für Inhalte, die eigentlich nicht in eine 7-Bit-Textleitung passen.

Ursprung: nur 7-Bit-ASCIIText ohne Umlaute
Neue AnforderungenUmlaute, HTML, Binärdateien
MIME-Trick: alles in 7-Bit-Form kodierenBase64, Quoted-Printable
Altes System bleibt funktionsfähigrückwärtskompatibel
Neue Inhalte möglichUmlaute, Anhänge, HTML