POP, genauer POP 3, ist die bisher noch gebräuchlichste Methode, um E-Mails von einem Provider zu empfangen, wenn der eigene Rechner nicht ständig mit dem Internet verbunden ist. Das Prinzip und der Funktionsumfang von POP sind einfach:
- Die für den Empfänger bestimmten E-Mails landen beim Provider im Spool-Verzeichnis und müssen dort vom Empfänger abgeholt werden.
- Der Provider stellt einen POP-Server zur Verfügung, welcher die Schnittstelle des POP-Clients auf dem Empfänger-Rechner darstellt. Der lokale POP-Client kommuniziert mit dem POP-Server beim Provider. "Uber ihn werden die vorhandenen E-Mails angeboten.
Eine Kommunikation zwischen dem POP-Client und dem POP-Server beim Provider kann schematisch beispielsweise so aussehen :
Client: Hast Du neue E-Mails für mich?
Server: Ja, insgesamt fünf Stück!
Client: Liste mir die Absender auf!
Server: Meier, Mueller, Huber, Schulze
Client: Zeige die E-Mails an!
Server: ((Zeigt E-Mails an))
Client: ((Speichert E-Mails ab))
Client: Lösche alle angezeigten E-Mails
Server: ((Löscht alle angezeigten E-Mails))
Wenn ein Client über POP3 Nachrichten abrufen möchte, baut er eine TCP-Verbindung über Port 110 auf. Ist die Verbindung zustande gekommen, sendet der Server eine Begrüßungsmeldung. Die weitere Kommunikation zwischen beiden Rechnern erfolgt über Kommandos, die aus drei oder vier Zeichen langen Wörtern (mit einem oder mehreren Argumenten mit bis zu je 40 Zeichen) bestehen. Antworten enthalten einen Status-Indikator und ein Statuswort sowie optionale Informationen. Es gibt zwei Status-Indikatoren:
- Positiv: +OK
- Negativ: -ERR
Viele POP3-Server haben zusätzlich einen Inaktivitäts-Timer. Laut Spezifikation muß dieser auf mindestens zehn Minuten eingestellt sein. Jedes Kommando des Clients setzt den Timer zurück. Ist der Timer abgelaufen, wird die TCP-Verbindung beendet, ohne in den "Update State" zu wechseln - eventuelle Änderungen werden auf dem Server nicht gespeichert.
Nachdem der POP3-Client eine Verbindung zum Server aufgebaut hat, sendet dieser eine einzeilige Begrüßungsmeldung beliebigenInhalts, z. B.:
Server: +OK POPEL-3 server readyDabei handelt es sich bereits um eine Antwort des Servers, daher beginnt die Meldung immer mit einer positiven Bestätigung (+OK). Die Verbindung befindet sich nun im Zustand "Authorization". Der Client muß sich jetzt gegenüber dem Server identifizieren. Dies erfolgt über die beiden Kommandos USER und PASS.
| Kommandos im "Authorization State" | ||
|---|---|---|
| Kommando | Argument | Beschreibung |
| USER | Name | Das Argument identifiziert eine Mailbox. |
| PASS | String | Der String enthält ein Mailbox-spezifisches Passwort. |
| QUIT | - | Beendet die Verbindung. |
Die Kombination aus den Kommandos USER und PASS ist am gebräuchlichsten. Dabei werden die jeweiligen Parameter im Klartext an den Server gesendet. Ein Beispiel: Der Username für das Postfach soll "plate", das Passwort "XYZ1230" heißen. In diesem Fall wird folgender Authentifizierungsdialog ablaufen:
Client: USER plate Server: +OK name is a valid mailbox Client: PASS YXZ1230 Server: +OK platesÝs maildrop has 9 messages (1600 octets)Bei falschen Angaben verweigert der Server den Zugang und gibt eine Fehlermeldung aus. Mögliche Dialoge bei falschem Usernamen:
Client: USER plato Server: -ERR sorry, no mailbox for plato hereOder bei einem falschen Passwort:
Client: USER plate Server: +OK name is a valid mailbox Client: PASS tralala Server: -ERR invalid passwordDie Tatsache, daß alle Dialoge im Klartext über das Netz abgewickelt werden, birgt ein hohes Sicherheitsrisiko. Mit dem Kommando APOP sieht die aktuelle POP3-Definition eine wesentlich sicherere Option zur Authentifizierung vor. Diese beschreibt in einem Kommando den User und identifiziert ihn mit einer Einweg-Hash-Funktion.
Hat sich der Client beim Server identifiziert, wechselt die Verbindung in den "Transaction State". Dem Client stehen nun eine Reihe von Kommandos zur Behandlung der Mails zur Verfügung:
| Kommandos im "Transaction State" | ||
|---|---|---|
| Kommando | Argument | Beschreibung |
| STAT | - | Liefert die Anzahl der gespeicherten Mails und die Größe der Mailbox zurück (in Byte). |
| LIST | Nummer | Liefert die Nummer und Größe (in Bytes) aller Mails zurück. Wird als Argument eine Mail-Nummer angegeben, wird nur die Größe dieser Mail ausgegeben. |
| RETR | Nummer | Gibt die Mail mit der als Argument übergebenen Nummer aus. |
| DELE | Nummer | Löscht die Mail mit der übergebenen Nummer. |
| NOOP | - | Bewirkt die Antwort "+OK". Dient zur Aufrechterhaltung der Verbindung, ohne daß ein Time-Out auftritt. |
| RSET | - | Setzt die aktive Verbindung zurück. Noch nicht ausgeführte Änderungen werden verworfen. |
| QUIT | - | Beendet die Verbindung und führt alle gespeicherten Änderungen aus. |
Der Server führt das Kommando DELE nicht unmittelbar aus. Die entsprechenden E-Mails werden als gelöscht marlkiert und erst bei Beenden der Verbindung endgültig vom Server gelöscht. Hat man eine Nachricht zum Löschen gekennzeichnet, möchte dies jedoch rückgängig machen, führt man das Kommando RSET aus. Der Server verwirft alle noch nicht ausgeführten Operationen.
Sendet der Client das QUIT-Kommando, wechselt die Verbindung in den "Update State". Der Server trennt die TCP-Verbindung und führt alle gespeicherten Änderungen aus.
Neben den hier vorgestellten, für eine minimale Implementation ausreichenden Kommandos gibt es noch weitere, die von den meisten Clients und Servern unterstützt werden. Details hierzu finden Sie in RFC1725.
Im folgenden Beispiel sehen Sie den Ablauf einer POP3-Verbindung. Der Client identifiziert sich gegenüber dem Server und ruft eine Liste der gespeicherten E-Mails ab. Danach werden die Nachrichten einzeln heruntergeladen, auf dem Server zum Löschen gekennzeichnet, und die Verbindung wird beendet.
Server: +OK POP3 server ready Client: user plate Server: +OK Client: pass xyz1230 Server: +OK Client: LIST Server: +OK 3 messages (520 octets) Server: 1 120 Server: 2 190 Server: 3 210 Server: . Client: RETR 1 Server: +OK 120 octets Server: <... sendet Nachricht 1> Server: . Client: DELE 1 Server: +OK message 1 deleted Client: RETR 2 Server: +OK 190 octets Server: <... sendet Nachricht 2> Server: . Client: DELE 2 Server: +OK message 2 deleted Client: RETR 4 Server: -ERR no such message Client: QUIT Server: +OK

