E-Mail Kopfzeilen verstehen
Inhalt
Grundlegendes zu Kopfzeilen
Der Nachrichtenversand mit SMTP
Der Nachrichtenempfang mit POP3
Die Received-Zeilen
Kopfzeilen im Detail
Grundlegendes zu Kopfzeilen
Die bei einer E-Mail-Nachricht übermittelten Daten beginnen mit den Kopfzeilen, gefolgt von der eigentlichen Nachricht, inkl. Anlagen.
Das Ende der Kopfzeilen wird durch eine Leerzeile (zwei Zeilenumbrüche hintereinander) gekennzeichnet.
Lange Kopfzeilen können umgebrochen werden, wobei die neuen Zeilen mit mindestens einem Leerzeichen oder Tabulatorzeichen eingerückt werden.
Kopfzeilen enthalten:
- Technische Informationen (Inhaltstype und Kodierung für die Darstellung)
- Informative Angaben wie Absender, Empfänger, das Erstellungsdatum oder der Betreff
- Zustellvermerke der Mailserver in den Received-Zeilen
- Verarbeitungsvermerke div. Programme wie z.B. Spamfilter oder Virenscanner
- Informationen zu und von E-Mail-Clients (User-Agent des Absenders, Thunderbird beim Empfänger etc.)
Die Kopfzeilen haben - bis auf einige Ausnahmen wie der Received-Zeilen - keine einheitliche Reihenfolge. Alle an der Zustellung beteiligten Programme beim Absender, bei den Mail-Exchange-Servern und beim Empfänger können die Kopfzeilen beliebig verändern.
Der Nachrichtenversand mit SMTP
Das Versenden und Empfangen von E-Mails wird normalerweise von E-Mail Clients wie etwa Microsoft Outlook Express oder Mozilla Firebird erledigt. Zum besseren Verständnis ist es jedoch von Vorteil, wenn das Prinzip des Nachrichtenversandes bekannt ist.
Bevor die Nachricht an den Mailserver gesendet werden kann, werden Informationen ausgetauscht, die für die Zustellung erforderlich sind. Diese Kommunikation zwischen dem Sender und dem empfangenden Server wird als SMTP-Dialog oder engl. SMTP Envelope bezeichnet.
Zum Versenden von E-Mails bedienen sich Mail-Programme meist dem Mailserver des eigenen Providers, der dann die weitere Zustellung an den Empfänger übernimmt. Jedoch können Nachrichten auch direkt zugestellt werden. Dazu benötigt man eine DNS-Anfrage vom Typ "MX", welche die verfügbaren MX-Server (Mail eXchange Server) einer Domain liefert. Dafür können spezielle Programme oder auch Online-Dienste verwendet werden.
Im folgenden Beispiel möchte der fiktive Absender "test@tester.tld" eine Nachricht an "noname@example.tld" senden. Dazu wird zuerst der MX-Server der Domain "example.tld" benötigt. Eine DNS-Anfrage ergibt, dass der MX-Server "mail.example.tld" Nachrichten für die Domain "example.tld" entgegen nimmt. Mit einem Terminal-Programm kann nun eine Verbindung zum Host "mail.example.tld", Port 25 (SMTP) hergestellt werden.
Nach dem Aufbau der Verbindung meldet sich der Mailserver mit der Zeile:
220 mail.example.tld ESMTP
Die Zahl "220" am Beginn der Zeile bedeutet, dass es sich bei dem nachfolgenden Text nur um eine gewöhnliche Meldung handelt und dass kein Fehler aufgetreten ist. Jetzt wartet der SMTP-Server auf eine sog. Vorstellung, welche mit dem Kommando "HELO" bzw. "EHLO" eingeleitet wird.
helo faked.tester.tld
Mit HELO oder EHLO stellt sich der Sender üblicherweise mit seinem öffentlichen Hostnamen vor. Der Server bestätigt dies mit dem Statuscode 250, welcher für einen gültigen Befehl steht.
Ist der Absender kein Mail-Server, wie etwa der PC des Versenders der Nachricht, wird nach HELO oder EHLO statt dem öffentlichen Hostnamen der Computername oder die öffentliche oder private IP-Adresse angegeben.
Diese Angabe wird in der jeweiligen Received-Zeile entweder direkt nach "from" oder in der Form "(HELO hostname)" angegeben.
250 mail.example.tld
Nun folgt die Adressierung der Nachricht, beginnend mit der E-Mail Adresse des Senders, welche mit dem Befehl "mail from:" gekennzeichnet wird.
mail from: test@tester.tld
Die Mail-Adresse des Absenders, die hier angegeben wurde, findet sich z.B. auch in den Kopfzeilen Original-Sender, X-Envelope-From, X-Env-From, X-Env-Sender, X-Envelope-Sender oder X-Sender wieder. Manchmal wird diese Adresse auch in der Received-Zeile angegeben, z.B. mit "Received: from ... (envelope-from <test@tester.tld>) ... by ...".
Nachdem der SMTP-Server die Adresse des Absenders verifiziert hat und diese als gültig befunden hat, meldet er den Statuscode 250, meist gefolgt vom Text "ok", zurück.
250 ok
Anschließend wird die E-Mail-Adresse des Empfängers angegeben. Diese wird mit dem Befehl "rcpt to:" (engl. für "recipient") eingeleitet.
rcpt to: noname@example.tld
Dies ist die Adresse des tatsächlichen Empfängers an den die Nachricht zugestellt wird. Die Kopfzeile "To" ist lediglich informativ und hat mit der Zustellung der Nachricht nichts zu tun.
Die hier angegebene Mail-Adresse findet sich eventuell in den Kopfzeilen Envelope-To oder X-Envelope-To wieder, oder auch in der Received-Zeile nach "for", z.B. "Received: from ... by ... with ... for <noname@example.tld>; ...".
Die Empfänger-Adresse wird vom SMPT-Server bestätigt:
250 ok
Die Adressierung ist nun abgeschlossen und die eigentliche Nachricht kann dem Server übermittelt werden. Dazu wird das Kommando "data" verwendet.
data
Der SMPT-Server bestätigt den data-Befehl mit dem Statuscode 354, der zur Eingabe des Textes auffordert. Im Anschluss an den Statuscode können Texte wie z.B. "go ahead" oder "Enter mail, end with "." on a line by itself" folgen.
354 go ahead
Keine der oben genannten Angaben müssen auch in der Nachricht enthalten sein, die beim Empfänger eintrifft. Darum werden nun die typischen Kopfzeilen wie "From", "To" und "Subject" einer Nachricht eingegeben. Hier wird zu Beginn auch eine gefälschte Received-Zeile angegeben, die über den wahren Absender täuschen soll. Darauf wird jedoch weiter unten genauer eingegangen.
Nach den Kopfzeilen wird der eigentliche Nachrichtentext, durch eine Leerzeile getrennt, eingegeben.
Received: from faked.tester.tld (faked.tester.tld [203.0.113.89])
by mail.example.tld with SMTP; 1 Sep 2018 13:53:24 +0200
Message-Id: <1234567890@tester.tld>
X-Sender: test@tester.tld
From: "The Faker" <test@tester.tld>
To: "NoName" <noname@example.tld>
Subject: Ein Test
Text, Text, Text
Zeile 2
Zeile 3
.
Der Nachrichtentext wird immer mit einem einzelnen Punkt in einer eigenen Zeile abgeschlossen. Der Server bestätigt den Empfang der Nachricht wieder mit dem Code 250:
250 ok 1157111913 qp 7263
Durch das Kommando "quit" wird die Verbindung zum SMTP-Server geschlossen.
quit
Bevor der Server die Verbindung beendet gibt er den Statuscode 221 (Bestätigung des quit-Befehls) zurück:
221 mail.example.tld
Hiermit ist die Verbindung geschlossen und die Nachricht wird im Postfach des Empfängers hinterlegt.
Der komplette oben beschriebene Dialog zwischen Server und Client sieht nun so aus:
220 mail.example.tld ESMTP helo faked.tester.tld 250 mail.example.tld mail from: test@tester.tld 250 ok rcpt to: noname@example.tld 250 ok data 354 go ahead Received: from faked.tester.tld (faked.tester.tld [203.0.113.89]) by mail.example.tld with SMTP; 1 Sep 2018 13:53:24 +0200 Message-Id: <1234567890@tester.tld> X-Sender: test@tester.tld From: "The Faker" <test@tester.tld> To: "NoName" <noname@example.tld> Subject: Ein Test Text, Text, Text Zeile 2 Zeile 3 . 250 ok 1157111913 qp 7263 quit 221 mail.example.tld
Gefällt dir meine Webseite, meine Freeware-Programme oder Online-Tools?
Dann spende bitte per PayPal und hilf mit, den Inhalt weiterhin kostenlos anbieten zu können - jeder Betrag ist willkommen!
Der Nachrichtenempfang mit POP3
Das Empfangen von E-Mails funktioniert ähnlich wie der Versand. Jedoch kommt hier ein eigenes Protokoll, das Post Office Protokoll (POP), zum Einsatz. Der POP3-Server ist meist über den Port 110 erreichbar.
Im Folgenden wird die oben gesendete Nachricht abgerufen:
+OK Hello there. user xxxxxxxx +OK Password required. pass xxxxxxxx +OK logged in. list +OK 1 598 . retr 1 +OK 598 octets follow. Return-Path: <test@tester.tld> Received: (qmail 7881 invoked from network); 1 Sep 2018 13:58:33 +0200 Received: from host123.provider.tld (HELO tester.tld) (192.0.2.170) by mail.example.tld with SMTP; 1 Sep 2018 13:55:38 +0200 Received: from faked.tester.tld (faked.tester.tld [203.0.113.89]) by mail.example.tld with SMTP; 1 Sep 2018 13:53:24 +0200 Message-Id: <1234567890@tester.tld> X-Sender: test@tester.tld From: "The Faker" <test@tester.tld> To: "NoName" <noname@example.tld> Subject: Ein Test Text, Text, Text Zeile 2 Zeile 3 . quit +OK Bye-bye.
Der rot markierte Text wurde vom Mailserver eingefügt. Abhängig vom Mailserver und der Daten, die beim Versand der Nachricht angegeben wurden, können sich die Headerzeilen unterscheiden. Die erste bzw. in diesem Fall die erste und zweite Received-Zeile von oben werden jedoch immer vom eigenen Mailserver eingefügt, wodurch diese auf jeden Fall authentisch sind.
Die Received-Zeilen
Received-Zeilen sind Zustellvermerke der Mailserver, über die die Nachricht gesendet wurde. Ein Mailserver fügt die Received-Zeile immer oben an die Nachricht an. Daraus ergibt sich, dass der Received-Eintrag des ersten Mailservers unten und der Eintrag des letzten Mailservers, über den die Nachricht transportiert wurde, oben steht.
Jeder Mail-Server protokolliert den Eingang der Nachricht aus seiner Sicht mit den nachfolgenden Informationen.
- from
- Hostname und IP-Adresse des Senders
- by
- Hostname des empfangenden Mailservers (der Server, der diese Zeile eingetragen hat)
- from
- Art (Protokoll) der Verbindung, meist "SMTP", "ESMTPS" etc. Bei Webmail auch "HTTP".
Danach folgt noch das aktuelle Datum und die Uhrzeit des empfangenden Servers.
In unserem Beispiel ergeben sich folgende Received-Zeilen:
Received: (qmail 7881 invoked from network); 1 Sep 2018 13:58:33 +0200 Received: from host123.provider.tld (HELO tester.tld) (192.0.2.170) by mail.example.tld with SMTP; 1 Sep 2018 13:55:38 +0200 Received: from faked.tester.tld (faked.tester.tld [203.0.113.89]) by mail.example.tld with SMTP; 1 Sep 2018 13:53:24 +0200
Received: (qmail 7881 invoked from network); 1 Sep 2018 13:58:33 +0200
Diese Received-Zeile kommt recht häufig in Nachrichten vor, es ist ein Vermerk des Mailservers "QMail". Diese Zeile hat nur bedingt Bedeutung für eine Rückverfolgung des Absenders.
Received: from host123.provider.tld (HELO tester.tld) (192.0.2.170) by mail.example.tld with SMTP; 1 Sep 2018 13:55:38 +0200
Diese Zeile wurde, so wie die erste auch, vom Mailserver des Empfängers eingefügt und ist somit eine gute Ausgangsbasis für eine Rückverfolgung. Der Aufbau einer Received-Zeile ist jedoch nicht an feste Richtlinien gebunden, weshalb man alle Angaben überprüfen sollte. Sehen wir uns die einzelnen Teile genauer an:
from host123.provider.tld
Unter "from" kann einerseits der richtige Hostname des Absenders stehen, so wie in diesem Fall. Aber auch der Computername oder Hostname, wie dieser unter "HELO" angegeben wurde, ist möglich.
(HELO tester.tld)
Nach "HELO" wird jener Text angegeben, der bei der Begrüßung beim Nachrichtenversand festgelegt wurde. Diese Angabe muss jedoch nicht immer enthalten sein.
(192.0.2.170)
Am Ende des Absenders (jedoch vor "by ...") steht in runden Klammern der tatsächliche Absender. Diese IP-Adresse hat die Verbindung zum Mailserver hergestellt und die E-Mail übermittelt. Dies bedeutet, dass die IP-Adresse 192.0.2.170 zum Zeitpunkt des Versandes den Hostnamen "host123.provider.tld" hatte. Da dieser mit dem Hostnamen nach "from ..." identisch ist, wurde er nicht nochmals angeführt. Auch die folgende Angabe ist hier möglich:
(host123.provider.tld [192.0.2.170])
Es gibt keine einheitliche Form der Darstellung, weshalb alle Hostnamen mit der IP-Adresse überprüft werden sollten.
by mail.example.tld with SMTP
Daraus ist ersichtlich, dass der Server "mail.example.tld" die Nachricht entgegengenommen hat. Das verwendete Übertragungsprotokoll war SMTP.
1 Sep 2018 13:55:38 +0200
Durch einen Strichpunkt getrennt folgt am Ende immer das Datum und die Zeit des Einganges beim Mailserver. Das Format der Zeitangabe kann, trotzt Standardisierung unterschiedlich sein. In unserem Fall wurde die E-Mail am 1. September 2018, um 13:55:38 vom Mailserver entgegengenommen. Die Zeitangaben in den Received-Zeilen sind immer in der Lokalzeit des Mailservers angegeben. Um die UTC-Zeit bestimmen zu können, wird die Abweichung zur UTC angefügt. In diesem Fall ist es die Angabe "+0200", was bedeutet, dass die angeführte Zeit eine Abweichung von plus 2 Stunden zur UTC hat. Somit wurde die Nachricht am 01.09.2018, um 11:55:38 UTC entgegengenommen.
Soweit die Einträge des Mailservers. Nun folgen die vom Absender angegebenen und teilweise auch gefälschten Headerzeilen:
Received: from faked.tester.tld (faked.tester.tld [203.0.113.89]) by mail.example.tld with SMTP; 1 Sep 2018 13:53:24 +0200
Wie bereits angedeutet, kann die Nachricht auch über mehrere Mailserver laufen, wobei die Received-Zeile eines Mailservers immer oben angefügt wird. In jeder Received-Zeile ist sowohl der Absender ("from...") als auch der Empfänger ("by...") enthalten. Daraus ergibt sich, dass der Versender der ersten Zeile und der Empfänger der zweiten Zeile identisch oder zumindest ähnlich sein müssen. In unserem Beispiel ist dies jedoch nicht der Fall:
Received: from host123.provider.tld (192.0.2.170) by mail.example.tld Received: from faked.tester.tld (faked.tester.tld [203.0.113.89]) by mail.example.tld
Ein plausibler Verlauf der Nachricht könnte etwa so aussehen (vereinfachte Darstellung):
Received: from mail.target.tld (198.51.100.78) by mx.target.tld Received: from mx3.provider1.tld (203.0.113.3) by target.tld Received: from mx1.provider1.tld (203.0.113.1) by mx3.provider1.tld Received: from user1.provider1.tld (203.0.113.89) by mx1.provider1.tld
Kopfzeilen im Detail
Die nachfolgende Liste enthält nur die wesentlichsten Kopfzeilen. Je nach verwendetem Mailprogramm, Mailserver oder auch bei Mailinglisten können noch weitere Zeilen vorkommen.
Bcc
Webmaster <webmaster@domain.tld>
Das Header-Feld "Bcc" (Blind Carbon Copy) enthält zusätzliche Empfänger, die die Nachricht als "unsichtbare Kopie" erhalten sollen. Im BCC-Feld werden jene zusätzlichen Empfänger eingetragen, die die anderen Empfänger nicht sehen sollen. Die Empfänger in der To- und CC-Zeile sind für alle Empfänger sichtbar.
Cc
Name <name@domain.tld>
Das Header-Feld "Cc" (Carbon Copy) enthält zusätzliche Empfänger, die die Nachricht in "Kopie" erhalten sollen. Diese Angabe ist nur für administrative Zwecke vorgesehen. Die E-Mail wird jedoch so zugestellt, als ob die Adressen im To-Feld enthalten wären.
Content-Language
de-AT, en-US
Das Header-Feld "Content-Language" enthält einen Code für die im MIME Body-Part verwendete Sprache, z.B. "de" für Deutsch. Es können auch mehrere Sprachen, mit einem Komma getrennt, angegeben werden. Ein MIME Body-Part kann beispielsweise eine Anlage wie ein Bild oder ein Dokument enthalten, oder auch die Text- bzw. HTML-Version der Nachricht.
Content-Transfer-Encoding
quoted-printable
Das Header-Feld "Content-Transfer-Encoding" gibt an, wie der Nachrichtentext oder der MIME Body-Part kodiert ist. Übliche Angaben sind "quoted-printable", "base64", "7bit" und "8bit". Ein MIME Body-Part kann beispielsweise eine Anlage wie ein Bild oder ein Dokument enthalten, oder auch die Text- bzw. HTML-Version der Nachricht.
Content-Type
text/plain; charset=ISO-8859-1
Das Header-Feld "Content-Type" gibt den Typ der Nachricht oder des MIME Body-Parts an. Gebräuchlich sind beispielsweise "text/plain" für Textnachrichten oder "text/html" für HTML-Nachrichten. Hinter "charset" folgt der verwendete Zeichensatz. Ein MIME Body-Part kann beispielsweise eine Anlage wie ein Bild oder ein Dokument enthalten, oder auch die Text- bzw. HTML-Version der Nachricht.
Date
Wed, 6 Sept 2018 10:02:47 +0000
Das Header-Feld "Date" enthält die Erstellungszeit bzw. die Zeit des Versendens. Diese Zeitangabe wird vom Mail-Programm des Versenders eingefügt. Die Uhrzeit ist in der Lokalzeit des versendenden Rechners angegeben. Nach der Zeit folgt entweder die Abweichung zur UTC (z.B. "+0200" für +2 Stunden), oder in manchen Fällen auch die Zeitzone.
From
Name <name@domain.tld>
Das Header-Feld "From" enthält die Mail-Adresse und eventuell auch den Namen des Absenders. Diese Angabe wird vom Mail-Programm des Versenders eingefügt.
In-Reply-To
webmaster@domain.tld
Das Header-Feld "In-Reply-To" enthält bei einer Antwort die Message-ID der beantworteten Nachricht.
Organization
Example Company Ltd.
Das Header-Feld "Organization" gibt die Organisation oder den Firmennamen des Absenders an. Die Organisation kann im Mail-Programm eingestellt werden.
Received
from sender.tld (sender.tld [10.1.2.3]) by server.tld with SMTP; 4 Oct 2019 15:40:53 +0200
Das Header-Feld "Received" enthält Informationen über den Absender, den Empfänger und die Empfangszeit einer Nachricht. Dieses Header-Feld wird vom empfangenden Mailserver als oberste Zeile hinzugefügt. Je nach Anzahl der beteiligten Mailserver, können mehrere "Received"-Felder enthalten sein.
References
<DCEA2913.6003005@domain.tld>
Das Header-Feld "References" enthält die Message-IDs von zusammengehörigen Nachrichten. Bei einer Antwort wäre dies die Message-ID der beantworteten Nachricht. Diese Angabe wird von Mailprogrammen verwendet, um die Nachrichten zu sortieren oder um sie hierarchisch darzustellen.
Return-Path
name@domain.tld
Das Header-Feld "Return-Path" enthält die Rücksendeadresse, falls eine Zustellung der Nachricht nicht möglich war. Zu der ursprünglichen E-Mail wird vom Mailserver, der die Nachricht nicht zustellen konnte, eine Fehlermeldung angefügt. Der Return-Path kann auch von einem Mailserver auf Grund der Angabe unter "MAIL FROM" nachgetragen werden.
Subject
Example subject
Das Header-Feld "Subject" enthält den Betreff der Nachricht.
To
"Webmaster" <webmaster@domain.tld>, name@domain.tld, support@domain.tld (Support Center)
Das Header-Feld "To" enthält den oder die Empfänger. Bei mehreren Adressen müssen diese durch einen Beistrich getrennt sein. Die Reihenfolge der Adressen und Namen kann variieren.
X-Mailer
ExampleMailer 1.23
Das Header-Feld "X-Mailer" enthält Informationen zur Software, die zum Versenden der Nachricht benutzt wurde. Übliche Angaben sind der Name und die Versionsnummer der Software, aber auch der URL oder sonstige Angaben sind möglich.
X-Priority
3 (Normal)
Das Header-Feld "X-Priority" gibt die Priorität der Nachricht an. Der Wert hat keinen Einfluss auf die Geschwindigkeit des Versands. Mögliche Werte sind: 1 (Sehr hoch), 2 (Hoch), 3 (Normal), 4 (Niedrig), 5 (Sehr niedrig). Manchmal ist nur die Zahl angegeben. Dieses Header-Feld wird in Spam mit einem hohen Prioritätswert verwendet.
Gefällt dir meine Webseite, meine Freeware-Programme oder Online-Tools?
Dann spende bitte per PayPal und hilf mit, den Inhalt weiterhin kostenlos anbieten zu können - jeder Betrag ist willkommen!