IMAP : Fonctionnement


1 Niveau de connexion


Le protocole IMAP s'appuie sur l'hypothèse d'un flux de données stable, comme celui fournit par TCP. Lorsque TCP est utilisé, un serveur IMAP écoute le port 143.

2 Commandes et réponses


Une connexion IMAP comprend d'abord l'établissement d'une connexion réseau client/serveur, puis un message de salutation initial du serveur et enfin d'interactions client/serveur. Ces interactions client/serveur consistent en une suite de commandes/réponses entre le client et le serveur. Toutes les données transmises entre le client et le serveur se présentent sous forme de lignes qui se terminent par CRLF.

3 Client émetteur du protocole et serveur récepteur


Une commande du client commence une opération. Chaque commande du client est préfixée par un identificateur (typiquement une chaîne alphanumérique courte (par exemple : A0001, A0002, etc.) appelé tag. Un tag différent est généré par le client pour chaque nouvelle commande.
Le serveur IMAP lit une ligne de commande reçue du client, parcourt la commande et ses arguments et transmets les données appropriées ainsi qu'une réponse résultat de commande complétée.

4 Serveur émetteur du protocole et client récepteur


Les données transmises au client par le serveur et les réponses de statut n'indiquant pas qu'une commande a été complétée sont préfixées par "*" , et sont appelées réponses sans tag (untagged). Les données transmises par le serveur peuvent être le résultat d'une commande du client, mais aussi d'une décision unilatérale du serveur. Il n'y a aucune différence syntaxique entre des données qui sont le résultat d'une commande et celles qui sont le résultat d'un décision unilatérale du serveur. La réponse résultat de commande complétée indique le succès ou l'échec de l'opération. Le tag de cette réponse est le même que celui de la commande du client qui a lancé l'opération. Ainsi, si plus d'une commande sont en cours d'exécution, le tag permet d'identifier la commande à laquelle cette réponse est destinée. Il y a trois réponses de commande complété possibles :
" OK : indique que l'opération s'est déroulée avec succès
" NO : indique que l'opération a échouée
" BAD : indique une erreur de protocole, comme une commande non reconnue ou une erreur de syntaxe
Le client lit une ligne de réponse du serveur. Il agit ensuite en fonction du premier token de la réponse, qui peut être un tag, "*" ou "+".