So funktioniert E-Mail

02.01.2002 von Konstantin Pfliegl
Über ein halbe Milliarde Menschen besitzen ein E-Mail-Postfach. Doch wie kommt eine E-Mail an ihr Ziel? Wir erläutern die grundlegende Technik, den Aufbau einer E-Mail und die Protokolle SMTP, POP sowie IMAP.

Trotz neuer Alternativen wie Instant Messenging wird die E-Mail immer beliebter. Das Marktforschungsunternehmen IDC prognostiziert für das Jahr 2005 rund 36 Milliarden versandte E-Mails pro Tag. Im Jahr 2000 verfügten rund 505 Millionen Menschen weltweit über ein E-Mail-Postfach, im Jahr 2005 soll es bereits 1,2 Milliarden elektronische Briefkästen geben.

Dabei hatte die E-Mail im Herbst 1971 einen eher unspektakulären Start. Der BBN-Techniker Ray Tomlinson versandte eine Mail zwischen zwei Rechnern, die über das damalige Arpanet miteinander verbunden waren. Auf der Suche nach einem unverbrauchten Satzzeichen für die elektronische Post entdeckte er dabei das @-Zeichen und definierte so das Symbol für ein neues Zeitalter.

Einen weiteren Meilenstein in der Geschichte der elektronischen Post legte Eric Allman mit der Programmierung der Software Sendmail im Jahr 1981. Damit war es erstmals möglich, Nachrichten mit einem Mailprogramm gleichzeitig in verschiedene Netze zu versenden.

Der heutige Erfolg der E-Mail war 1971 freilich noch nicht absehbar, Tomlinsons Erfindung machte nur wenige Schlagzeilen. Heutzutage ist die elektronische Post kaum mehr wegzudenken und gehört für viele zum Alltag.

Die E-Mail-Kommunikation basiert auf drei Protokollen: SMTP zum Versenden und POP und IMAP zum Empfangen von Nachrichten. Die Spezifikationen für jedes Protokoll sind jeweils in einem oder mehreren RFCs festgelegt.

SMTP - Simple Mail Transfer Protocol

Die Aufgabe des Simple Mail Transfer Protocol (SMTP) ist der zuverlässige und effiziente Transport von Nachrichten. SMTP ist unabhängig vom Netzprotokoll, in der Regel wird das im Internet übliche TCP verwendet. Die Kommunikation erfolgt über den Port 25.

Für den Austausch von Nachrichten sind so genannte Mail Transfer Agents (MTA) zuständig. Der bekannteste MTA ist Sendmail. Anwender kommen normalerweise mit diesen nicht in Kontakt. E-Mail-Clients wie Outlook und KMail übernehmen die Übertragung der elektronischen Post von und zum Mail Transfer Agent. Die MTAs verwenden zur Kommunikation untereinander einfache ASCII-Zeichen. Der Client sendet Kommandos zum Server, der mit einem nummerischen Code und einem optionalen String antwortet.

Das Simple Mail Transfer Protocol hat jedoch einen großen Nachteil: Nach dem Versenden einer E-Mail erhält man keine weiteren Informationen über deren Verbleib. Die Spezifikationen setzen zwar eine Benachrichtigung des Versenders voraus, falls eine Mail nicht zugestellt werden kann. Wie eine solche auszusehen hat, wurde nicht festgelegt. Meist ist dies eine Mail mit einer Fehlermeldung und dem angehängten Header der unzustellbaren Nachricht. Auf Grund eines fehlenden Standards lässt sich in der Praxis nur selten herausfinden, wo und warum Fehler aufgetreten sind.

Daher wurde eine neue SMTP-Erweiterung für standardisierte Fehlermeldungen ins Leben gerufen. Allerdings unterstützen derzeit nur wenige Server die Erweiterung, so dass diese hier nicht näher behandelt wird. Interessierte finden in den RFCs 1891 und 1894 weitere Informationen.

SMTP: Kommandos

Die SMTP-Kommandos definieren den Mailtransport. Laut Spezifikation muss eine Implementation von SMTP mindestens folgende acht Kommandos unterstützen:

Wichtige SMTP-Kommandos

Kommando

Beschreibung

EHLO oder HELO

Extended HELLO oder HELLO: Startet eine Sitzung und identifiziert den Client am Server. Als Argument wird, sofern verfügbar, der Fully Qualified Domain Name (FQDN) des Client übergeben. Ansonsten sollte eine andere Kennung zur Identifizierung gesendet werden, beispielsweise der Rechnername.

MAIL

Startet eine Mailübertragung. Als Argument wird die Absenderadresse (reverse-path) übergeben.

RCPT

Recipient: Identifiziert den Empfänger (forward-path) einer Mail. Bei mehreren Empfängern wird das Kommando mehrmals ausgeführt.

DATA

Der Server antwortet auf das Kommando mit dem Code 354 und wartet auf die Übertragung der Nachricht. Der Client beendet die Übertragung mit "CRLF"."CRLF".

RSET

Reset: Die Mailtransaktion wird abgebrochen. Die Verbindung zwischen beiden Rechnern bleibt jedoch bestehen.

VRFY

Verify: Überprüft eine Empfänger-Adresse.

EXPN

Expand: Die meisten MTAs wie Sendmail behandeln das Kommando wie VRFY.

NOOP

Bewirkt die Antwort "250 OK" vom Server. Dient zur Aufrechterhaltung der Verbindung, ohne dass es einen Time-Out gibt.

QUIT

Beendet die Verbindung. Der Server muss daraufhin die Antwort "250 OK" zurückliefern.

SMTP: Antwortcodes

Die SMTP-Antwortcodes garantieren, dass der Client jederzeit über den Status des Servers informiert ist. Jedes Kommando erfordert einen Antwortcode vom Server. Der Client entscheidet ausschließlich anhand des zurückgelieferten nummerischen Codes über das weitere Vorgehen.

SMTP-Antwortcodes

Code

Beschreibung

211

System-Status oder System-Hilfe.

214

Hilfe - Informationen zum Ausführen eines Kommandos.

220

Server bereit.

221

Server beendet Verbindung.

250

Kommando ausgeführt.

251

Keine lokale Mailbox; Weiterleitung an "forward-path".

252

Überprüfung der Empfängeradresse nicht möglich; Die Nachricht wird dennoch versendet.

354

Starte Empfang der Mail; Beenden mit "CRLF". "CRLF".

421

Service nicht verfügbar; Verbindung wird beendet.

450

Aktion nicht ausgeführt - Mailbox nicht verfügbar.

451

Aktion abgebrochen - Fehler beim Ausführen.

452

Aktion abgebrochen - Nicht genügend System-Speicher.

500

Syntax-Fehler - Kommando unbekannt.

501

Syntax-Fehler - Parameter oder Argument falsch.

502

Kommando unbekannt / nicht implementiert.

503

Falsche Reihenfolge der Kommandos.

504

Parameter unbekannt / nicht implementiert.

550

Aktion nicht ausgeführt - Mailbox nicht erreichbar (nicht gefunden, kein Zugriff).

551

Mailbox nicht lokal; "forward-path" versuchen.

552

Aktion abgebrochen - Fehler bei der Speicherzuweisung.

553

Aktion nicht ausgeführt - Mailbox-Name nicht erlaubt (Syntax inkorrekt).

554

Transaktion fehlgeschlagen (beim Verbindungsaufbau: Kein SMTP-Service verfügbar).

Wie eine E-Mail aufgebaut ist, erfahren Sie auf den nächsten Seiten.

SMTP: Envelope, Header und Body

Eine E-Mail besteht aus drei Teilen:

Beim Versenden einer Mail mit dem Kommando DATA überträgt der Client den Header, gefolgt von einer Leerzeile und dem Body. Jede übertragende Zeile darf nicht länger als 1000 Bytes sein.

Hier sehen Sie ein Beispiel für einen Header:

Received: by xyz.de. id AA00502; Mon, 19 Nov 2001 12:47:32 +0100
Received: from adam1 (715684625313-0001@[192.168.80.201]) by fwd00.xyz.de
with smtp id 166Cyz-1KXYRsC; Tue, 20 Nov 2001 16:38:45 +0100
From: adam@xyz.de (Adam)
To: eva@test.de (Eva)
Subject: Beispiel-Mail
Date: Mon, 19 Nov 2001 12:47:31 +0100
Reply-To: adam@xyz.de
Message-ID: <9307191947AA00502.Adam@xyz.de>
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0)

Unter Received werden alle SMTP-Server eingetragen, die die E-Mail auf dem Weg vom Sender zum Empfänger passiert hat. Jede Nachricht erhält eine eindeutige Kennung, die Message-ID. Meist besteht diese aus einer Zahlen-/Buchstaben-Kombination, gefolgt von der Host-Adresse des Senders. Mit X-beginnende Zeilen sind in der Regel vom Mail-Client hinzugefügte Informationen, die für den Versand der Nachricht nicht zwingend erforderlich sind. Die Zeilen Mime-Version, Content-Type und Content-Transfer-Encoding kennzeichnen eine MIME-konforme Mail. Alle weiteren Zeilen wie Date oder Subject sind weit gehend selbst erklärend.

SMTP: Beispiel für den Versand einer Mail

In einem Beispiel wird eine dreizeilige Nachricht an zwei Empfänger versendet:

S: 220 test.de SMTP server ready
C: HELO xyz.de.
S: 250 xyz.de., pleased to meet you
C: MAIL From:<adam@xyz.de>
S: 250 <adam@xyz.de> Sender ok
C: RCPT To:<eva@test.de>
S: 250 <eva@test.de> Recipient ok
C: RCPT TO:<tom@test.de>
S: 250 <tom@test.de> Recipient ok
C: DATA
S: 354 Enter mail
C: Hallo Eva, hallo Tom!
C: Beispiel für den Mail-Versand mit SMTP.
C: Adam
C: .
S: 250 Mail accepted
C: QUIT
S: 221 test.de delivering mail

Zum Versenden einer Nachricht sind fünf Kommandos notwendig: Nachdem der Mail-Client über TCP eine Verbindung zum SMTP-Server aufgebaut hat, wartet er auf einen Begrüßungstext mit dem Antwortcode 220. Im nächsten Schritt identifiziert sich der Client mit dem Kommando HELO, als Argument übergibt er den Fully Qualified Domain Name seines Host, in diesem Beispiel xyz.de. Das Kommando MAIL identifiziert den Verfasser der Nachricht. Das Kommando RCPT gibt die Empfänger an. Den Inhalt einer Mail sendet der Client mit dem Befehl DATA. Das Ende der Nachricht kennzeichnet eine Zeile, die nur einen Punkt enthält. QUIT beendet die Verbindung, und der Server versendet die Nachricht.

SMTP: Mail Routing und das DNS

Nachdem der SMTP-Server eine Nachricht vom Client entgegengenommen hat, ist er für das Routing der E-Mail verantwortlich.

Das Domain Name System spielt nicht nur beim Zugriff auf Web- oder FTP-Server eine zentrale Rolle, sondern auch beim Versand elektronischer Nachrichten. Für E-Mails sind im DNS spezielle Einträge vorgesehen: die MX-Records.

Der Server identifiziert den Zielrechner über den so genannten Mail Exchange Record (MX Record) der Domain. Dazu fragt er einen DNS-Server ab und erhält eine Liste mit Servern (Mail Exchanger), die Nachrichten für die Ziel-Domain entgegennehmen. Jeder Mail Exchanger ist mit einer 16-Bit langen Priorität versehen. Der SMTP-Server versucht nun, in der Reihenfolge der Priorität dem entsprechenden Server die Nachricht zu übermitteln.

Prinzipiell kann eine Nachricht über mehrere SMTP-Server laufen. Entgegen der weit verbreiteten Meinung, E-Mails könnten mehrere Male um den Globus wandern, bis sie schließlich beim Empfänger eintreffen, überqueren sie meist nur zwei SMTP-Server. MX Records sollen das Entstehen von "Mailschleifen" verhindern.

Dennoch kann es in Ausnahmefällen zu solchen Mailschleifen kommen. Dies ist beispielsweise der Fall, wenn Routing-Informationen unvollständig oder nicht mehr aktuell sind. Beim Umzug einer Domain zu einem anderen Provider tritt dies eventuell auf.

SMTP: Extended SMTP

Im Laufe der Jahre sind die Anforderungen an die E-Mail-Kommunikation gestiegen. Um dieser Entwicklung Rechnung zu tragen, wurde SMTP um einige Kommandos und Funktionen erweitert. Diese Erweiterungen hat man im Protokoll ESMTP (Extended SMTP) festgelegt. Alle neu hinzugekommenen Funktionen sind abwärtskompatibel, bereits existierende Implementationen sind somit nicht betroffen.

Nutzt ein Client die erweiterten Features, identifiziert er sich beim SMTP-Server mit dem Kommando EHLO (statt HELO). Ist der Server zu den Erweiterungen kompatibel, antwortet er mit einem mehrzeiligen Antwortcode 250. Jede Zeile enthält ein Kennwort und ein optionales Argument. Die Kennwörter spezifizieren die SMTP-Erweiterungen, die der Server unterstützt.

220 test.de SMTP server ready
EHLO xyz.de
250-xyz.de, pleased to meet you
250-HELP
250-EXPN
250-8BITMIME
250-SIZE 461544960
250 XADR

Der Antwortcode und das Kennwort werden durch einen Bindestrich getrennt, ausgenommen die letzte Zeile, die ein Leerzeichen enthält. Die Kommandos HELP und EXPN gibt es zwar bereits seit der ersten SMTP-Spezifikation, da diese aber optional ist, werden sie bei ESMTP oft zusätzlich angegeben. Alle Kennwörter, die mit einem "X" beginnen, verweisen auf lokale SMTP-Erweiterungen.

Wichtige SMTP Extensions

Extension

Beschreibung

8BITMIME

Erlaubt das Verwenden von 8-Bit-ASCII-Zeichen im Body (Standard: 7-Bit-ASCII); Spezifiziert in RFC1426.

SIZE

Gibt die maximale Größe einer Mail an (in Bytes), die der Server akzeptiert; Spezifiziert in RFC1427.

SMTP: Multipurpose Internet Mail Extension

Wie bereits erwähnt verwendet man zum Senden von E-Mails im Body 7-Bit-ASCII-Text. Dieser umfasst nur 128 Zeichen, internationale Sonderzeichen kommen darin nicht vor. Die unter anderem in Deutschland gebräuchlichen Umlaute wären somit in elektronischen Nachrichten nicht verwendbar. RFC2045 definiert MIME (Multipurpose Internet Mail Extension), das die Probleme beseitigt, wenn in E-Mails andere Zeichensätze als US-ASCII Verwendung finden.

Der Body einer MIME-Mail kann weiterhin als ASCII-Text übertragen werden, ohne Rücksicht auf dessen Inhalt. Einzige Voraussetzung für den Einsatz ist die Unterstützung durch den E-Mail-Client. MIME fügt dem Header einige Elemente hinzu, die dem Empfänger die Strukturierung des Bodys erläutern:

MIME-Header

Element

Parameter

Beschreibung

Beispiel

MIME-Version

1.0

Kennzeichnet die verwendete MIME-Version. Derzeit existiert nur Version 1.0.

MIME-Version: 1.0

Content-Type

text, image etc.; Es folgt nach einem "/" der Subtyp.

Bestimmt den Inhalt der Mail. Bei den Typen "text" und "multipart" wird eine Zeichensatzangabe und Textkörper-Kennung ergänzt.

Content-Type: text/plain; charset=iso-8859-1

Content-Transfer-Encoding

7bit, 8bit, binary, quoted-printable

Kennzeichnet den Algorithmus, in dem die Daten vorliegen.

Content-Transfer-Encoding: 8bit

SMTP: MIME-Typen

MIME ermöglicht nicht nur die Übertragung von E-Mails mit Anhängen, sondern stellt auch gleichzeitig die Informationen zur Verfügung, die ein E-Mail-Client zur Auswahl des Darstellungsprogramms benötigt. Dazu dient im Header das Element "Content-Type". MIME unterteilt die Datentypen (Media-Types) in sieben Obergruppen mit mehreren Untergruppen. Jede Dateiendung wird einem "Media-Type" zugewiesen.

Wichtige MIME-Typen

Typ

Typ

Beschreibung

text

plain

Unformatierter Text.

richtext

Text mit einfachen Formatierungen, zum Beispiel Kursiv.

enriched

Vereinfachte und erweiterte Form von richtext.

multipart

mixed

Mehrere Body-Teile, die sequenziell bearbeitet werden.

parallel

Mehrere Body-Teile, die parallel bearbeitet werden.

digest

Auszug aus einer E-Mail.

alternative

Mehrere Body-Teile mit identischem logischen Inhalt.

message

rfc822

Inhalt ist eine andere RFC822-Nachricht

partial

Inhalt ist das Fragment einer E-Mail.

external-body

Inhalt ist ein Zeiger zur eigentlichen Nachricht.

application

octet-stream

Binär-Daten.

postscript

PostScript-Daten.

image

jpeg

ISO10918-Format.

gif

CompuServe Graphic Interchange Format (GIF).

audio

basic

Kodiertes 8-Bit-µ-law Format.

video

mpeg

ISO11172-Format

Empfangen von Mails

Viele Anwender nutzen das Internet über eine Wählverbindung. Diese können daher auf ihren Rechnern nicht ohne Weiteres einen SMTP-Server zum Empfang von Mails einrichten. Dazu müsste der SMTP-Server des Providers die Nachrichten an den eigenen Server weiterleiten, was in den meisten Fällen nicht möglich ist. Aus diesem Grund werden die Nachrichten zum Abruf zwischengespeichert. Für den Fernzugriff auf diese E-Mail-Verzeichnisse sind zwei Protokolle von Bedeutung: Das Ältere ist POP, das seit 1984 zur Verfügung steht. Die aktuelle Version ist POP3. Der zweite Ansatz ist das 1986 entwickelte IMAP, das in der erweiterten Version 4rev1 vorliegt.

In einer verteilten E-Mail-Struktur gibt es laut RFC1733 drei Möglichkeiten zum Zugriff auf Nachrichten:

POP versus IMAP

IMAP bietet im Vergleich zu POP zahlreiche Vorteile, besonders für den Fernzugriff auf E-Mails. Die folgende Tabelle bietet einen Überblick über den Funktionsumfang beider Protokolle.

IMAP und POP im Überblick

Funktion

IMAP

POP

Unterstützung für den Offline-Modus

X

X

Unterstützung für den Online-Modus

X

Unterstützung für den Disconnected-Modus

X

Mails laufen beim SMTP-Server auf

X

X

Für den Empfang von Nachrichten ist kein SMTP-Gateway erforderlich, jedoch für den Versand

X

X

Zugang zu unterschiedlichen Mailboxen möglich

X

Erlaubt Zugang zu anderen Daten, wie beispielsweise News

X

Hohe Performance bei Verbindungen über Leitungen mit niedriger Bandbreite (Modems)

X

Message-Status-Flags lassen sich bearbeiten

X

Neue Nachrichten sind mit unterschiedlichen Clients überall im Netz zugänglich

X

X

Offene Protokolle; Spezifiziert in RFCs

X

X

Zusatzprotokoll für die Verwaltung von Benutzereinstellungen verfügbar (Internet Message Support Protocol, IMSP)

X

Auf den folgenden Seiten finden Sie eine detaillierte Erläuterung der Protokolle POP3 und IMAP4.

POP3: Post Office Protocol, Version 3

Wenn ein Client über POP3 Nachrichten abrufen möchte, baut er eine TCP-Verbindung über Port 110 auf. Ist die Verbindung zustande gekommen, sendet der Server eine Begrüßungsmeldung. Die weitere Kommunikation zwischen beiden Rechnern erfolgt über Kommandos.

POP3-Kommandos bestehen aus drei oder vier Zeichen langen Kennwörtern und einem oder mehreren Argumenten mit bis zu je 40 Zeichen. Antworten enthalten einen Status-Indikator und ein Kennwort sowie optionale Informationen. Es gibt zwei Status-Indikatoren: Positiv (+OK) und Negativ (-ERR).

Eine POP3-Verbindung durchläuft mehrere Sitzungsstufen. Nachdem der Server seine Begrüßungsmeldung gesendet hat, beginnt der "Authorization State". Der Client muss sich gegenüber dem Server identifizieren. Verläuft dies erfolgreich, beginnt der "Transaction State". Es werden alle Operationen zum Bearbeiten von Mails, wie Löschen und Abrufen der Nachrichten, ausgeführt. Sendet der Client das Kommando QUIT, beginnt der "Update State". Der Server beendet die TCP-Verbindung und führt die vom Client in den "Transaction State" angeforderten Änderungen durch.

Viele POP3-Server haben zusätzlich einen Inaktivitäts-Timer. Laut Spezifikation muss dieser auf mindestens zehn Minuten eingestellt sein. Jedes Kommando seitens des Client setzt den Timer zurück. Ist der Timer abgelaufen, wird die TCP-Verbindung sofort beendet, ohne in den "Update State" zu wechseln - eventuelle Änderungen werden auf dem Server nicht gespeichert.

POP3: Authorization State

Wenn der POP3-Client eine TCP-Verbindung zum Server aufgebaut hat, sendet dieser eine einzeilige Begrüßungsmeldung. Dies kann jeder beliebige String sein:

S: +OK POP3 server ready

Dabei handelt es sich bereits um eine Antwort des Servers, daher beginnt die Begrüßungsmeldung immer mit einer positiven Bestätigung (+OK). Die Verbindung befindet sich nun im "Authorization State". Der Client muss sich jetzt gegenüber dem Server identifizieren. Dies erfolgt über die beiden Kommandos USER und PASS.

Kommandos im "Authorization State"

Kommando

Argument

Beschreibung

USER

Name

Das Argument identifiziert eine Mailbox.

PASS

String

Der String enthält ein Mailbox-spezifisches Passwort.

QUIT

-

Beendet die Verbindung.

POP3: Transaction State

Hat sich der Client Server identifiziert, wechselt die Verbindung in den "Transaction State". Dem Client stehen nun eine Reihe von Kommandos zur Behandlung der Mails zur Verfügung:

Kommandos im "Transaction State"

Kommando

Argument

Beschreibung

STAT

-

Liefert die Anzahl der gespeicherten Mails und die Größe der Mailbox in Oktetts zurück.

LIST

Nummer

Liefert die Nummer und Größe (in Oktetts) aller Mails zurück. Wird als Argument eine Mail-Nummer angegeben, wird nur die Größe dieser Mail ausgegeben.

RETR

Nummer

Gibt die Mail mit der als Argument übergebenen Nummer aus.

DELE

Nummer

Löscht die Mail mit der übergebenen Nummer.

NOOP

-

Bewirkt die Antwort "+OK". Dient zur Aufrechterhaltung der Verbindung, ohne dass es einen Time-Out gibt.

RSET

-

Setzt die aktive Verbindung zurück. Noch nicht ausgeführte Änderungen werden verworfen.

Der Server führt das Kommando DELE nicht unmittelbar aus. Die entsprechenden E-Mails werden zum Löschen gekennzeichnet und erst bei Beenden der Verbindung endgültig vom Server gelöscht. Hat man eine Nachricht zum Löschen gekennzeichnet, möchte dies jedoch rückgängig machen, führt man das Kommando RSET aus. Der Server verwirft alle noch nicht ausgeführten Operationen.

POP3: Update State

Wenn der Client das Kommando QUIT sendet, wechselt die Verbindung in den "Update State". Der Server trennt die TCP-Verbindung und führt alle gespeicherten Änderungen aus.

Kommando im "Update State"

Kommando

Argument

Beschreibung

QUIT

-

Beendet die TCP-Verbindung und führt alle gespeicherten Änderungen aus.

Neben den hier vorgestellten, für eine minimale Implementation erforderlichen Kommandos gibt es noch einige weitere, die von den meisten Clients und Servern unterstützt werden. Details hierzu finden Sie in RFC1725.

POP3: Beispiel für das Abrufen einer Mail

In diesem Beispiel sehen Sie den Ablauf einer POP3-Verbindung. Der Client identifiziert sich gegenüber dem Server und ruft eine Liste der gespeicherten E-Mails ab. Danach werden die Nachrichten einzeln heruntergeladen, auf dem Server zum Löschen gekennzeichnet, und die Verbindung wird beendet.

S: +OK POP3 server ready
C: user tecchannel
S: +OK
C: pass ahd635d
S: +OK
C: LIST
S: +OK 2 messages (320 octets)
S: 1 120
S: 2 200
S: .
C: RETR 1
S: +OK 120 octets
S: <Server sendet Nachricht 1>
S: .
C: DELE 1
S: +OK message 1 deleted
C: RETR 2
S: +OK 200 octets
S: <Server sendet Nachricht 2>
S: .
C: DELE 2
S: +OK message 2 deleted
C: RETR 3
S: -ERR no such message
C: QUIT
S: +OK

IMAP4: Internet Message Access Protocol, Version 4

E-Mail-Client und Server tauschen bei IMAP ihre Daten über den TCP-Port 143 aus. Im Gegensatz zu den Protokollen SMTP und POP muss der Client bei IMAP nicht nach jedem gesendeten Kommando auf die unmittelbare Antwort des Servers warten. Es können mehrere Befehle hintereinander versendet werden, die jeweilige Rückmeldung vom Server kann später erfolgen. Dazu wird jedem Kommando seitens des Client eine Kennung vorangestellt, auch "Tag" genannt, zum Beispiel "A001" für den ersten Befehl und "A002" für den zweiten. Der Server kann dem Client auf mehrere Arten antworten: Mit einem Plus-Zeichen am Anfang der Zeile antwortet der Server, wenn er weitere Informationen zu dem vorangegangenen Kommando erwartet. Er signalisiert dem Client gleichzeitig seine Empfangsbereitschaft. Steht dagegen ein Sternchen am Anfang der Zeile, sendet der Server weitere Informationen an den Client zurück.

Die Antwort eines Servers kennzeichnet den Erfolg oder Fehler eines Kommandos: "OK" (Kommando erfolgreich ausgeführt), NO (Fehler beim Ausführen) oder BAD (Protokoll-Fehler: Kommando unbekannt oder Syntax-Fehler). Die Antwort enthält denselben Tag wie das zugehörige Kommando, so erkennt der Client, welcher Response welchem Befehl gilt. Wie bei POP durchläuft eine IMAP-Verbindung mehrere Sitzungsstufen:

Auf den folgenden Seiten werden die einzelnen Sitzungsstufen detailliert erläutert.

IMAP4: Non-Authenticated State

Der "Non-Authenticated State" stellt mehrere Möglichkeiten zur Identifizierung des Anwenders zur Verfügung. Folgende Kommandos stehen in diesem Verbindungs-zustand bereit:

Kommandos im "Non-Authenticated State"

Kommando

Argument

Beschreibung

AUTHENTICATE

Authentifizierungs-Mechanismus

Das Kommando bestimmt den Authentifizierungs-Mechanismus, zum Beispiel "Kerberos" oder "S/Key". Details zu den Authentifizierungs-Mechanismen finden Sie in RFC1731.

LOGIN

Name / Passwort

Identifiziert den Anwender über Benutzername und Passwort.

Beispiel für eine Authentifizierung mittels des Kommandos LOGIN:

C: a001 LOGIN EVA AHD635D
S: a001 OK LOGIN completed

IMAP4: Authenticated State

Im "Authenticated State" hat sich der User authentifiziert und muss nun eine Mailbox auswählen, welche in dieser Sitzung bearbeitet werden soll. Dazu stehen unter anderem folgende Kommandos zur Verfügung:

Wichtige Kommandos im "Authenticated State"

Kommando

Argument

Beschreibung

SELECT

Mailbox-Name

Wählt eine Mailbox zur weiteren Bearbeitung aus. Als erfolgreiche Antwort sendet der Client Informationen zur gewählten Mailbox, wie beispielweise die Anzahl der gespeicherten Nachrichten.

EXAMINE

Mailbox-Name

Identisch mit dem Kommando SELECT. Jedoch wird die Mailbox als "read-only" ausgewählt, es sind keine dauerhaften Änderungen möglich.

CREATE

Mailbox-Name

Erstellt eine Mailbox mit dem als Argument übergebenen Namen.

DELETE

Mailbox-Name

Löscht die als Argument übergebene Mailbox.

RENAME

Bestehender Mailbox-Name / Neuer Mailbox-Name

Ändert den Namen einer Mailbox.

Beispiel zum Löschen einer Mailbox mit DELETE:

C: A683 DELETE FRIENDS
S: A683 OK DELETE completed

IMAP4: Selected State und Update State

Im "Selected State" stehen zahlreiche Kommandos zum Bearbeiten einer Mailbox zur Verfügung:

Wichtige Kommandos im "Selected State"

Kommando

Argument

Beschreibung

CLOSE

-

Entfernt alle zum Löschen gekennzeichneten Mails und setzt die Verbindung in den Authenticated State zurück.

EXPUNGE

-

Entfernt alle zum Löschen gekennzeichneten Mails, die Verbindung bleibt im Selected State.

SEARCH

ein oder mehrere Suchkriterien

Erlaubt die Suche nach bestimmten Nachrichten in der aktuellen Mailbox. Das Kommando unterstützt Boolesche Verknüpfungen.

FETCH

Gewünschte Daten einer Nachricht

Bewirkt das Senden von Daten einer Nachricht vom Server zum Client.

Beispiel zum Suchen einer bestimmten Nachricht mit SEARCH. Als Ergebnis der Suche liefert der Server die Nummern der entsprechenden Mails zurück:

C: A282 SEARCH SINCE 1-NOV-2001 FROM "ADAM"
S: * SEARCH 2 84 882
S: A282 OK SEARCH completed

Beendet der Client mit dem Kommando LOGOUT die Verbindung, wechselt der Server in den "Update State" und führt noch anstehende Änderungen aus.

Daneben gibt es eine Reihe weiterer Befehle im "Authenticated State" und "Selected State". Eine Beschreibung aller Funktionen und Befehle würde den Rahmen dieses Artikels sprengen. An dieser Stelle können wir nur auf die rund 80 Seiten starke RFC2060 verweisen.

IMAP4: Beispiel für das Abrufen einer Mail

In diesem Beispiel sehen Sie den Ablauf einer IMAP4-Verbindung. Der Client identifiziert sich gegenüber dem Server, wählt eine Mailbox aus und lädt den Header einer Nachricht herunter.

S: * OK IMAP4 Service Ready
C: a001 login eva ahd635d
S: a001 OK LOGIN completed
C: a002 select inbox
S: * 18 EXISTS
S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)
S: * 2 RECENT
S: * OK [UNSEEN 17] Message 17 is first new message
S: * OK [UIDVALIDITY 3857529045] is first new message
S: a002 OK [READ-WRITE] SELECT completed
C: a003 fetch 12 rfc822.header
S: * 12 FECH (RFC822.HEADER {346}
S: Date: Wed, 10 Dec 2001 02:23:25 -0700 (PDT)
S: From: Adam <adam@xyz.de>
S: Subject: Beispiel für eine IMAP4-Verbindung
S: To: Eva <eva@test.de>
S: Message-Id: <9307191947AA00502.Adam@xyz.de>
S: Mime-Version: 1.0
S: Content-Type: TEXT/PLAIN; CHARSET=iso-8859-1
S: )
S: a003 OK FETCH completed
C: a004 LOGOUT
S: * BYE IMAP4 server terminating connection
S: a004 OK LOGOUT completed

Nachdem der Mail-Client über TCP eine Verbindung zum SMTP-Server aufgebaut hat, wartet er auf einen Begrüßungstext des Servers. Im nächsten Schritt identifiziert sich der Client mit dem Kommando LOGIN, als Argument übergibt er den Benutzernamen und das Passwort. Nach dem Auswählen der Mailbox sendet der Server einige Informationen wie beispielsweise die Anzahl der ungelesenen Nachrichten. Mit dem Kommando FETCH fordert der Client den Header der Nachricht 12 an. LOGOUT beendet die Verbindung.

Anti-Spam für MTAs

In Massen verschickte Werbemails, auch Spam genannt, haben in den letzten Jahren immer mehr zugenommen. Einige Internet-Provider und E-Mail-Dienste lehnen Mails, die von bekannten Spammern stammen, bereits gänzlich ab. Derartige Maßnahmen betreffen allerdings im schlimmsten Fall nicht nur den Mail-Account des Spammers, sondern sämtliche Post, die der betreffende E-Mail-Server versendet. Dabei ist es gar nicht so leicht, zwischen Werbemails und beispielsweise einem angeforderten Newsletter zu unterscheiden. So kann es passieren, dass die eine oder andere Mailing-Liste im Filter landet und ihre Empfänger nicht mehr erreicht.

Bei den Spammern ist es gängige Praxis, zum Versenden der Mails fremde SMTP-Server zu verwenden, so genanntes Relaying. Dies ist nicht nur in vielen Ländern illegal, sondern bringt für den Betreiber des betroffenen Servers unter Umständen zahlreiche Probleme mit sich: Dieser hat letztendlich das unnötige Datenvolumen zu bezahlen, und das plötzlich auftretende E-Mail-Aufkommen kann seine Infrastruktur lahm legen. Außerdem ist es bei häufigem unautorisiertem Relaying möglich, dass der Server auf eine so genannte Blacklist gesetzt wird. Andere MTAs akzeptieren von diesem Server auf Grund der vielen Spammings keine Mails mehr. Dies bedeutet im schlimmsten Fall, dass sich von diesem SMTP-Server keine Nachrichten mehr versenden lassen.

Um den zweifelhaften Marketingmaßnahmen der Versender erfolgreich Einhalt zu gebieten, ist es erforderlich, das Versenden derartiger Massenmails schon im Vorfeld zu verhindern.

Anti-Spam: Verhindern von Relaying

Ein SMTP-Server sollte in der Lage sein, unautorisiertes Relaying zu erkennen und abzulehnen. Beim Versenden einer Mail gibt es dazu vier Elemente zur Identifizierung von Sender und Empfänger mit unterschiedlichem Sicherheitsgrad:

Identifizierung von Sender und Empfänger einer Mail

Identifizierung

Beschreibung

HELO Hostname

Es kann keiner oder jeder beliebige Hostname angegeben werden.

MAIL From:

Der Client kann jede beliebige Adresse angeben.

RCPT To:

Dies muss eine korrekte Adresse sein.

SMTP_CALLER

IP-Adresse des Client.

Die ersten beiden Punkte (HELO und MAIL) können beliebige Angaben enthalten. Auf diese Angaben sollte man sich somit nicht verlassen. Daher sollte der Server das Relaying anhand des folgenden Algorithmus erlauben:

Damit lassen sich zumindest die meisten unautorisierten Relaying-Versuche verhindern.

Anti-Spam: Weitere Möglichkeiten

Eine weitere Möglichkeit gegen unautorisiertes Mail-Relaying ist die SMTP-Authentifizierung. Der Mailserver identifiziert den Client anhand von Zugangsdaten und erlaubt nur mit diesen eine Weiterleitung. Dies passiert bei jedem Versand. Das Verfahren entspricht dem Quasi-Standard RFC2554, der von gängigen Mail-Clients wie Microsoft Outlook und Netscape Messenger unterstützt wird.

SMTP after POP

Viele Provider setzen die SMTP-Authentifizierung nicht ein, da dies nicht von jedem System unterstützt wird. Stattdessen wird das Mail-Relaying dynamisch freigeschaltet. Dabei werden Nachrichten wie bisher per POP3 oder IMAP4 vom Server abgerufen. Hierfür identifiziert sich der Client gegenüber dem Server mit einem Benutzernamen und Passwort und überträgt auch seine IP-Adresse. Das System erlaubt nun dieser IP-Adresse den Versand von E-Mails für eine bestimmte Zeit. Bei "SMTP after POP" muss also zumindest einmal vor dem Senden einer Mail das Postfach abgefragt worden sein.

Weitere Informationen zu unerwünschten Werbemails finden Sie im Artikel "Kampf dem Spam".

TLS: Sicherheit beim Mailen

Ein Nachteil von SMTP ist die Sicherheit. Die Mail Transfer Agents kommunizieren untereinander im "Klartext". In den meisten Fällen geht die Übermittlung über einen oder mehrere Router. Dieser kann im schlimmsten Fall den gesamten Datenverkehr zwischen Client und Server mitprotokollieren und auswerten.

Um einen sicheren Mailversand zur gewährleisten, gibt es die Möglichkeit, eine SMTP-Verbindung per TLS-Verschlüsselung aufzubauen. TLS (Transport Layer Security) ist eine Weiterentwicklung des bekannteren SSL (Secure Sockets Layer). Details zu "SMTP over TLS" finden Sie in RFC2487.

Über das ESMTP-Kennwort STARTTLS teilt der Server dem Client beim Verbindungsaufbau mit, dass die Verschlüsselung unterstützt wird. Falls der Client Verschlüsselung nutzen möchte, sendet er das Kommando STARTTLS ohne Parameter. Beide Rechner starten daraufhin die Verschlüsselung. Hier sehen Sie ein Beispiel für eine SMTP-Verbindung per TLS:

S: 220 test.de SMTP server ready
C: EHLO xyz.de
S: 250-xyz.de, pleased to meet you
S: 250 STARTTLS
S: 220 Go ahead
C: <Start der Verschlüsselung>
S: + C: <Verschlüsselung wird abgesprochen>
C: <Client sendet Kommandos zur Bearbeitung von Mails>
...

Auch bei POP und IMAP besteht das Problem, dass insbesondere die Authentifizierungsdaten offen über das Internet gesendet werden. Daher wurde TLS auch für POP und IMAP eingeführt. Details hierzu finden Sie in RFC2595. (kpf)

tecCHANNEL Buch-Shop

Literatur zum Thema Netzwerke

Bestell-Link

Titel von Pearson Education

Bestellung

PDF-Titel (50% billiger als Buch)

Downloads