Hinweise zum Dokumentenaustausch per E-Mail

Mit der weltweiten Verbreitung des Internets wollte man per E-Mail nicht nur einfache Textnachrichten, sondern auch komplexe Dokumente, Bilder oder Ähnliches austauschen. Leider enden viele dieser Versuche damit, dass beim Empfänger nur Datenschrott landet. Dieser Artikel soll etwas die Hintergründe erhellen und Tipps geben, wie man zu einem optimalen Ergebnis kommt.

Die ersten E-Mail-Systeme waren nur für die Übertragung von 7-Bit-Daten ausgelegt. Das reichte zum Austausch von einfachen Nachrichten voll und ganz aus, führte aber zu Problemen, als man auch Daten per E-Mail austauschen wollte, die 8 Bit benötigten. Man war nun in der ungünstigen Lage, einerseits 8-Bit-Daten übertragen zu wollen, während andererseits viele Datenübertragungswege und auch vorhandene Mail-Systeme nur 7 Bit unterstützen. Es blieb nur der Weg, 8-Bit-Daten in 7 Bit zu kodieren, diese Daten zu übertragen und am anderen Ende wieder zu dekodieren. Das erste Verfahren hierzu war UUencode, das auch heute noch in der UNIX-Welt weit verbreitet ist. Je nach Komfort des Mailprogramms muss die Konvertierung vor dem Übertragen von Hand erfolgen oder wird von diesem automatisch vorgenommen.

Ein weiteres Problem waren die Umlaute, für deren Übertragung ebenfalls 8 Bit benötigt werden. Wenn man nicht jeden Text mit Umlauten kodieren wollte, blieb nur der Ausweg, die Umschreibung des Umlautes (also ue usw.) zu verwenden. Folgende Lösungsansätze bieten sich an:

  • Man erweitert alle Mailsysteme in der ganzen Welt, so dass sie 8-Bit verstehen, mit allen Problemen in der Übergangszeit.
  • Man findet einen sanften Migrationspfad hin zu 8-Bit-Systemen.

Die Realisierung des zweiten Ansatzes führte zu MIME (definiert im Internet-Standard RFC 2045).

Beim Entwurf von MIME ging man von mehreren Annahmen aus:

  • Es wird noch für lange Zeit Datenübertragungswege und Mailsysteme geben, die nur 7 Bit unterstützen.
  • Einfacher Text sollte so übertragen werden, dass er auch auf nicht MIME-fähigen Systemen vernünftig dargestellt werden kann.
  • Die Komplexität sollte in die Mail-Programme und nicht in das Übertragungssystem verlagert werden, d.h. man benötigt nur MIME-fähige Mail-Programme (=MUA), keine derartigen MTAs.

MIME-Mails werden in der Regel als 7-Bit-Daten übertragen (es gibt zwar auch die Möglichkeit, Daten direkt als 8 Bit zu wählen, wegen der Probleme an einem möglichen Übergang ist dies aber nicht empfehlenswert) und alle 8-Bit-Daten (Anhänge und Umlaute) müssen vom sendenden Mail-Programm in 7 Bit kodiert und von dem auf Empfängerseite wieder in 8 Bit umgewandelt werden.

MIME-Mails sind folgendermaßen aufgebaut:

Neben den üblichen Headern (From:, To:, Date:, Subject:) gibt es zusätzliche folgende Header:

  • MIME-Version: legt die verwendete Version (z. Zt. immer 1.0) fest
  • Content-Transfer-Encoding: bezeichnet die Art der Kodierung, z.B. quoted-printable, base64 oder binhex
  • Content-Type: Legt den Typ einer Mail, also zum Beispiel einfacher Text fest.

Das folgende Beispiel zeigt den Header-Aufbau einer MIME-Mail:

From: Max Mustermann <max.mustermann@rrze.fau.de>
To: Maria Musterfrau <maria.musterfrau@rrze.fau.de>
Subject: Beispiel-Mail
Date: Thu, 20 Feb 1997 13:47:12 +0100
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=iso-8859-1

Möchte man 8-Bit-Zeichen übertragen (beispielsweise ein ü), werden sie vom MUA durch ein = gefolgt vom Hexadezimal-Code des Zeichens im durch charset=… spezifizierten Zeichensatz dargestellt. Diese Art der Kodierung nennt man auch quoted-printable. Schaut man sich die Rohansicht einer MIME-kodierten Mail an, sieht das wie folgt aus (aus dem ü wurde ein =FC):

Hallo!

Beispiel f=FCr Text mit Umlaut

Das Mail-Programm des Empfängers sollte diese Zeichen wieder in den richtigen Text verwandeln, ohne dass der Leser etwas davon merkt. Sehen Sie hingegen in einer Mail irgendwelche =XX-Zeichen, können Sie davon ausgehen, dass Ihr Mailprogramm kein MIME unterstützt.

MIME ermöglicht den Versand von binären Anhängen und Mails, die aus mehreren Teilen bestehen. Letzteres erlaubt Ihnen zum Beispiel, in einer Mail ein Dokument mit Beschreibung zu versenden. Sie als Anwender geben wie gewohnt nur den Empfänger und den Betreff ein, schreiben den Begleittext (Dies ist ein Beispiel einer E-Mail mit Anhang) und wählen dann – je nach verwendetem Mailprogramm geht das unterschiedlich elegant – die zu versendende Datei über ein Menü aus und schicken die Mail los. Der Empfänger wiederum muss nur auf den Anhang klicken
und die entsprechende Anwendung (z.B. ein Textverarbeitungsprogramm) wird gestartet, um den Anhang geeignet darzustellen.

Realisiert wird dies von den beteiligten Mailprogrammen durch Verwendung des Content-Types: MULTIPART/MIXED und die Festlegung einer speziellen Zeichenfolge, die als Grenze (BOUNDARY) zwischen diesen Teilen dient (und natürlich in der Mail sonst nicht vorkommen darf). Innerhalb der einzelnen Teile der Mail kann man wieder angeben, ob es sich um einen Text oder eine Binär-Datei handelt. Binäre Daten werden nach einem speziellen Verfahren (Base64) für die Übertragung umgewandelt. Dabei erhöht sich der Platzbedarf um ca. ein Drittel, so dass z.B. ein Anhang von ca. 15 MB kodiert etwa 20 MB beansprucht. Wenn ein Einlieferungsserver z.B. Mails bis zu einer Größe von max. 20 MB annimmt, bedeutet das für den Versender, dass er maximal ca. 15 MB an die Mail anhängen kann.

Das nächste Beispiel zeigt eine solche Mail, wie sie bei der Übertragung aussieht, aber vom Benutzer in dieser Form nicht gesehen wird. Sie besteht aus einem kurzen Text und einem binären Anhang:

Date: Fri, 21 Feb 1997 17:00:17 +0100 (MET)
From: Max Mustermann <max.mustermann@rrze.fau.de>
To: Maria Musterfrau <maria.musterfrau@rrze.fau.de>
Subject: test
MIME-Version: 1.0
Content-Type: MULTIPART/MIXED; BOUNDARY="-2139974673-931073429-856540817=:"

---2139974673-931073429-856540817=:
Content-Type: TEXT/PLAIN; charset=US-ASCII

Dies ist ein Beispiel einer Email mit Anhang.

---2139974673-931073429-856540817=:
Content-Type: IMAGE/JPEG; name="max.jpg"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SUN.3.91.970221170017.489i@tick>
Content-Description:

/9j/4AAQSkZJRgABAQAAAQABAAD//gBGQ1JFQVRPUjogWFYgVmVyc2lvbiAz
---2139974673-931073429-856540817=:

Andere Mail-Systeme verwenden vielfach eigene Kodierungsverfahren, die den Nachteil haben, dass Sie nicht zu anderen Mail-Programmen kompatibel sind. Apple-Rechner verwenden z.B. BinHex-Kodierung. Wenn man so eine Datei erhält, braucht man entweder ein Mailprogramm, das die Dekodierung beherrscht, oder ein externes Programm.

Zusammenfassung

Aus der Informationstheorie wissen wir, dass zur Kommunikation immer Sender, Empfänger und das Übertragungsmedium gehören. Letzteres kann beim Mail-Transport nahezu beliebig komplex sein. Deshalb empfiehlt es sich, davon auszugehen, dass es dumm ist und selber einige Randbedingungen einzuhalten, damit die Mail unbeschadet beim Empfänger ankommt.

  • Denken Sie schon beim Versenden an den Empfänger. Schicken Sie einem UNIX-Benutzer eine Datei MIME- oder UUencode-kodiert, aber nicht als BinHex-Datei.
  • Verwenden Sie zur Übertragung einen 7-Bit-Zeichensatz (Stichwort: dummes Medium). Bei vielen Mail-Programmen kann man das einstellen.
  • Wenn Sie eine Datei übertragen wollen, schicken sie diese
    • MIME-kodiert, wenn sie nichts über das System am anderen Ende wissen
    • MIME- oder UUencode-kodiert, wenn am anderen Ende ein UNIX-System ist
    • BinHex-kodiert, wenn am anderen Ende ein MAC ist

    und beachten Sie, dass durch die für die Übertragung notwendige Kodierung ein erhöhter Platzbedarf entsteht.