IT-Academy Logo
Sign Up Login Help
Home - Netzwerke - Protokolle - Das SMTP-Protokoll



Das SMTP-Protokoll

Tausende Mails werden jeden Tag im Internet versendet. Nicht alle User wissen was dahinter steht. Hier ein Einlick in das Simple Mail Transfer Protocol welches Emails handelt.


Autor: Martin Puaschitz (onestone)
Datum: 23-01-2002, 19:06:00
Referenzen: RFC 821
Schwierigkeit: Fortgeschrittene
Ansichten: 12371x
Rating: 6.33 (3x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



1.1. Einführung

Das Simple Mail Transfer Protocol (SMTP) dient dem einfachen und verlässlichen Versenden von Nachrichten über verschiedene Netzwerke. Ein wesentlicher Bestandteil des Protokolls ist die Möglichkeit Nachrichten über verschiedene Transporteinrichtungen zu übertragen. Dies wird Interprocess Communication Enviroment (ICPE) genannt und kann ein oder mehrere Netzwerke beinhalten. Es ist wichtig anzumerken, dass eine Nachricht über verschiedene ICPE's übertragen werden kann, sobald Rechner verfügbar sind, welche in beiden Transportsystemen vorhanden sind (vgl. Routing zwischen verschiedenen Netzen).

1.2. Das SMTP-Modell

Der Grundaufbau des Protokolls ist folgender: Sobald ein Server „MAIL“ übermitteln möchte (z.B. durch einen User-Request) baut dieser eine two-way Verbindung auf. Der SMTP-receiver kann die endgültige Destination (dort wo die Mailbox des Empfängers liegt) oder ein Server auf dem Weg dorthin sein. SMTP Kommandos werden vom SMTP-sender generiert und zum SMTP-receiver übertragen, welcher Reaktionen auf die gesendeten Befehle zurück an den SMTP-sender übermittelt.

Sobald der SMTP-receiver „MAIL“ akzeptieren kann, sendet er an den SMTP-sender ein „OK“. Wenn der SMTP-sender diesen Befehl erhält, überträgt er wiederum den Befehl „RCPT“ um den Empfänger der Nachricht zu spezifizieren. Wenn der SMTP-receiver Nachrichten für diesen Empfänger übernehmen kann, sendet er wiederum ein „OK“; falls nicht, sendet er, dass er an diesen User keine Nachrichten zustellen kann und wartet auf neue Adressaten. Der Übertragungsvorgang selbst wird dabei allerdings nicht abgebrochen. Wenn alle Empfänger spezifiziert sind, kann der SMTP-sender die Nachricht als solches übermitteln, welche mit einer speziellen Sequenz  beendet wird.

 
Grafik 5.1

Generell werden die Nachrichten direkt vom SMTP-sender zum SMTP-receiver übertragen, wenn beide Geräte über das gleiche ICPE verbunden sind. Falls dies nicht der Fall ist, müssen ein oder mehrere Verbindungsgeräte als Weiterleitung zwischen den einzelnen ICPE's fungieren (=„MAIL“ relay). Bei dieser Übertragungsart muss den Relay-Geräten allerdings die endgültige Adresse des SMTP-receivers wie der Mailboxname bekannt sein.Das Kommando „MAIL“ ist ein "reverse-path", es spezifiziert, von wem das „MAIL“ gesendet wurde, und hinterlässt eine "return route", damit z.B. Fehlermeldungen an den Absender zurückgesandt werden können. Das Kommando „RCPT“ ist ein "forward-path" und drückt aus, an wen das „MAIL“ ist und sucht sich automatisch den Weg zur Destination (=source route).  Wenn mehrere Empfänger genannt wurden, die alle ihre Mailbox auf einem SMTP-receiver haben, wird vom SMTP-sender lediglich eine Kopie der Nachricht gesandt. Der SMTP-receiver vervielfacht die Nachricht dann lokal und speichert sie in jedem Postfach einmal ab.

SMTP Kommandos sind nicht Case Sensitive. Somit ist es egal, ob Kommandos in Großbuchstaben, Kleinbuchstaben, oder in einer Mischung beider geschrieben werden. Zu beachten ist allerdings, dass dies nicht für die Mailboxnamen (=Usernamen) gilt. Für einige SMTP-receiver ist dieser Unterschied wichtig, da viele Unix Systeme im Gegensatz zu herkömmlichen Windowssystemen Datenstrukturen verarbeiten, welche Case Sensitive sind.Generell werden SMTP-Kommandos und auch deren Rückantworten per ASCII Code erstellt. Wenn ein Standard zur Spezifizierung erstellt werden soll, verwenden die Server „meta-linguistic“ Variablen. Diese könnten z.B. sein: „“ oder „“. Somit ist unter allen Servern eindeutig festgelegt, welche Variablen übermittelt werden. In vielen Fällen werden diese Kommandos auch direkt an den User herangetragen. In vielen Fällen ist „martin@puaschitz.at“ direkt der reverse-path. Die „<“ und „>“ sind hier bei der Adresse implementiert.

1.3. Der SMTP-Vorgang

 1.3.1. „MAIL“

Im Großen und Ganzen besteht eine SMTP „MAIL“ Übertragung aus drei Abschnitten. Zuerst wird die Transaktion mit dem Kommando „MAIL“ gestartet, welche dem SMTP-receiver die Identifikation des SMTP-senders mitteilt. Eine oder mehrere „RCPT“ Kommandos definieren die Empfänger der Nachricht und schlussendlich wird mit „DATA“ der eigentliche Inhalt der Nachricht übertragen, welche mit einer speziellen Sequenz beendet wird.

 Der erste Schritt in diesem Vorgang ist das „MAIL“ Kommando. Der   gibt die Absenderadresse der Nachricht an. 

„MAIL“ FROM:

Dieses Kommando teilt dem SMTP-receiver mit, dass eine neue Nachricht zu übertragen ist und er alle seine Zwischenspeicher löschen soll. Der dient dazu, der Ursprungsadresse etwaige Fehler zurückzumelden. Falls diese Adresse vom SMTP-receiver akzeptiert wird, sendet dieser ein „250 „OK“ “ Signal an den SMTP-sender.

Aber der beinhaltet mehr als nur eine Absender-E-Mail-Adresse. Er ist eine umgekehrte Routingliste. Somit ist es möglich, dass z.B. der dritte Mailserver der die Nachricht weiterleiten möchte und einen Fehler gefunden hat (die beiden davor haben sie einfach in den nächsten Zuständigkeitsbereich weitergeleitet), die Nachricht inklusive der Fehlerursache wieder zurück an den Empfänger schickt. Dabei wird genau auf dem gleichen Weg wieder zurückgesendet.

Der nächste Schritt ist das Definieren der Empfänger durch das „RCPT“ Kommando.

„RCPT“ TO:

Dieses Kommando teilt dem SMTP-receiver mit, an wen die Nachricht zu senden ist. Sobald die Adresse vom SMTP-receiver akzeptiert wurde, schickt dieser an den SMTP-sender "250 „OK“" und speichert die Adressaten in der Liste. Falls der SMTP-receiver die Adresse aber nicht akzeptiert (z.B. auf seinem System existiert ein solcher User nicht) sendet er eine "550 Failure" Antwort. Dieser Vorgang der Empfängerdefinition kann unbegrenzt oft wiederholt werden.

Auch der beinhaltet mehr als nur die Empfänger-E-Mail-Adresse. Der beinhaltet den kompletten „Weg“ über den ein E-Mail gesendet wurde. Jeder Mailserver, der die Nachricht weitergeleitet hat, scheint hier auf. Der dritte und letzte Schritt ist die eigentlichen Nachrichtenübermittlung durch das „DATA“ Kommando.

„DATA“

Sobald der SMTP-receiver dieses Kommando akzeptiert hat, sendet er "354 Intermediate" als Antwort. Ab diesem Zeitpunkt werden alle Zeichen als eigentlicher Nachrichtentext definiert, erst nach einer speziellen Schlussfrequenz die der SMTP-sender zu übermitteln hat, wird die Nachricht gespeichert und der Erhalt mit „250 „OK“ “ bestätigt. Die spezielle Schlussfrequenz womit der „DATA“ Befehl beendet wird, ist eine Zeile, nur mit einem "." am Ende der Nachricht. Zu beachten ist, dass die Mailnachricht den sogenannten „memo-Header“ beinhaltet, welcher wiederum selbst Daten wie Datum, Betreff, Empfänger, Kopie an, Absender enthält. Der „DATA“ Befehl scheitert selten. In wenigen Fällen gibt es Übertragungsschwierigkeiten bei der Nachricht oder es fehlen „RCPT“ Angaben oder der Server ist schlichtweg überlastet. Die Kommandos müssen bei einer „MAIL“ Transaktion unbedingt in dieser Reihenfolge eingegeben werden. Ein Beispiel einer SMTP-sender und SMTP-receiver Kommunikation soll die Verwendung dieser Kommandos noch einmal aufzeigen.

 Beispiel 1: Beispiel einer SMTP-Kommunikation

In diesem Beispiel gehen wir davon aus, dass Bauer von Server Alpha eine Nachricht an Smith, Gruber und Huber beim Server Beta senden möchte. Weiteres nehmen wir an, dass Server Alpha Server Beta direkt kontaktieren kann (=es liegen keine anderen Mailserver zwischen ihnen).

S: „MAIL“ FROM:

R: 250 „OK“

S: „RCPT“ TO:

R: 250 „OK“

S: „RCPT“ TO:

R: 550 No such User here

S: „RCPT“ TO:

R: 250 „OK“

S: „DATA“

R: 354 Start „MAIL“ input; end with .

S: Bla, bla, bla...

S: etc., etc., etc.

S: .

R: 250 „OK“

Das „MAIL“ wurde an Smith und Huber geschickt.

Das Postfach Gruber@Beta.Server existiert nicht.

 

1.3.2. Weiterleitung

Es gibt manchmal Fälle, wo die Empfängeradresse, also der Fehler ausweist, aber der SMTP-receiver die korrekte Adresse weiß. Für diese Fälle werden verschiedene Rückantworten an den SMTP-sender  verwendet, um die Empfängeradressierung zu korrigieren. 

251 Postfach lokal nicht vorhanden; Weiterleitung an

Diese Antwort verweist darauf, dass der User lokal kein Postfach hat, dass aber aufgrund der User- und Hostadressierung eine Zustellung möglich ist. Aus diesem Grund sendet der SMTP-receiver die Nachricht an den Mailserver, der den angegeben Host verwaltet. Dort wird abermals überprüft, ob der User vorhanden ist. Der SMTP-receiver übernimmt die Verantwortung, dass die Nachricht zuverlässig ankommt.

551 Postfach lokal nicht vorhanden; bitte versuchen

Diese Antwort verweist darauf, dass der SMTP-receiver das Postfach lokal nicht findet - allerdings einen Vorschlag zu einem anderen Postfach macht. Die Mailserver die merken, dass die Nachricht zu einem anderen SMTP-receiver gehören, verweisen auf diesen.

 Beispiel 2: Weiterleitung

 

      S: „RCPT“ TO:

      R: 251 User not local; will forward to

       Oder

       S: „RCPT“ TO:

      R: 551 User not local; please try

 

1.3.3. Prüfung und Ausdehnung

SMTP bietet auch zusätzliche Befehle an, womit man einen Mailboxnamen oder einen Mailinglistnamen überprüfen kann. Für diese Optionen werden die Befehle VRFY und EXPN verwendet. VRFY wird in Zusammenhang mit einem Usernamen verwendet woraus man meist den vollen Namen des Users und die korrekte E-Mailadresse. Das Kommando EXPN wird zum Überprüfen einer Mailingliste verwendet und gibt den vollen Namen der User und deren E-Mailadressen aus, welche bei dieser Liste angemeldet sind. Falls beide Befehle falsch angewendet werden (z.B. YRFY Mailingliste oder EXPN User1), wird folgendes ausgegeben: "550 That is a mailing list, not a User" oder "550 That is a User name, not a mailing list". Falls bei einem Überprüfen (z.B. eines Usernamen) die Eingabe zweideutig ist (also, wenn der Username Smith überprüft werden soll, aber zwei verschiedene User namens Smith sich auf dem System befinden), erfolgt folgende Antwort: "553 User ambiguous".

Beispiel 3 & 4 verdeutlicht die oben genannten Befehle.

 Beispiel 3: Überprüfen eines User Namens

       S: VRFY Smith

      R: 250 Alex Smith

       Oder

       S: VRFY Smith

      R: 251 User not local; will forward to

      Oder

       S: VRFY Grubaer

      R: 550 String does not match anything.

          Or

       S: VRFY Gruber

      R: 551 User not local; please try

       Or

       S: VRFY Huber

      R: 553 User ambiguous.

 

Beispiel 4: Überprüfen einer Mailingliste.

 

      S: EXPN Mailingliste

      R: 250-Bauer Josef

      R: 250-Alex Smith

      R: 250-Elisabeth Gruber

      R: 250-Christian Huber

       Bzw.

       S: EXPN Geheim E-Mailliste

      R: 550 Access Denied to You.

 

1.3.4. „Mail-Routing” 

Vorab ist ein wichtiger Unterschied anzumerken. Eine "E-Mailadresse" ist eine absolute Adresse. Eine "Route" ist die Information, auf welchem Weg man die E-Mailadresse erreicht. Sobald der SMTP-receiver eine Nachricht erhält, welche nur über verschiedene andere SMTP-Server zur Mailbox zu senden ist, löscht er seine eigene Identifikation aus dem und schreibt diese an den Anfang des . Danach wird der SMTP-receiver zu einem SMTP-sender, baut eine Verbindung zum nächsten SMTP-Server auf (die Adresse kennt er aus dem nächsten Eintrag im ) und sendet die Nachricht weiter. 

Diese Methode wird so oft wiederholt, bis die Nachricht in der Mailbox des/der Empfänger/s landet. Falls aus irgendeinem Grund ein SMTP-sender bemerkt, dass die nächste Adresse im ungültig ist, generiert er eine Fehlermeldung und sendet sie anhand des an den Verfasser der Nachricht zurück.

1.4. SMTP-Kommandos

1.4.1. HELLO (HELO)

Dieses Kommando dient der Identifizierung des SMTP-senders beim SMTP-receiver. Der SMTP-sender gibt hier seinen Domainnamen an ("Helo yahoo.de"). Als Antwort sendet der SMTP-receiver seinen Domainnamen.Dieses Kommando und die Antwort darauf signalisiert von beiden Seiten her, dass SMTP-sender sowie SMTP-receiver bereit für eine Nachrichtenübertragung sind.

 

1.4.2. „MAIL“ („MAIL“)

 „MAIL“ wird dazu verwendet, um die Datentransaktion zu beginnen, wo eine Nachricht zu einer oder mehreren Mailboxen übertragen wird. Der Parameter von diesem Befehl beinhaltet die Senderadresse, welcher zugleich der ist.

 

1.4.3. RECIPIENT („RCPT“)

Der Befehl „RCPT“ definiert den oder die Empfänger der Nachricht; mehrere Empfänger werden einfach durch vermehrtes Verwenden dieses Befehls definiert.  Es können allerdings maximal 100 Empfänger spezifiziert werden (Fehler 552). Mit dem Befehl wird gleichzeitig der definiert. Sobald die Nachricht weitergeleitet wird, muss sich der SMTP-receiver (welcher die Nachricht weiterleitet) vom Anfang der Liste streichen und sich an den Beginn der Liste setzen. Nur so können Fehlermeldungen oder andere Nachrichten an den Verfasser zurückgesandt werden.

 1.4.4. „DATA“ („DATA“)

Der Parameter dieses Befehls ist die eigentliche Nachricht, die übermittelt werden soll. Jedes der 128 ACSII Schriftzeichen kann verwendet werden, solange die Nachricht nicht mit einer speziellen Schlusssequenz beendet wurde. Um die Nachricht zu beenden, ist eine einfache Zeile mit einem „.“ notwendig, dies ist die Zeichensequenz ".".

 

1.4.5. SEND (SEND)

 Dieser Befehl startet die Nachrichtenübertragung als solche. Der Parameter beinhaltet den und ist erfolgreich, sobald die Nachricht zu der/den Mailbox/en übertragen wurde.

 

1.4.6. SEND OR „MAIL“ (SOML)

Dieser Befehl startet die Nachrichtenübertragung als solche und ist dem "SEND" Befehl sehr ähnlich. Allerdings wird die Nachricht direkt auf den Bildschirm des Users übertragen (SENDING), falls dieser mit seinem SMTP-Server verbunden ist und diese Art der Nachrichtenübertragung billigt. Sobald die direkte Übertragung an den Rechner nicht möglich ist, wird die Nachricht in der Mailbox des Users abgelegt (MAILING).

1.4.7. SEND AND „MAIL“ (SAML)

Dieser Befehl startet die Nachrichtenübertragung als solche und ist dem "SOML" Befehl sehr ähnlich. Allerdings wird versucht die Nachricht direkt an den Rechner des Users zu senden (SENDING) -UND- an seine Mailbox (MAILING). Egal ob die direkte Verbindung klappt, wird die Nachricht im Postfach abgelegt.

 

1.4.8. RESET (RSET)

Dieses Kommando terminiert alle bestehenden „MAIL“ Transaktionen. Jegliche Empfänger, Sender und Nachrichten werden gelöscht und alle Zwischenspeicher geleert. Der SMTP-receiver sendet bei Erfolg eine „OK“.

 

1.4.9.VERIFY (VRFY)

Dient zur Überprüfung eines Users. Der Parameter definiert den Usernamen; wenn dieser dem SMTP-Server bekannt ist, gibt er den vollständigen Namen sowie die korrekte E-Mailadresse aus.

 

1.4.10. EXPAND (EXPN)

Gleiche Vorgangsweise wie bei VRFY. Allerdings wird mit diesem Befehl das Vorhandensein einer Mailingliste herausgefunden; falls hier dem System die Liste bekannt ist, gibt er alle Usernamen sowie deren volle Namen und deren E-Mailadressen aus, die auf der zu überprüfenden Liste vorhanden sind.

 

1.4.11. HELP (HELP)

Ein gängiger Befehl, welcher den SMTP-receiver bittet hilfestellende Informationen zu senden. Der Befehl kann auch in Kombination mit anderen Befehlen verwendet werden und spezifiziertere Informationen zu erhalten.

 

1.4.12. NOOP (NOOP)

Dieser Befehl bewirkt überhaupt keinen Effekt. Er spezifiziert, dass keine Handlung ausgeführt wird und wird vom SMTP-receiver mit einem „OK“ beantwortet.

 

1.4.13. QUIT (QUIT)

Mit diesem Kommando wird der SMTP-receiver aufgefordert ein „OK“ zu senden und anschließend die Verbindung zu schließen. Generell sollte eine Verbindung zwischen SMTP-sender und SMTP-receiver ohne QUIT-Befehl nicht getrennt werden. Auch bei einem Fehler von einer Seite sollte immer die Verbindung aufrecht erhalten bleiben. Sobald allerdings dennoch ein frühzeitiger Abbruch auftritt, hat sich der SMTP-receiver so zu verhalten, als hätte er den Befehl RSET übermitteln bekommen. Alle laufenden Übertragungen werden abgebrochen, alle bereits geschehenen Übertragungen werden nicht rückgängig gemacht.

 1.4.14. TURN (TURN)

 Bei diesem Befehl tauschen SMTP-sender und SMTP-receiver ihre Rollen. Falls der SMTP-receiver dies verweigert, sendet er dem SMTP-sender eine 502 Antwort (=Befehl nicht realisiert).

 Beispiel 5:

 

            HELO

             „MAIL“ FROM:

             „RCPT“ TO:

             „DATA“

             RSET

             SEND FROM:

             SOML FROM:

             SAML FROM:

             VRFY

             EXPN

             HELP [ ]

             NOOP

             QUIT

             TURN  

1.5. SMTP-Anwortmöglichkeiten

         211 System Status, oder: System-Hilfe bereit

         214 Hilfe Nachricht

         220 Service bereit

         221 Service schließt Transmissionskanal

         250 Angefragte Aktion okay und ausgeführt

         251 User lokal nicht vorhanden; ich leite es weiter an

         354 Mit der Nachrichteneingabe beginnen, Schlusssequenz: .

         421 Service nicht verfügbar. Übertragungskanal geschlossen.

         450 Angefragte Aktion nicht durchführbar.

         451 Angefragte Aktion nicht durchführbar. Lokaler Fehler

         452 Angefragte Aktion nicht durchführbar. Zu wenige Ressourcen.

         500 Syntax Fehler, Befehl unbekannt.

         501 Syntax Fehler bei den Parametern.

         502 Befehl nicht realisiert.

         503 Falsche Seque

[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06245
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1151
Comments: 0