kopf
brlogo
fensterobenrechts
   
   
fensteruntenblau
   
 
header
 

bt_backward   bt_index   bt_forward

Das POP3 Protokoll  (Post Office Protocol  Version 3)

 

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:

 

pop_10

 

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

 

Abschließend noch einmal die Beschreibung des zeitlichen Ablaufs einer solchen Kommunikation in Form eines Zeit-Sequenz-Diagramms

(siehe Kapitel "Kommunikationsprotokolle"):

 

protokolle_40

     (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.

 

telnet_05

 

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.

 

pop_20

 

 

2. Beispiel:  Ein entsprechendes Programm in Delphi

 

Mit dem kleinen Demoprogramm Pop3Client1 kann und soll etablierten E-Mail Clientprogrammen keine Konkurrenz gemacht werden. Im Gegenteil: das Programm ist eng an der oben beschriebenen Kommunikation angelehnt und soll die oben mithilfe von Telnet beschriebenen Grundfunktionen widerspiegeln.

 

Ziele:

  • Grundprogramm zum Empfangen einer E-Mail von einem E-Mail Server wie z.B. GMX, dabei
  • Darstellen der einzelne Schritte in der Kommunikation zwischen Client und E-Mail Server,
  • Anwenden grundlegender POP3-Befehle,
  • Anzeigen der empfangenen Nachricht als Textdatei.

 

Zur Darstellung dieser Grundfunktionen beschränken wir uns auf E-Mails auf Textbasis, also keine Codierung weiterer Dateien, keine HTML-Mails, keine Attachments usw.

 

pop_30

 

 

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;

 

IcoDelphi7_36  Download Programm POP3Client1 (Delphi 7):  Pop3Client1.zip

 

    bt_top  

 


(FvSG 30.1.2006)
 
 
Thursday, 23. November 2017 / 23:08:48