Zum Hauptinhalt springen

3. Zustands- und Flussdiagramm (State and Flow Diagram)

Das IMAP4rev1-Protokoll hat vier Zustände. Die meisten Befehle sind nur in einem bestimmten Zustand gültig.

3.1. Nicht authentifizierter Zustand (Not Authenticated State)

Im nicht authentifizierten Zustand (Not Authenticated State) hat der Client eine Verbindung hergestellt, aber die Authentifizierung wurde noch nicht durchgeführt. In diesem Zustand vertraut der Server dem Client noch nicht.

Gültige Befehle im nicht authentifizierten Zustand sind:

  • CAPABILITY - Fragt die Fähigkeiten des Servers ab
  • NOOP - Tut nichts (hält die Verbindung aufrecht)
  • LOGOUT - Beendet die Verbindung
  • STARTTLS - Startet TLS-Verschlüsselung
  • AUTHENTICATE - Authentifiziert mit einem SASL-Authentifizierungsmechanismus
  • LOGIN - Authentifiziert mit Benutzername und Passwort

Wenn die Authentifizierung erfolgreich ist, wechselt das Protokoll in den authentifizierten Zustand (Authenticated State).

3.2. Authentifizierter Zustand (Authenticated State)

Im authentifizierten Zustand (Authenticated State) ist der Client authentifiziert, aber es wurde noch keine Mailbox ausgewählt. In diesem Zustand sind Operationen auf Mailbox-Ebene möglich.

Gültige Befehle im authentifizierten Zustand sind:

  • Alle Befehle aus dem nicht authentifizierten Zustand
  • SELECT - Wählt eine Mailbox aus und wechselt in den ausgewählten Zustand
  • EXAMINE - Wählt eine Mailbox im Nur-Lese-Modus aus
  • CREATE - Erstellt eine neue Mailbox
  • DELETE - Löscht eine Mailbox
  • RENAME - Benennt eine Mailbox um
  • SUBSCRIBE - Abonniert eine Mailbox
  • UNSUBSCRIBE - Hebt das Abonnement einer Mailbox auf
  • LIST - Ruft eine Liste von Mailboxen ab
  • LSUB - Ruft eine Liste von abonnierten Mailboxen ab
  • STATUS - Ruft Statusinformationen über eine Mailbox ab
  • APPEND - Fügt eine Nachricht zu einer Mailbox hinzu

Wenn ein SELECT- oder EXAMINE-Befehl erfolgreich ist, wechselt das Protokoll in den ausgewählten Zustand (Selected State).

3.3. Ausgewählter Zustand (Selected State)

Im ausgewählten Zustand (Selected State) ist eine Mailbox ausgewählt und Operationen auf Nachrichtenebene sind möglich. In diesem Zustand können Sie Operationen wie Lesen, Suchen, Ändern und Löschen von Nachrichten durchführen.

Gültige Befehle im ausgewählten Zustand sind:

  • Alle Befehle aus dem authentifizierten Zustand
  • CHECK - Fordert einen Checkpoint der Mailbox an
  • CLOSE - Schließt die ausgewählte Mailbox und kehrt zum authentifizierten Zustand zurück
  • EXPUNGE - Löscht zum Löschen markierte Nachrichten dauerhaft
  • SEARCH - Sucht nach Nachrichten in der Mailbox
  • FETCH - Ruft Nachrichtendaten ab
  • STORE - Ändert Nachrichten-Flags
  • COPY - Kopiert Nachrichten in eine andere Mailbox
  • UID - Führt Befehle mit UIDs aus

Der ausgewählte Zustand endet durch ein SELECT oder EXAMINE einer anderen Mailbox, einen CLOSE-Befehl oder einen LOGOUT-Befehl.

3.4. Abmeldezustand (Logout State)

Im Abmeldezustand (Logout State) wird die Verbindung beendet. Der Server sendet eine BYE-Antwort und schließt die Verbindung.

Der LOGOUT-Befehl kann von jedem Zustand aus ausgegeben werden. Wenn ein LOGOUT-Befehl ausgegeben wird, sendet der Server eine ungetaggte BYE-Antwort, dann eine getaggte OK-Antwort und schließt die Verbindung.


Zustandsübergangsdiagramm:

     +------------------------+
|Verbindung hergestellt |
+------------------------+
||
\/
+-------------------------------+
| Begrüßung |
+-------------------------------+
|| (1)
\/
+-------------------------------+
| Nicht authentifizierter |
| Zustand |
| Not Authenticated State |
+-------------------------------+
|| (2)
\/
+-------------------------------+
| Authentifizierter Zustand |
| Authenticated State |
+-------------------------------+
|| (3)
\/
+-------------------------------+
| Ausgewählter Zustand |
| Selected State |
+-------------------------------+
|| (4)
\/
+-------------------------------+
| Abmeldezustand |
| Logout State |
+-------------------------------+
||
\/
+-------------------------------+
| Verbindung geschlossen |
+-------------------------------+

Übergänge:

  • (1) Nach Verbindungsaufbau automatischer Eintritt in den nicht authentifizierten Zustand
  • (2) Wechsel in den authentifizierten Zustand nach erfolgreichem LOGIN- oder AUTHENTICATE-Befehl
  • (3) Wechsel in den ausgewählten Zustand nach erfolgreichem SELECT- oder EXAMINE-Befehl
  • (4) Wechsel in den Abmeldezustand durch LOGOUT-Befehl oder Verbindungsabbruch

Wichtige Hinweise:

  • Der Client sollte (SHOULD) nur im aktuellen Zustand gültige Befehle senden
  • Der Server sollte (SHOULD) eine BAD-Antwort für im aktuellen Zustand ungültige Befehle zurückgeben
  • Der LOGOUT-Befehl kann von allen Zuständen aus ausgeführt werden