Rechnernetze
Home Nach oben Beispiel

Multipurpose Internet Mail Extensions: MIME

MIME erweitert den in E-Mail üblichen Zeichensatz (US-ASCII, IA5) um andere Zeichensätze, um E-Mail und andere Protokolle für den internationlen Nachrichtenaustausch einsetzen zu können. Dazu wird das Nachrichtenformat neu definiert, um 

  1. andere Zeichensätze im Nachrichtenrumpf zuzulassen,
  2. verschiedene Formate für andere Daten als Texte festzulegen,
  3. mehrteilige Nachrichtenrümpfe zu erlauben, 
  4. im Nachrichtenheader andere als US-ASCII-Zeichen zu erlauben.

MIME ist in fünf RFCs spezifiziert: RFC 2045, RFC 2046, RFC 2047, RFC 2048, RFC 2049.

Im ersten RFC 2045 werden die grundsätzliche Konzepte erläutert. Ausgehend von dem SMTP-Standard (RFC 821/822) sollen Probleme bei der Übertragung von Nachrichten verschiedener Typen (Text, Bild, Audio), mit einem größeren Zeichensatz als 7-Bit-ASCII und der Interoperabilität mit anderen Standards, wie X.400, gelöst werden. Dazu werden verschiedene Methoden beschrieben, welche insbesondere dahin gehend gewählt wurden, die Kompatibilität mit dem gegenwärtigen SMTP-Standard zu bewahren.

  1. Eine MIME-Versions-Headerfeld beschreibt die verwendete MIME-Version zur eindeutigen Kennzeichnung einer Kodierung.
  2. Ein Inhaltstypfeld nach RFC 1049, welcher Medientyp und Subtyp der Daten entnommen werden kann. 
  3. Ein Content-Transfer-Encoding header field, um die Kodierung der Daten im Rumpf sowie den Ergebnisbereich zu beschreiben.
  4. Zwei weitere Headerfelder dienen der weitergehenden Beschreibung der Daten im Rumpf, der  Content-ID sowie der Content-Description.

Nachrichten (E-Mails) kann ein weiteres Feld hinzugefügt werden, welches den MIME-Standard kennzeichnet:

MIME-Version: 1.0

Der Typ einer Nachricht wird durch ein Inhaltstypfeld angegeben, welches durch Parameter modifiziert  werden kann.

Content-type: text/plain; charset=us-ascii
Content-Type: text/plain; charset="iso-8859-1"
Content-Type: multipart/mixed; boundary="----=_NextPart_000_000F_01C20D51.FB5A33E0"
Content-Type: image/gif; name="bg_gruen.gif"
Content-Disposition: attachment; filename="bg_gruen.gif"
Content-Type: audio/wav; name="SISON5.WAV"

Inhaltstypen sind u.a. "text", "image", "audio", "video", "application".

Um die Nachrichten während der Übertragung beliebig kodieren zu können, wird ein Content-Transfer-Encoding header field angegeben.

Content-Transfer-Encoding: 7bit

Gültige Übertragungsmechanismen sind u.a. "7bit",  "8bit", "binary", "quoted-printable" und "base64". 

Base64

Die Base64-Kodierung bildet 3 Bytes mit insgesamt 24 Bits auf 4 6-Bit-Wörter ab. Es werden somit nur noch 64 Zeichen benutzt, um 8-Bit-Daten zu kodieren. Die Zeichen sind:

The Base64 Alphabet
Value  Encoding  Value  Encoding  Value  Encoding  Value  Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v    
14 O 31 f 48 w (pad) =
15 P 32 g 49 x    
16 Q 33 h 50 y    

Das Padding-Zeichen wird benutzt, um weniger als 24 Bits am Ende einer Datenfolge zu kennzeichnen. Jedes nicht vorhandene Byte wird durch durch '=' gekennzeichnet.

Eine Base64-Zeile darf nicht länger als 76 Zeichen sein. Dann muss ein CRLF folgen; diese Zeichen sind nicht in dem Base64-Alphabet enthalten sind. Andere als die hier genannten Zeichen sollten nach dem Standard als Fehler interpretiert werden.

Quoted-Printable

Ein anderes Kodierungsverfahren verwendet in der Regel die US-ASCII-Zeichen. Zeichen, die nicht in diesem Zeichensatz enthalten sind, werden als "=XY" kodiert, wobei XY den Hexadezimalwert des Oktetts angibt. Eine Reihe von Zusatzregeln erlauben die Behandlung von Sonderfällen wie Zeilenumbrüche oder Leerzeichen am Ende einer Zeile.