Aller au contenu principal

3. Diagramme d'état et de flux (State and Flow Diagram)

Le protocole IMAP4rev1 a quatre états. La plupart des commandes ne sont valides que dans un état spécifique.

3.1. État non authentifié (Not Authenticated State)

Dans l'état non authentifié (Not Authenticated State), le client a établi une connexion mais l'authentification n'a pas encore été effectuée. Dans cet état, le serveur ne fait pas encore confiance au client.

Les commandes valides dans l'état non authentifié sont :

  • CAPABILITY - Interroge les capacités du serveur
  • NOOP - Ne fait rien (maintient la connexion)
  • LOGOUT - Termine la connexion
  • STARTTLS - Démarre le chiffrement TLS
  • AUTHENTICATE - S'authentifie en utilisant un mécanisme d'authentification SASL
  • LOGIN - S'authentifie avec un nom d'utilisateur et un mot de passe

Lorsque l'authentification réussit, le protocole passe à l'état authentifié (Authenticated State).

3.2. État authentifié (Authenticated State)

Dans l'état authentifié (Authenticated State), le client est authentifié mais aucune boîte aux lettres n'est encore sélectionnée. Dans cet état, les opérations au niveau de la boîte aux lettres sont possibles.

Les commandes valides dans l'état authentifié sont :

  • Toutes les commandes de l'état non authentifié
  • SELECT - Sélectionne une boîte aux lettres et passe à l'état sélectionné
  • EXAMINE - Sélectionne une boîte aux lettres en lecture seule
  • CREATE - Crée une nouvelle boîte aux lettres
  • DELETE - Supprime une boîte aux lettres
  • RENAME - Renomme une boîte aux lettres
  • SUBSCRIBE - S'abonne à une boîte aux lettres
  • UNSUBSCRIBE - Se désabonne d'une boîte aux lettres
  • LIST - Obtient une liste de boîtes aux lettres
  • LSUB - Obtient une liste de boîtes aux lettres abonnées
  • STATUS - Obtient des informations d'état sur une boîte aux lettres
  • APPEND - Ajoute un message à une boîte aux lettres

Lorsqu'une commande SELECT ou EXAMINE réussit, le protocole passe à l'état sélectionné (Selected State).

3.3. État sélectionné (Selected State)

Dans l'état sélectionné (Selected State), une boîte aux lettres est sélectionnée et les opérations au niveau des messages sont possibles. Dans cet état, vous pouvez effectuer des opérations telles que la lecture, la recherche, la modification et la suppression de messages.

Les commandes valides dans l'état sélectionné sont :

  • Toutes les commandes de l'état authentifié
  • CHECK - Demande un point de contrôle de la boîte aux lettres
  • CLOSE - Ferme la boîte aux lettres sélectionnée et revient à l'état authentifié
  • EXPUNGE - Supprime définitivement les messages marqués pour suppression
  • SEARCH - Recherche des messages dans la boîte aux lettres
  • FETCH - Récupère les données de message
  • STORE - Modifie les drapeaux de message
  • COPY - Copie des messages vers une autre boîte aux lettres
  • UID - Exécute des commandes en utilisant des UID

L'état sélectionné se termine par un SELECT ou EXAMINE d'une autre boîte aux lettres, une commande CLOSE, ou une commande LOGOUT.

3.4. État de déconnexion (Logout State)

Dans l'état de déconnexion (Logout State), la connexion est en cours de terminaison. Le serveur envoie une réponse BYE et ferme la connexion.

La commande LOGOUT peut être émise depuis n'importe quel état. Lorsqu'une commande LOGOUT est émise, le serveur envoie une réponse BYE non taguée, puis une réponse OK taguée, et ferme la connexion.


Diagramme de transition d'état :

     +------------------------+
|connexion établie |
+------------------------+
||
\/
+-------------------------------+
| message d'accueil |
+-------------------------------+
|| (1)
\/
+-------------------------------+
| État non authentifié |
| Not Authenticated State |
+-------------------------------+
|| (2)
\/
+-------------------------------+
| État authentifié |
| Authenticated State |
+-------------------------------+
|| (3)
\/
+-------------------------------+
| État sélectionné |
| Selected State |
+-------------------------------+
|| (4)
\/
+-------------------------------+
| État de déconnexion |
| Logout State |
+-------------------------------+
||
\/
+-------------------------------+
| connexion fermée |
+-------------------------------+

Transitions :

  • (1) Après l'établissement de la connexion, entrée automatique dans l'état non authentifié
  • (2) Passage à l'état authentifié après le succès de la commande LOGIN ou AUTHENTICATE
  • (3) Passage à l'état sélectionné après le succès de la commande SELECT ou EXAMINE
  • (4) Passage à l'état de déconnexion par la commande LOGOUT ou la déconnexion

Notes importantes :

  • Le client devrait (SHOULD) envoyer uniquement des commandes valides dans l'état actuel
  • Le serveur devrait (SHOULD) retourner une réponse BAD pour les commandes invalides dans l'état actuel
  • La commande LOGOUT peut être exécutée depuis tous les états