|
|
Zeile 47: |
Zeile 47: |
| <div class="mw-collapsible-content">'''Antwort5'''</div> | | <div class="mw-collapsible-content">'''Antwort5'''</div> |
| </div> | | </div> |
|
| |
| = TMP =
| |
| {| class="wikitable float-right" style="width:22em;"
| |
| |-
| |
| !colspan="2" style="background:#C0C0FF; font-size:larger"| SMTP (Simple Mail Transfer Protocol)
| |
| |-
| |
| ! Familie:
| |
| | [[Internetprotokollfamilie]]
| |
| |-
| |
| ! Einsatzgebiet:
| |
| | Einspeisung von [[E-Mail]] (Mail Submission), Abholung von E-Mails eventuell über mehrere Stationen (Mail Transfer)
| |
| |-
| |
| ! Ports:
| |
| | 25/TCP (Standard-MTA)<br />
| |
| 465/TCP (nur mit [[SMTPS|SSL/TLS]])<br />
| |
| 587/TCP (nur als MSA/für [[E-Mail-Programm|Mail-Clients]], häufig mit [[STARTTLS]])
| |
| |-
| |
| |align="center" colspan="2" |
| |
| {{Netzwerk-TCP-IP-Anwendungsprotokoll|SMTP|}}
| |
| |-
| |
| ! Standard:
| |
| | RFC 5321
| |
| |}
| |
| Das '''Simple Mail Transfer Protocol''' ('''SMTP''', auf Deutsch etwa ''Einfaches E-Mail-Transportprotokoll'') ist ein [[Netzwerkprotokoll|Protokoll]] der [[Internetprotokollfamilie]], das zum Austausch von [[E-Mail]]s in [[Rechnernetz|Computernetzen]] dient. Es wird dabei vorrangig zum Einspeisen und zum Weiterleiten von E-Mails verwendet. Zum Abholen von Nachrichten kommen andere, spezialisierte Protokolle wie [[Post Office Protocol|POP3]] oder [[Internet Message Access Protocol|IMAP]] zum Einsatz. SMTP-Server nehmen traditionell Verbindungen auf [[Port (Protokoll)|Port]] 25 („smtp“) entgegen.
| |
|
| |
| Neuere Server benutzen auch Port 587, um ausschließlich von authentifizierten Benutzern/Servern Mails entgegenzunehmen („[[Mail Submission Agent]]“), wobei gewöhnlich mittels [[STARTTLS]] die bestehende Klartext-Verbindung zu einer verschlüsselten Verbindung umgeschaltet wird, um die Authentifizierungsdaten zu schützen. Durch eine klare Trennung eigener und fremder Benutzer sollen Konfigurationsprobleme und damit [[Spam]] vermieden werden (→ [[SMTP-Relay-Server]]). Außerdem kann aufgrund der unterschiedlichen Ports eine einfache [[Firewall]]-Regel verwendet werden, um unkontrolliert abgehende Spamnachrichten aus dem eigenen Netzwerk zu blockieren, ohne dass Verbindungen zu externen SMTP-Servern vollständig ausgeschlossen werden.
| |
|
| |
| == Geschichte ==
| |
| Vorgänger von SMTP waren im [[Arpanet]] das [[Mail Box Protocol]] (RFC 278) vom Juli 1971 und [[FTP Mail]] (RFC 458) vom Februar 1973. Mit der Entstehung des Internets aus dem ARPANET um 1980 schlug [[Jon Postel]] vor, die Abhängigkeit des E-Mail-Verkehrs vom FTP-Dienst abzukoppeln (RFC 772), und veröffentlichte 1982 SMTP unter RFC 821. In den frühen 1980er Jahren wurde es eine Ergänzung zu [[Unix to Unix Copy|UUCP]], das vor allem für den E-Mail-Verkehr periodisch verbundener Rechner genutzt wurde. SMTP wurde der Standard für Rechner, die ständig am Netz waren.
| |
|
| |
| Einer der ersten [[Mail Transfer Agent]]s, der SMTP implementierte und weitere Verbreitung erlangte, war [[sendmail]]. Inzwischen gibt es unzählige Programme, die SMTP als Client oder Server unterstützen, darunter weit verbreitete SMTP-Server wie [[Postfix (Mail Transfer Agent)|Postfix]], [[qmail]], [[exim]] usw. Da viele Programmierframeworks wie [[.NET]] oder [[Java (Programmiersprache)|Java]] bereits SMTP-Klassen eingebaut haben, ist die Entwicklung auch nur noch mit geringem Aufwand verbunden.
| |
|
| |
| SMTP begann als reines [[American Standard Code for Information Interchange|ASCII]]-Protokoll, so dass damit keine Binärdateien übertragen werden konnten. Erst Standards wie MIME ([[Multipurpose Internet Mail Extensions]]) schufen diese Möglichkeit durch ein Kodieren der Binärdateien in ASCII.
| |
|
| |
| == Verfahren ==
| |
| Die Abwicklung des SMTP-Verfahrens wird meist für den Anwender unsichtbar durch sein Mailprogramm vorgenommen, den sogenannten [[E-Mail-Programm|Mail User Agent]] (MUA). Dieses Programm verbindet sich mit einem [[Mailserver|SMTP-Server]], dem [[Mail Submission Agent]] (MSA), der die Mail über ggf. weitere SMTP-Server, sogenannte [[Mail Transfer Agent]]s (MTA), zum Ziel transportiert. Da SMTP als Protokoll zum Transport von lokal erstellten Mails zwischen Servern konzipiert wurde, übernahm dabei ursprünglich ein einzelner Server auf Port 25 („smtp“) die Rolle von MSA und MTA. Der dedizierte Port 587 („submission“) wurde erst 1998 eingeführt, um den unterschiedlichen Anforderungen beider Aufgaben gerecht zu werden: Ein MSA akzeptiert ausdrücklich nur Nachrichten berechtigter Nutzer/Server und bereitet sie vor der Einspeisung in das Mailsystem gegebenenfalls standardkonform auf. Wegen der nahen Verwandtschaft beider Dienste wird die Funktionalität von MSA und MTA üblicherweise immer noch von nur einem Programm, das dann auf beiden Ports Verbindungen annimmt, bereitgestellt.
| |
|
| |
| == Protokoll ==
| |
| Wie bei allen textbasierten Protokollen, die TCP verwenden, kann mit Hilfe eines [[Telnet]]-Client eine E-Mail per SMTP auch „von Hand“ verschickt werden. Dabei sind, wie auch bei anderen Verfahren, Absender- und Empfängeradresse frei wählbar. Aus diesem Grund ist die [[E-Mail#Authentizität, Datenschutz und Integrität|Verlässlichkeit der Absenderangabe]] einer E-Mail nicht gegeben. Grundsätzlich können sich die Adressen im <code>MAIL FROM</code>- und <code>RCPT TO</code>-Kommando (sog. <code>[[Envelope Sender|Envelope-From]]</code> bzw. <code>Envelope-To</code>) von den Adressen im <code>From:</code>- und <code>To:</code>-Mailheader unterscheiden.
| |
|
| |
| Der Server antwortet auf Kontaktaufnahmen mit dreistelligen Statusnummern und kurzen Texten, die variieren oder auch entfallen können. Der Client muss mit festgelegten Zeichenfolgen auf die Statusmeldungen reagieren. Eine einfache SMTP-Sitzung zum Versenden einer E-Mail kann beispielsweise folgendermaßen aussehen:
| |
|
| |
| {| style="border-style:none; padding:5px;"
| |
| !style="width:12em;"| Client
| |
| !style="width:12em;"| Server
| |
| ! Erläuterung
| |
| |-
| |
| |style="background:#C0C0FF; font-family:monospace;"|telnet mail.example.com 25
| |
| |style="background:#C0C0FF; font-family:monospace;"|
| |
| |style="background:#F0F0F0"|Client ruft Server
| |
| |-
| |
| |style="background:#FFFFB0; font-family:monospace;"|
| |
| |style="border-style:none;background:#FFFFB0; font-family:monospace;"|220 service ready
| |
| |style="background:#F0F0F0"|Server meldet sich bereit
| |
| |-
| |
| |style="background:#C0C0FF; font-family:monospace;"|HELO foobar.example.net
| |
| |style="background:#C0C0FF; font-family:monospace;"|
| |
| |style="background:#F0F0F0"|Client nennt seinen Namen
| |
| |-
| |
| |style="background:#FFFFB0; font-family:monospace;"|
| |
| |style="background:#FFFFB0; font-family:monospace;"|250 OK
| |
| |style="background:#F0F0F0"|Server bestätigt
| |
| |-
| |
| |style="background:#C0C0FF; font-family:monospace;"|MAIL FROM:<sender@example.org>
| |
| |style="background:#C0C0FF; font-family:monospace;"|
| |
| |style="background:#F0F0F0"|Client nennt Absenderadresse
| |
| |-
| |
| |style="background:#FFFFB0; font-family:monospace;"|
| |
| |style="background:#FFFFB0; font-family:monospace;"|250 OK
| |
| |style="background:#F0F0F0"|Server bestätigt
| |
| |-
| |
| |style="background:#C0C0FF; font-family:monospace;"|RCPT TO:<receiver@example.com>
| |
| |style="background:#C0C0FF; font-family:monospace;"|
| |
| |style="background:#F0F0F0"|Client nennt Empfängeradresse
| |
| |-
| |
| |style="background:#FFFFB0; font-family:monospace;"|
| |
| |style="background:#FFFFB0; font-family:monospace;"|250 OK
| |
| |style="background:#F0F0F0"|Server bestätigt
| |
| |-
| |
| |style="background:#C0C0FF; font-family:monospace;"|DATA
| |
| |style="background:#C0C0FF; font-family:monospace;"|
| |
| |style="background:#F0F0F0"|Client kündigt Inhalt der E-Mail an
| |
| |-
| |
| |style="background:#FFFFB0; font-family:monospace;"|
| |
| |style="background:#FFFFB0; font-family:monospace;"|354 start mail input
| |
| |style="background:#F0F0F0"|Server bereit für diesen längeren Vorgang
| |
| |-
| |
| |style="background:#C0C0FF; font-family:monospace;"|From: <sender@example.org><br />To: <receiver@example.com><br />Subject: Testmail<br />Date: Thu, 26 Oct 2006 13:10:50 +0200<br /><br />Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.<br />.
| |
| |style="background:#C0C0FF; font-family:monospace;"|
| |
| |style="background:#F0F0F0"|Client sendet Inhalt der E-Mail und markiert das Ende durch eine Zeile, die nur einen Punkt enthält.<br />(Zwischen Header und Textkörper muss eine Leerzeile vorhanden sein, sonst wird beim Empfänger kein Textkörper angezeigt.)
| |
| |-
| |
| |style="background:#FFFFB0; font-family:monospace;"|
| |
| |style="background:#FFFFB0; font-family:monospace;"|250 OK
| |
| |style="background:#F0F0F0"|Server bestätigt und übernimmt die Verantwortung für die Nachricht
| |
| |-
| |
| |style="background:#C0C0FF; font-family:monospace;"|QUIT
| |
| |style="background:#C0C0FF; font-family:monospace;"|
| |
| |style="background:#F0F0F0"|Client fordert Verbindungstrennung an
| |
| |-
| |
| |style="background:#FFFFB0; font-family:monospace;"|
| |
| |style="background:#FFFFB0; font-family:monospace;"|221 closing channel
| |
| |style="background:#F0F0F0"|Server kündigt Trennung an
| |
| |}
| |
|
| |
| == Status-Codes ==
| |
| Das SMTP-Protokoll sieht zum Status der Kommunikation zwischen Mailserver und Mailclient folgende Statuscodes vor:
| |
|
| |
| ; 1XX
| |
| : Mailserver hat die Anforderung akzeptiert, ist aber selbst noch nicht tätig geworden. Eine Bestätigungsmeldung ist erforderlich.
| |
| ; 2XX
| |
| : Mailserver hat die Anforderung erfolgreich ohne Fehler ausgeführt.
| |
| ; 3XX
| |
| : Mailserver hat die Anforderung verstanden, benötigt aber zur Verarbeitung weitere Informationen.
| |
| ; 4XX
| |
| : Mailserver hat einen temporären Fehler festgestellt. Wenn die Anforderung ohne jegliche Änderung wiederholt wird, kann die Verarbeitung möglicherweise abgeschlossen werden.
| |
| ; 5XX
| |
| : Mailserver hat einen fatalen Fehler festgestellt. Die Anforderung kann nicht verarbeitet werden.
| |
|
| |
| == Verbotene Zeichenfolge „E-Mail-Ende-Indikator“ ==
| |
| Die Zeichenfolge „<[[Zeilenumbruch#ASCII_und_EBCDIC|CRLF]]>.<CRLF>“ wird vom empfangenden Server als E-Mail-Ende-Indikator interpretiert, sie kann daher vom User nicht versendet werden. Die Überprüfungsregel einer empfangenen Mail-Textzeile lautet nach RFC 821 Abschnitt 4.5.2. im Detail: Wenn die Zeile aus einem einzelnen Punkt besteht, wird sie als E-Mail-Ende-Indikator behandelt. Wenn das erste Zeichen ein Punkt ist und es andere Zeichen in der Zeile gibt, wird das erste Zeichen gelöscht.
| |
|
| |
| == Extended SMTP ==
| |
| Als SMTP [[1982]] in RFC 821 definiert wurde, gab es eine überschaubare Anzahl von Hosts im [[Internet]]. Da die Verbindungen langsam und instabil waren, wurde auf Zuverlässigkeit großer Wert gelegt. [[Authentifizierung]] war nicht vorgesehen, somit war jeder Mailserver ein [[SMTP-Relay-Server|offenes Mail-Relay]], über den Mails an jeden anderen Knoten weitergeleitet werden konnten. Mit der wachsenden Popularität des Internets entstand so das Problem des [[Spam]].
| |
|
| |
| 1995 wurde mit ''Extended SMTP'' (ESMTP) in RFC 1869 das Protokoll erweitert (zuvor 1993 in RFC 1425 und 1994 in RFC 1651). Diese Erweiterung erlaubt, dass über ein modulares Konzept weitere Befehle ''(SMTP-Verben)'' definiert werden. Wenn der Client sich beim Server nicht – wie oben gezeigt – mit <code>HELO</code>, sondern mit <code>EHLO</code> ''(Extended HELO)'' meldet, teilt der Server ihm im Gegenzug mit, welche Erweiterungen des Protokolls er unterstützt. Gängige Beispiele hierfür sind [[STARTTLS]] ''(Secure SMTP over [[Transport Layer Security|TLS]])'', 8BITMIME ''(8bit-[[Multipurpose Internet Mail Extensions|MIMEtransport]])'', DSN ''([[Delivery Status Notification]]s)'' und AUTH ''([[SMTP-Auth]])''.
| |
|
| |
| Zur Verschlüsselung über SSL/TLS wird [[SMTPS]] empfohlen, welches einen eigenen TCP-Port benötigt. Hierfür wurde TCP-Port 465 standardisiert.<ref>{{Internetquelle |autor=Chris Newman, Keith Moore |url=https://tools.ietf.org/html/rfc8314.html |titel=Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access |zugriff=2019-02-11 |sprache=en}}</ref> Alternativ kann das STARTTLS-Kommando verwendet werden. Es läuft auf dem gleichen TCP-Port wie unverschlüsseltes SMTP.
| |
|
| |
| == Sicherheitskonzepte ==
| |
| {| class="wikitable toptextcells"
| |
| ! Merkmal
| |
| ! Definition
| |
| ! Konzepte
| |
| |-
| |
| | [[Autorisierung|Zugangskontrolle]]
| |
| | Nur zugelassene Benutzer dürfen den Mailserver benutzen
| |
| | [[SMTP-After-POP]], [[SMTP-Auth]], [[SMTPS]]
| |
| |-
| |
| | [[Authentifizierung|Echtheitsprüfung]]
| |
| | Eine eindeutige Zuordnung Absender↔Nachricht ist möglich
| |
| | [[Pretty Good Privacy|PGP]], [[S/MIME]] (siehe [[Elektronische Signatur]]), [[Sender Policy Framework|SPF]], [[DomainKeys]]
| |
| |-
| |
| | [[Integrität (Informationssicherheit)|Integrität]]
| |
| | Die Nachricht kann auf dem Weg durchs Netz nicht unbemerkt verändert werden
| |
| | [[Pretty Good Privacy|PGP]], [[S/MIME]]<!-- DomainKeys könnte man hier auch nennen, allerdings mit der Einschränkung auf die „Serverseite“, es ist ja keine richtige Ende-zu-Ende-Lösung (der ISP könnte drin rumpfuschen). -->
| |
| |-
| |
| | [[Vertraulichkeit]]
| |
| | Die Nachricht wird nicht im Klartext übertragen, sondern verschlüsselt
| |
| | [[Pretty Good Privacy|PGP]], [[S/MIME]], [[Transport Layer Security|SSL]]/[[Transport Layer Security|TLS]]
| |
| |}
| |
|
| |
| == Software ==
| |
| Einige der am häufigsten verwendeten SMTP-Server sind [[Sendmail]], [[Exim]], [[Postfix (Mail Transfer Agent)|Postfix]], [[qmail]], [[Microsoft Exchange Server|MS Exchange]], [[GroupWise]], [[Kerio Connect]], [[Mercury MTS]] und [[IBM Notes|IBM Lotus Domino]].
| |
|
| |
| == Verwandte Requests for Comments (RFCs) ==
| |
| {{Siehe auch|Request for Comments}}
| |
| * RFC 821 (SIMPLE MAIL TRANSFER PROTOCOL)
| |
| * RFC 2821 (SIMPLE MAIL TRANSFER PROTOCOL)
| |
| * RFC 1845 (SMTP Service Extension for Checkpoint/Restart)
| |
| * RFC 1870 (SMTP Service Extension for Message Size Declaration)
| |
| * RFC 1869 (SMTP Service Extensions)
| |
| * RFC 1894 (An Extensible Message Format for Delivery Status Notifications)
| |
| * RFC 1985 (SMTP Service Extension for Remote Message Queue Starting – ETRN)
| |
| * RFC 2034 (SMTP Service Extension for Returning Enhanced Error Codes)
| |
| * RFC 2047 (Message Header Extensions for Non-ASCII Text)
| |
| * RFC 2487 (SMTP Service Extension for Secure SMTP over TLS)
| |
| * RFC 2505 (Anti-Spam Recommendations for SMTP MTAs)
| |
| * RFC 2554 (SMTP Service Extension for Authentication)
| |
| * RFC 2606 (Reserved Top Level DNS Names)
| |
| * RFC 2852 (Deliver By SMTP Service Extension)
| |
| * RFC 2920 (SMTP Service Extension for Command Pipelining)
| |
| * RFC 3030 (SMTP Service Extensions for Transmission of Large and Binary MIME Messages)
| |
| * RFC 3207 (SMTP Service Extension for Secure SMTP over Transport Layer Security)
| |
| * RFC 3461 (SMTP Service Extension for Delivery Status Notifications (DSNs))
| |
| * RFC 3463 (Enhanced Status Codes for SMTP)
| |
| * RFC 3464 (An Extensible Message Format for Delivery Status Notifications)
| |
| * RFC 3700 (Internet Official Protocol Standards)
| |
| * RFC 3974 (SMTP Operational Experience in Mixed IPv4/v6 Environments)
| |
| * RFC 4409 (Message Submission for Mail, führt Port 587 für Message Submission ein)
| |
| * RFC 5321 (Simple Mail Transfer Protocol)
| |
| * RFC 5322 (Internet Message Format)
| |
| * RFC 5336 (SMTP Extension for Internationalized Email Addresses)
| |
| * RFC 6409 (Message Submission for Mail, Internet Standard, löst RFC 4409 ab)
| |
| * RFC 6152 (SMTP Service Extension for 8bit-MIMEtransport)
| |
| * RFC 7505 (A "Null MX" No Service Resource Record for Domains That Accept No Mail)
| |
| *RFC 8314 (Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access)
| |
|
| |
| == Siehe auch ==
| |
| * [[Mail Transfer Agent]]
| |
| * [[Mailserver]]
| |
| * [[Bounce Message]] (Fehlermeldung vom Mailserver)
| |
| * [[SMTP-Auth]]entifizierung
| |
| * [[On-Demand Mail Relay]] (ODMR)
| |
|
| |
| == Weblinks ==
| |
| * [http://www.kubieziel.de/computer/email.html Eine Erklärung zum Transport von E-Mails]
| |
| * [http://www.elektronik-kompendium.de/sites/net/0903081.htm SMTP – Befehle und Statuscodes mit Erklärung]
| |
| * [http://www.daniel-rehbein.de/rfc2821.html Warum Absenderadressen nicht vertrauenswürdig sind]
| |
|
| |
| == Einzelnachweise ==
| |
| <references />
| |
| [[Category:E-Mail:Protokolle]]
| |