Die E-Mail-Protokolle SMTP, POP3 und IMAP
Willemers Informatik-Ecke

SMTP

RFC 788, 821

SMTP (Simple Mail Transfer Protocol) ist das Protokoll für das Versenden von E-Mails.

In den Entstehungszeiten von SMTP waren PCs noch nicht verbreitet. Stattdessen arbeiteten die Computer-Benutzer auf einem Multi-User-System wie UNIX. Das Mail-Programm des Anwenders, das als User Agent bezeichnet wird, wirft seine Mail in den Port 25 des lokalen Computers. Dieser verteilt die Mail direkt, falls der Empfänger den gleichen Computer nutzt. Ansonsten wird die Mail an den SMTP-Server des Zielrechners gesendet. Auf diese Weise erfolgt der Versand von Mails extrem schnell.

In den heutigen Zeiten verwenden die meisten Anwender PCs. Diese haben in der Regel keinen SMTP-Server und sind vor allem nicht immer eingeschaltet. Darum ist heutzutage die Endstation des SMTP meist ein SMTP-Server des Internet Service Providers (ISP).

Wer seine Mails liest, verwendet dazu einen Mail-Client, der über die Protokolle POP3 oder IMAP die Mails verwaltet, bzw. vom Mail-Server auf den PC übernimmt.

Die SMTP-Kommandos

Die eigentliche Nachricht, die ab der Eingabe des Befehls DATA folgt, besitzt zunächst einen Header. Hier können die folgenden Kommandos eingegeben werden. Der Header endet, wenn eine Leerzeile eingegeben wird. Der eigentliche Mail-Text ist auf 7-Bit-ASCII beschränkt. Um binäre Daten, insbeondere Anhänge zu versenden, ist es notwendig, MIME-Erweiterungen zu verwenden. Dabei wird im Allgemeinen mit Base64 kodiert. Das bedeutet, dass Anhänge für den Transport noch einmal nicht unerheblich "aufgeblasen" werden.

Das Versenden einer Mail auf Protokollebene

Das SMTP ist ein textorientiertes Protokoll. Solange unverschlüsselt über den Port 25 kommuniziert wird, kann man mit dem SMTP-Server direkt von der Tastatur sprechen. Dazu benötigt man einen Telnet-Client, dem als erster Parameter die Adresse des Servers und danach die Nummer des Ports angegeben wird.
telnet mailserver 25

HELO und OLHE

Der Client sendet HELO oder OLHE gefolgt vom FQHN, also dem Hostname inklusive Domain, um eine Sitzung zu eröffnen. Als Antwort erhält er 220, als Zeichen der Zufriedenheit des Servers. OLHE führt dazu, dass der Server eine Liste seiner Befehle ausgibt und einige Statusmeldungen liefert.

MAIL From: donald@duck.de

Mit dem MAIL-Kommando gibt der Client an, wer der Absender ist. Dieser Absender wird von den meisten ISPs geprüft. Trifft man auf einen SMTP-Server, der beliebige Absender-Adressen ignoriert, lassen sich so beliebige Absender fälschen.

RCPT To: alice@wunderland.de

Mit diesem Befehl wird die Empfängeradresse übergeben.

DATA

Auf die Sendung von DATA reagiert der Server mit der Antwort 354 und erwartet das Senden des Datenbereichs der Mail.

Im DATA-Bereich werden im Headerbereicht Betreff, Absender und Empfänger genannt. Diese Angaben werden nicht vom SMTP-Server ausgewertet, sondern vom Client angezeigt. Darum ist es relativ einfach, diese zu fälschen.

Subject: Was Du schon immer wissen wolltest
Date: Wed, 17 Apr 2019-17:13:09 +0200
From: alice@sender.com
To: bob@receiver.com
Es folgt nach einer Leerzeile der eigentliche E-Mail-Inhalt. Der Datenbereich wird mit CR-LF Punkt CR-LF abgeschlossen. Dies beantwortet der Server mit 250.

QUIT

Der Client beendet die Sitzung mit dem Befehl QUIT, was der Server mit 221 beantwortet. Die Verbindung wird beendet.

Multipurpose Mail Extension (MIME)

Mails beschränkten sich ursprünglich auf 7-Bit-ASCII, so das es nicht einmal vorgesehen war, internationale Sonderzeichen zu verwenden, geschweige denn Bilder, Videos oder Dokumente als Anhang.

MIME definiert neben den Dateitypen auch die Anwendungen, die mit den Dateitypen umgehen können.

Alle Daten, die nicht in mit 7 Bit pro Byte auskommen, werden mit Base64 kodiert, also auf 64 Zeichen der ASCII-Tabelle umgesetzt. Diese 64 Zeichen sind darauf ausgelegt, dass sie druckbar sind. Auf diese Weise schränkt sich die Übertragung sogar auf 6 Bit ein, was dazu führt, dass sich die Anhänge beim Versenden per Mail vergrößern.

Im Mail-Header wird der MIME-Block durch die Header angekündigt.

MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
Wenn mehrere MIME-Typen versendet werden sollen, wird ein Multipart Header verwendet.
MIME-Version: 1.0
Content-Type: multipart/mixed;
    boundary="0001labelanhang"

--0001labelanhang
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.=
w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
...
</body>
</html>
--0001labelanhang--

--0003nochnlabel
Content-Type: application/pdf;
    name="Protokoll vom 12 06 2019.pdf"
Content-Description: Protokoll vom 12 06 2019.pdf
Content-Disposition: attachment;
	filename="Protokoll vom 12 06 2019.pdf"; size=286845;
	creation-date="Fri, 21 Jun 2019 07:15:54 GMT";
	modification-date="Fri, 21 Jun 2019 07:17:58 GMT"
Content-Transfer-Encoding: base64

4zqhfm9Kss+ke2QsrlZ7jPzWX1iklCNSYgcf5hOSiRpmclDudo/8DT31FS4y6kt9j0rW+InCxaN4
+R9pGlkc0hjtawwqmm4UBzzXFiUTueyW57gyUDbqGNujAwPOgg4eu3Z8/CnycIbjQhMT1c1kKlZN
...
jy8X8xwt83EechMnNmzAZRmBzT7pcyc1JyhnB6+7R1crPmEBEw86ekFSrDAkMNTNXXvRTxge4oMM

--0003nochnlabel--

Authentifizierung

Ursprünglich war bei SMTP keine Authentifizierung vorgesehen. Man ging vom Modell des Briefkastens aus, in den ja auch jeder einen Brief stecken kann, ohne sich auszuweisen.

In Zeiten von Spam wird aber fast jeder ISP eine Authentifierzung des Senders anfordern.

Sicherheit

Verschlüsselte Übertragung

Das ursprüngliche SMTP sendet alle Daten im Klartext unverschlüsselt über die Leitung.

Die Erweiterungen des SMTP verwenden für die Übertragung eine Verschlüsselung. In diesen Fällen wird Port 465 bzw. 587 verwendet.

Das bedeutet aber nicht, dass die Nachrichten selbst verschlüsselt sind. Wer einen Zugriff auf den Mail-Server bekommt, kann die Nachrichten dort immer noch lesen.

Um das zu unterbinden, muss eine Ende-zu-Ende-Verschlüsselung vorgenommen werden.

Es stehen verschiedene Mechanismen zur Ende-zu-Ende-Verschlüsselung der Nachrichten zur Verfügung. Die bekannteste dürfte PGP bzw. dessen Open-Source-Implementierung GnuPG sein.

Relay

Authentifizierung

Bei der Einführung von Mail ging man davon aus, dass ein öffentlicher Briefkasten ja auch kein Schloss benötigte und führte darum keine Authentifizierung ein. Ein SMTP-Server sollte kollegial anderen SMTP-Servern beim Austragen der Post helfen.

Mit dem Aufkommen von unerwünscht versendeten Werbemails (Spam) wurden solche offenen Zugänge (Relay) aber lästig. Um die Flut der unerwünschten Mails in den Griff zu bekommen, werden heutzutage Benutzerkennung und Passwort verlangt.

Relay-Server

Ein Relay-Server ist ein Server, der von einem anderen Server Mails entgegen nimmt und an andere Mail-Server weiterleitet.

Ein solcher Relay-Server wird benötigt, wenn ein Programm Mails versenden möchte, aber keinen eigenen Mailserver zur Verfügung hat.

Ein Relay-Server sollte so eingerichtet sein, dass er für die Mails des Senders oder des Empfängers zuständig ist. Wird dies nicht überprüft, wird von einem Open-Relay gesprochen. Solche Server können von Spam-Versendern missbraucht werden, um die Herkunft der Mail zu verschleiern.

Wird ein solch offenes Relay entdeckt, landet er leicht in einer Blacklist. Das führt dazu, dass Mails von diesem Server in Spamfiltern landen. Eine Wiederfreigabe kann mit hohem Aufwand und hohen Kosten verbunden sein. Das erklärt vielleicht die begriffliche Nähe von Blacklist zu Blackmail.