SMTP – Simple Mail Transfer Protokoll Bielefeld, den 23.01.2004 Handout zu Internet-Protokolle – SMTP Christoph Weitkamp & Michael Johannfunke [email protected] [email protected] Beispiel E-Mail Kurze Geschichte der E-Mail Erstmals wurde 1971 eine E-Mail von Ray Tomlinson bei der amerikanischen Firma Bolt Beranek and Newman (BBN) entwickelt, bzw. an einen zweiten Rechner im damaligen ARPANet verschickt. Der sogenannte Vorläufer war das Programm SNDMSG von Tomlinson, welches aber nur lokal am Computer ermöglichte den anderen Nutzern eine Nachricht zu hinterlassen. Er experimentierte auch mit dem Datenübertragungsprotokoll CYPNet und verband sein Programm SNDMSG und ermöglichte eine Übertragung von Nachrichten zwischen mehreren Rechnern. In diesem Zusammenhang wählte Tomlinson das @, um damit zwischen Nachrichten zu unterscheiden, die an Benutzer desselben Rechners, und solchen, die an Benutzer entfernter Rechner gerichtet waren. Er verwandte das @, um damit zu markieren, dass der Empfänger sich an oder bei (Engl.: "at") einem anderen Host und nicht an dem lokalen Rechner befindet. Die Definition von E-Mail und dem SMTP Protokoll ist nachzulesen im RFC 881. Aufbau einer E-Mail Die E-Mail Adresse besteht aus drei Teilen ([email protected]) Der localpart gibt den Benutzernamen an, das @ Zeichen kennzeichnet den Host und der Host kennzeichnet den Rechner, bzw die Zieladresse im Internet, dass kann z.B. Web.de oder GMX sein. Die E-Mail an sich besteht aus drei Teilen (Envelope, Header und den Body). Der Envelope entsteht aus den nötigsten Daten zum Versand an den Empfänger. Er wird auch nur von den MTA's benutzt zum Versand und weiterleiten, also das Auslesen des Empfängers oder zur Fehlergenerierung, falls die E-Mail unzustellbar ist. Der Header besteht aus allen relevanten und weiteren Daten für Versand und Empfang. In ihm werden z.B. Datum, Empfänger, Absender, usw. eingetragen. Der Body stellt den eigentlichen Inhalt dar, also den Teil den der Versender schreibt und den der Empfänger über sein Mailprogramm liest. Wichtige Header-Elemente To: Cc: Bcc: From: Sender: Received: Subject: Weitere Header-Elemente Date: Reply-To: Message-Id: In-Reply-To: References: Keywords: Return-Path: E-Mail Adressen der primären Empfänger E-Mail Adressen der sekundären Empfänger E-Mail Adressen für blinde Kopien an Dritte Absender der Nachricht eigentlicher Absender, falls Abweichen vom erstgenannten Zeile, die von jedem MTA auf der Route eingefügt wird Kurzer einzeiliger Betreff der Nachricht Datum und Uhrzeit, wann die Nachricht gesendet wurde E-Mail Adresse an die Anwtworten gesendet werden sollen Eindeutige Identifizierung der Nachricht Kennung der Nachricht der diese Antwort gilt Andere relevante Nachrichtenkennungen Vom Benutzer gewählte Schlüsselwörter Kann benutzt werden, um einen beliebigen Pfad zurück zum Sender zu bezeichnen 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: [email protected] (Adam) To: [email protected] (Eva) Internet-Protokolle 1-4 WS 03/04 SMTP – Simple Mail Transfer Protokoll > > > > > > > > Bielefeld, den 23.01.2004 Subject: Beispiel-Mail Date: Mon, 19 Nov 2001 12:47:31 +0100 Reply-To: [email protected] Message-ID: <[email protected]> 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) United Gizmo 180 Main St Boston, MA 02120 Header Mr. Daniel Dummkopf 18 Willow Lane White Plains, NY 10604 Umschlag Briefvergleich From: United Gizmo Address: 180 Main St Location: Boston, MA 02120 Date: Jan. 30, 2004 Subject: Invoice 1081 Body Subject: Invoice 1081 Dear Mr. Dummkopf, Our computer records show that you still have not paid the above invoice of $0,00. Please send us a check for $0,00 promptly. Name: Mr. Daniel Dummkopf Street: 18 Willow Lane State: NY Zip code: 10604 Priority Urgent Encryption: None Dear Mr. Dummkopf, Our computer records show that you still have not paid the above invoice of $0,00. Please send us a check for $0,00 promptly. Yours truely United Gizmo Yours truely United Gizmo Weg der E-Mail User user atata a terminal terminal user agent queue of mail to be sent sender message message transfer transfer agent agent TCP connection TCP Port 25 user at a terminal user agent user mailboxes message transfer agent receiver User Agent Der User Agent ist die Schnittstelle zwischen Mensch und der E-Mail. Er ermöglicht das E-Mail lesen, editieren, verwalten, empfangen und versenden. Bekannte Programme hierfür sind z.B. Outlook, Mozilla, KMail, Pegasus Mail oder Eudora. MTA Message Transfer Agent Der MTA ist ein im Hintergrund agierendes Programm welches die E-Mails vom User Agent annimmt und sie weiterleitet bis zum Empfänger. Das SMTP Protokoll tritt hier in Kraft und wird vom MTA zur Weiterleitung und Zustellung der Mail benutzt. Weiteres hierzu haben wir vorher schon gesehen. Sendmail ist das am meisten verbreitete Programm welches den MTA darsstellt und mit dem SMTP Protokoll arbeitet. Internet-Protokolle 2-4 WS 03/04 SMTP – Simple Mail Transfer Protokoll Bielefeld, den 23.01.2004 SMTP Simple Mail Transfer Protocoll Geschichte des SMTP Um 1982 machte sich Jonathan B. Postel mit ein paar anderen Leuten in einer Network Group an der University of Southern California Gedanken über einen Weg mehr Textmitteilungen über das Internet zu verschicken. und dafür ein allgemeines, einfaches Protokoll zu entwerfen. Im August des Jahres war es dann so weit. Die Geburtsstunde von Simple Mail Transfer Protocol (RFC 821). Bis heute wurde dieses simple Verfahren sehr publik gemacht und es ist immer noch das häufigst gebrauchte Mail Protokoll. Ca. die Hälfte des Traffics im Internet wird durch E-Mails verursacht. Doch es brauchte auch immer weitere Erneuerungen, da es ja der Weiterentwicklung des WWW standhalten musste. Durch SMTP wurde ein sehr kompliziertes und kolplexes E-Mail Protokoll vom Markt verdrängt, was bis heute vollständig in Vergessenheit geraten ist. X400 entwickelt von IBM. Doch durch die vielen Weiterentwicklungen und Sicherheitsvorkehrungen ist SMTP auf dem besten Wege dahin bald ebenso komplex zu sein. Die aktuellste SMTP Version (RFC 2821) umfasst sehr viele Seiten und beinhaltet alle Erweiterungen bis dahin. Sie wurde bis zum April 2001 von J. Klensin unter demselbigen Codenamen entwickelt. Eigenschaften Die mit SMTP versendeten E-mails unterliegen den Standard for the format of ARPA Internet Textmessages. Es baut den header, den envelope und den eigentlichen Textteil aus NVT ASCII Code auf, der aus 7bit besteht, aber in 8bit verpackt versendet wird. Das 8te bit wird auf 0 gesetzt. SMTP kommuniziert mittels TCP über den bekannten Port 25. Funktionweise Punkt-zu-Punkt Auslieferung Punkt-zu-Punkt Auslieferung User File System Client SMTP Commands/Replies and Mail Server File System Die Übermittlung von Nachrichten funktioniert folgendermassen: Ein Client kommuniziert mit einem Server indem ein Kommando gesendet wird und der Empfängert dieses mit einem 3-stelligem Code und ggf. mit einem String zur besseren Lesbarkeit bestätigt. Eine E-Mail setzt sich so durch Punkt-zu-Punkt Ausliefrung durch das gesammte Netz fort und verweilt auch dort, wenn der passende Empfänger nicht zu erreichen ist. Diesen Ablauf nennt man Store-And-Forward. Befehle Es gibt 5 Grundbefehle, die für eine SMTP Session notwendig sind: HELO: Mit diesem Befehl meldet sich der Client beim Server an und gibt seinen Namen (IP Adresse) bekannt. MAIL FROM: Durch diesen Befehl wird die Absender Adresse festgelegt. Es spielt keine Rolle, ob die Adresse auf dem sendendem Client bekannt ist oder nicht. (Dies wird bei SPAM gnadenlos ausgenutzt) RCTP TO: Dieser Befehl legt die Empfänger Adresse fest. DATA: Mittels DATA beginnt die eigentliche Textnachricht, welche meistens durch einen einzelnen Punkt in einer eigenen Zeile beendet wird. QUIT: QUIT ist zur Beendung der SMTP Session. Die nächsten Befehle sind auch nützlich: HELP: Ruft die Hilfe auf, oder Informationen über einen anderen angegebenen Befehl. VRFY: Mit diesem Befehl kann man herausfinden, welcher User sich hinter einer E-mail Adresse verbirgt, bzw welche Adresse zu welchem User gehört. RSET: Durch diesen Befehl wird eine laufende SMTP Verbindung zurückgesetzt. Alle eingegebenen Daten, also Adressen und Nachricht, werden gelöscht. EXPN: Man kann mit diesem Befehl eine E-mail Adresse an eine Mailingliste anhängen. NOOP: Dorch diesen Befehl kann man von seinem Gesprächspartner ein O.K. Anfordern. TURN: Dieser Befehl war dafür vorgesehen, um in einer laufenden SMTP Sitzung Sender und Empfänger zu vertauschen, ohne die Verbindung trennen zu müssen. Wird heutzutage aber nicht mehr benutzt. Internet-Protokolle 3-4 WS 03/04 SMTP – Simple Mail Transfer Protokoll Bielefeld, den 23.01.2004 Rückmeldecodes Die Tabelle spricht für sich selber. Code 200 211 214 220 221 250 251 252 354 421 450 500 501 502 503 504 550 551 553 554 Bedeutung O.K. Rückmeldung System Status oder Hilferückmeldung Hilfe <domain> Service bereit <domain> Service schließt Kommunikationskanal Kommando zulässig, Eingabe akzeptiert User nicht lokal, Weiterleitung aktiviert User nicht zu ermitteln Email Eingabe beginnen <domain> Service nicht erreichbar Mailboxname nicht erreichbar Syntaxfehler, Befehl nicht akzeptiert Syntaxfehler in den Parametern oder Argumenten Befehl nicht implementiert Reihenfolge der Eingabe ist unbekannt Befehlsparameter nicht akzeptabel Mailbox nicht vorhanden User nicht lokal Mailboxname nicht erlaubt Transaktion gescheitert ESMTP Das extended SMTP ist eine Erweiterung des SMTP. Es ermöglicht den Gebrauch von 8bit ASCII Code und somit auch mehr Zeichen in der Nachricht. Für die Anmeldung zu einer ESMTP Sitzung wurde der neue Befehl EHLO implementiert. Der Internet Standard wird im RFC 1435 festgehalten und wurde von J. Klensin entwickelt und im Februar 1998 veröffentlicht. Beispiel Jeder kann über eine telnet Verbindung manuell eine SMTP Sitzung durchführen und so eine E-Mail verschicken. Internet-Protokolle 4-4 WS 03/04