![]() |
Das POP3 Protokoll wird verwendet, um E-Mails von einem Server abzuholen und auf den eigenen Rechner zu übertragen. Dabei ist es auch möglich, die Nachrichten auf dem Server zu löschen. Ein POP3-Server wartet auf eingehende Verbindungen auf dem Port 110. Um E-Mails abzuholen muss man sich mit dem Client auf diesem Port verbinden.
Der Server schickt nach dem Herstellen der Verbindung eine Bestätigungsmeldung. Bestätigungsmeldungen eines POP3-Servers sehen so aus, dass nach einem +OK als Zeichen einer erfolgreichen Aktion eine Meldung ausgegeben wird. Hat man sich verbunden, muss man sich mit einem registrierten Benutzernamen anmelden. Dazu schickt man eine Textnachricht mit dem Inhalt USER <Benutzername> an den Server. Falls der Benutzername akzeptiert wird, wird man nach dem dazugehörigen Passwort gefragt, welches man mit PASS <Passwort> angibt. Nach dieser Anmeldeprozedur, sofern sie erfolgreich war, befindet sich der Server im Transaktions-Modus. Nun hat man verschiedene Möglichkeiten mit dem Server zu interagieren.
Alle Rückmeldungen des Servers beginnen entweder mit +OK oder mit -ERR. +OK steht für einen erfolgreichen Befehl, -ERR für einen fehlgeschlagenen Befehl.
Die wichtigsten POP3 Befehle
| Kommando: | Funktion: |
| USER <username> | meldet den Benutzer am POP-Server an |
| PASS <password> | autorisiert den Benutzer durch Eingabe seines Passwortes |
| STAT | liefert den Status der Mailbox, u. a. die Anzahl der neuen E-Mails |
| LIST LIST <n> |
liefert die Anzahl und die
Größe aller E-Mails liefert die Anzahl und die Größe der n-ten E-Mail |
| RETR <n> | holt die n-te E-Mail vom E-Mail-Server |
| DELE <n> | markiert die n-te E-Mail am E-Mail-Server zum Löschen; gelöscht wird beim Beenden der Verbindung |
| RSET | setzt alle DELE Kommandos zurück: alle Löschmarkierungen werden aufgehoben |
| NOOP | keine Funktion, der Server antwortet mit +OK; wird benutzt um eine Trennung nach einer gewissen Leerlaufzeit zu verhindern |
| QUIT | beendet die aktuelle POP3-Sitzung und löscht alle markierten E-Mails |
Zwischen Befehlswort und Parameter steht immer genau ein Leerzeichen, der ganze Befehl wird durch Drücken der <Return>-Taste abgeschlossen, die als Abschluss des Befehls die beiden Zeichen <CR><LF> anhängt. Jede Antwort des POP3-Servers beginnt mit +OK oder –ERR, worauf weitere Informationen bis zur Steuerzeichensequenz <CR><LF> folgen können. Beim LIST und RETR Kommando gibt es mehrzeilige Antworten. Das Ende einer Antwort wird durch eine Zeile, die nur einen Punkt enthält, signalisiert.
Zustandsdiagramm
Die einzelnen Schritte des
Verbindungsaufbaus lassen sich wiederum in einem
Zustandsdiagramm darstellen:

In der Dokumentation des POP3-Protokolls werden ebenfalls Zustände beschrieben (siehe Zustandsdiagramm):
| Zustand: | Beschreibung: |
| Authorization state | Der Client (Benutzer) muss sich dem Server gegenüber identifizieren |
| Transaction state | Der Client sendet Verwaltungsbefehle an den Server, und dieser verarbeitet sie |
| Update state |
Der Server gibt die Ressourcen frei, löscht insbesondere die mit Delete markierten Nachrichten und beendet die Verbindung |
Der Übergang vom Zustand Update zum Zustand Getrennt erfolgt automatisch, also ohne konkrete Eingabe. Dieses wird im Zustandsdiagramm durch die Eingabe von e , dem leeren Wort, also durch Eingabe von "nichts" dargestellt.
Zeit-Sequenz-Diagramm

(Quelle: Log In Nr. 133,
Berlin 2005, S.37)
1. Beispiel: E-Mails mittels Telnet
abrufen
1. Öffnen der Verbindung
Der POP3-Server von GMX hat den Namen pop.gmx.net und
die IP Adresse 213.165.64.22. Da der POP3-Server wie üblich an Port
110 angebunden ist, kann der folgende Open-Befehl von
Telnet die Verbindung zu diesem Mail-Server herstellen.

2. Anmelden am POP3-Server
Der Account und das Passwort sind hier natürlich fiktiv. Zum
Zeitpunkt der Erstellung dieser Grafik gab es diese E-Mail Adresse mit
dem Passwort 12345678 nicht.

2. Beispiel:
Ein entsprechendes Programm in Delphi
Zur Darstellung dieser Grundfunktionen beschränken wir uns auf E-Mails auf Textbasis, also keine Codierung weiterer Dateien, keine HTML-Mails, keine Attachments usw.

Programmaufbau
Durch Klicken auf die Schaltfläche BtVerbinden wird der Clientsocket initialisiert und eine Verbindung mit dem POP3-Server
aufgebaut. Bestätigt dieser die Verbindung, sendet der Client zur
Autorisierung den Account und das Passwort. Das Programm durchläuft
dabei die Zustände Getrennt -> Verbunden -> Nicht
Authentifiziert -> Bereit. Die Ereignismethode Pop3ClientRead,
die immer dann ausgeführt wird, wenn der Server eine Nachricht schickt,
muss diese nun in Abhängigkeit vom aktuellen Zustand unterschiedlich
auswerten und gegebenenfalls in einen neuen Zustand wechseln.
| procedure
TFrmMain.Pop3ClientRead (Sender: TObject; Socket: TCustomWinSocket); var Antwort: string; begin Antwort := Pop3Client.Socket.ReceiveText; MemStatus.Lines.Add (Antwort); if (Copy (Antwort,1,3) = '+OK') then case zStatus of 0: begin SetzeStatus (1); Pop3Client.Socket.SendText ('USER ' + EdBenutzer.Text + Chr(13) + Chr(10)) end; 1: begin SetzeStatus (2); Pop3Client.Socket.SendText ('PASS ' + EdPasswort.Text + Chr(13) + Chr(10)) end; 2: begin SetzeStatus (3); MemStatus.Lines.Add ('Status: Bereit (Transaction-State)') end; 3: begin // SetzeStatus (cBereit); {bleibe im Status cBereit = 3} end; 4: begin {Keine Nachricht vom Server} end; end // case else if (Copy (Antwort,1,4) = '-ERR') then begin SetzeStatus (5); // Fehler analysieren und entsprechend reagieren end; end; |
Ereignis: Client hat Daten erhalten Nachricht vom Server Auswerten der Nachricht Zustand: Getrennt Zustand: Verbunden Zustand: Nicht authentifiziert Zustand: Bereit Zustand: Update Antwort: Kommando nicht akzeptiert oder ausgeführt Zustand: Fehler |
Durch Verwendung von benannten Konstanten kann diese Simulation des Zustandsdiagramms lesbarer gestaltet werden.
| const
cGetrennt
= 0; {Status
des Protkolls} cVerbunden = 1; cNichtAuthentifiziert = 2; cBereit = 3; cUpdate = 4; cFehler = 5; |