Modul 1 · 1.2
Deutsch
SMTP: das Gespräch zwischen Mailservern
Modul 1: Wie E-Mail funktioniert · Lesezeit: 10 Minuten
Lernziel: Nach dieser Lektion können Sie ein SMTP-Gespräch lesen, erklären, was EHLO, MAIL FROM, RCPT TO und DATA bewirken, und anhand eines Antwortcodes erkennen, ob ein Fehler vorübergehend oder endgültig ist.
Kernbegriffe: SMTP (RFC 5321), Sitzung, EHLO/HELO, MAIL FROM, RCPT TO, DATA, QUIT, Antwortcode (2xx, 3xx, 4xx, 5xx), erweiterter Statuscode, Erweiterungen (STARTTLS, AUTH, SIZE), Null-MX
Ein Gespräch in Klartext
SMTP ist ein sehr altes Protokoll (die erste Version stammt von 1982) und daher sehr gut lesbar. Zwei Server senden einander Textzeilen. Der Absender (der Client) sendet einen Befehl, der Empfänger (der Server) antwortet mit einer dreistelligen Zahl und einer kurzen Erklärung. Ein solches Gespräch können Sie wörtlich in einer Fehlermeldung oder einem Protokoll nachlesen, und genau deshalb lohnt es sich, es zu verstehen.
Nachfolgend ein vollständiges Gespräch. S: ist der empfangende Server, C: der sendende Server. Die Mail geht von anna@example.com an jan@example.net.
S: 220 mx1.mailprovider.example ESMTP ready
C: EHLO out.hosting.example
S: 250-mx1.mailprovider.example Hello out.hosting.example [192.0.2.25]
S: 250-SIZE 52428800
S: 250-8BITMIME
S: 250-STARTTLS
S: 250 SMTPUTF8
C: STARTTLS
S: 220 2.0.0 Ready to start TLS
(ab hier ist die Verbindung verschlüsselt; der Client sendet erneut EHLO)
C: EHLO out.hosting.example
S: 250 ...
C: MAIL FROM:<anna@example.com> SIZE=24310
S: 250 2.1.0 Ok
C: RCPT TO:<jan@example.net>
S: 250 2.1.5 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: Anna <anna@example.com>
C: To: Jan <jan@example.net>
C: Subject: Offerte
C: Date: Sun, 8 Nov 2026 10:15:00 +0100
C: Message-ID: <a1b2c3@example.com>
C:
C: Hallo Jan, anbei das Angebot.
C: .
S: 250 2.0.0 Ok: queued as 4F2A1B
C: QUIT
S: 221 2.0.0 ByeDie Befehle einzeln
| Befehl | Bedeutung | Zu beachten |
|---|---|---|
| (Verbindung) | Der Server begrüßt mit 220 und seinem Namen. | Das nennt man den Banner. Sagt der Server sofort 554, dann möchte er überhaupt nicht mit Ihrer IP-Adresse sprechen (oft wegen einer Blocklist). |
EHLO Name | „Hallo, ich bin out.hosting.example.“ Der Server antwortet mit den Erweiterungen, die er kennt. | Der Name sollte der tatsächliche Name des Versandservers sein, idealerweise identisch mit seinem PTR-Eintrag (Lektion 5.1). HELO ist die alte Variante ohne Erweiterungen. |
STARTTLS | „Lassen Sie uns ab jetzt verschlüsseln.“ | Nur, wenn der Server es anbietet. Zwischen Servern ist dies meist freiwillig (Lektion 5.4). |
MAIL FROM:<Adresse> | Der Envelope-Absender: Hierhin gehen Fehlermeldungen. | Wird später zum Header Return-Path. SPF prüft diese Adresse. Einen leeren Absender <> verwenden Server für eigene Fehlermeldungen, damit ein Bounce niemals einen weiteren Bounce erzeugt. |
RCPT TO:<Adresse> | Der Empfänger. Darf mehrfach vorkommen, einmal pro Empfänger. | Hier sollte der Server bereits sagen, ob die Adresse existiert. Ein 550 5.1.1 an dieser Stelle ist ein sauberer, sofort erkennbarer Fehler. |
DATA | „Jetzt kommt die Mail selbst.“ Der Server antwortet mit 354. | Danach folgen die Header, eine Leerzeile und der Text. Eine Zeile mit nur einem Punkt beendet die Übertragung. |
QUIT | Ende des Gesprächs. |
Die wichtigste Erkenntnis: alles vor DATA ist Envelope, alles nach DATA ist der Inhalt. Was in MAIL FROM steht und was im Header From: steht, werden getrennt übermittelt und müssen nicht übereinstimmen. Der Server stellt anhand von RCPT TO zu; die Zeile To: im Inhalt spielt bei der Zustellung keine Rolle.
Die Antwortcodes
Die erste Ziffer des Codes ist am wichtigsten:
| Beginnt mit | Bedeutung | Was macht der Absender? |
|---|---|---|
| 2 | Erfolgreich. | Weiter zum nächsten Schritt. 250 nach DATA bedeutet: Der Server hat die Mail angenommen und ist nun dafür verantwortlich. |
| 3 | Weiter so, ich warte auf mehr. | Nur bei 354 nach DATA (und beim Anmelden). |
| 4 | Vorübergehender Fehler: jetzt nicht, später erneut versuchen. | Mail bleibt in der Warteschlange und wird später erneut zugestellt. |
| 5 | Endgültiger Fehler: das wird nicht funktionieren. | Absender gibt auf und sendet eine Fehlermeldung (Bounce) an den Envelope-Absender. |
Hinter den drei Ziffern steht bei modernen Servern ein erweiterter Statuscode in der Form klasse.onderwerp.detail (RFC 3463), zum Beispiel 5.1.1. Die erste Ziffer ist wieder 2, 4 oder 5. Die zweite Ziffer gibt an, worum es geht: 1 = Adresse, 2 = Postfach, 3 = Mailsystem, 4 = Netzwerk und Routing, 5 = Protokoll, 6 = Inhalt, 7 = Sicherheit und Richtlinien. Ein paar, die häufig vorkommen:
550 5.1.1 The email account that you tried to reach does not exist
452 4.2.2 Mailbox full (vorübergehend)
552 5.3.4 Message size exceeds fixed limit
451 4.7.1 Greylisted, please try again later
550 5.7.1 Message rejected (Richtlinie: Spam, Blocklist, DMARC)In Modul 6 lernen Sie, einen vollständigen Bounce zu lesen, und finden eine Tabelle mit den häufigsten Codes.
Warum vorübergehend und endgültig so wichtig ist
Ein Server, der unsicher ist, antwortet oft mit einem 4xx. Ein bekanntes Beispiel ist Greylisting: Ein Server, der einen Absender noch nicht kennt, sagt beim ersten Mal „versuchen Sie es später erneut“. Ein echter Mailserver kommt nach ein paar Minuten zurück, viele Spamprogramme nicht. Auch große Empfänger verwenden 4xx, um das Tempo zu drosseln, wenn sie einer IP-Adresse noch nicht vertrauen. Für Sie als Absender bedeutet das: Verzögerung, aber kein Verlust. Das System löst es meist selbst.
Ein 5xx ist anders. Dabei versucht der Absender es nicht erneut. Erhalten Sie ein 5xx zurück, muss jemand etwas ändern: die Adresse, den Inhalt oder die Einstellungen der sendenden Domain.
Eine Falle: Manche Server geben ein 5xx aus, obwohl das Problem vorübergehend ist (zum Beispiel bei einem vollen Postfach 552 5.2.2), und andere geben ein 4xx für etwas, das niemals funktionieren wird. Lesen Sie daher immer den Text hinter dem Code, nicht nur die Zahl.
Wer ist verantwortlich?
Nach 250 am Ende von DATA liegt die Verantwortung beim empfangenden Server. Gelingt es ihm danach nicht, die Mail ins Postfach zu legen, muss er selbst eine Fehlermeldung zurücksenden. Das ist die Quelle eines lästigen Phänomens: Backscatter. Ein Server, der zunächst alles annimmt und erst später feststellt, dass die Adresse nicht existiert, sendet einen Bounce an den Envelope-Absender. War dieser von einem Spammer gefälscht, erhält ein unschuldiger Dritter den Bounce. Deshalb sollten Server bereits bei RCPT TO ablehnen, was nicht funktionieren kann (siehe auch Catch-all in Lektion 3.3).
In der Praxis: SMTP in Ihrer eigenen Umgebung sehen
Ein gewöhnlicher Nutzer sieht das SMTP-Gespräch selten vollständig, aber doch in Ausschnitten:
- in einem Bounce steht die letzte Zeile des Gesprächs, zum Beispiel
Remote-MTA: mx1.mailprovider.exampleundDiagnostic-Code: smtp; 550 5.1.1 ...; - in den Headern einer empfangenen Mail steht pro Server eine Zeile
Received:mit dem EHLO-Namen und der IP-Adresse (Lektion 1.5); - in einem Panel mit Mailprotokoll, wie E-Mail-Verfolgung in DirectAdmin bei WebOké, sehen Sie pro Nachricht die Antwort des empfangenden Servers. Bei anderen Anbietern heißt so etwas zum Beispiel Nachrichtenverfolgung oder Mail Log, und der Inhalt ist vergleichbar.
Sie müssen also selbst keine Verbindung zu einem Mailserver herstellen, um dies lesen zu können. Wer es dennoch ausprobieren möchte: Mit openssl s_client -starttls smtp -connect server:25 können Sie das Gespräch von Hand führen, aber viele Heimanbieter blockieren ausgehenden Datenverkehr auf Port 25 (Lektion 1.4).
Zusammenfassung
- SMTP ist ein lesbares Gespräch: EHLO, (STARTTLS), MAIL FROM, RCPT TO, DATA, QUIT.
- Alles vor DATA ist Envelope (Zustellung und Fehlermeldungen), alles danach ist der Inhalt mit den Headern, die Sie sehen.
- 2xx = erfolgreich, 4xx = vorübergehend (später erneut), 5xx = endgültig (Bounce).
- Der erweiterte Code
X.Y.Zgibt an, worum es geht; X.1 Adresse, X.2 Postfach, X.7 Richtlinie und Sicherheit. - Lesen Sie immer den Text hinter dem Code; Server sind nicht immer konsequent.
Quiz
Aufgabe
Aufgabe Z1.2: Eine Domain, die keine Mail empfängt. Suchen Sie die MX-Einträge von example.com. Tragen Sie ein, was Sie finden, und wählen Sie aus, was ein Versandserver mit Mail für info@example.com macht: (a) Zustellen beim Server mit Priorität 0, (b) den A-Eintrag versuchen, (c) sofort aufgeben, oder (d) es später erneut versuchen. Das Programm ruft den MX-Eintrag live ab und prüft nach.
Weiterführende Informationen
Die Schritte in diesen Artikeln gelten für die Panels von WebOké; bei anderen Anbietern funktioniert es vergleichbar.
- So funktioniert der Versand von E-Mails (SMTP)
- Mail delivery failed: So lesen Sie die Fehlermeldung und was die Codes bedeuten
- DirectAdmin Anleitung 9.3: E-Mail-Verfolgung: wo ist meine Mail geblieben?
- RFC 5321 (SMTP), Abschnitt 3 und 4.2 (Antwortcodes); RFC 3463 (erweiterte Statuscodes); RFC 7505 (Null-MX)
