= Protocole applicatif IMAP : = == Constitution de la trace == On observe un échange de trames reposant sur ETHERNET-IP-TCP et sur ETHERNET-IP-TCP-IMAP[[BR]] Au niveau du serveur, le port employé est le port 143 (le port par defaut pour un serveur imap)[[BR]] == Pourquoi cet échange? == Un client se trouvant dans le sous reseau 10.40.4.0/24 sur la machine 0.0.0.2 souhaite récupérer ses mails sur le serveur mail implémentant le protocole IMAP et se trouvant dans le sous-reseau 10.40.3.0/24, sur la machine 0.0.0.2[[BR]] [[BR]] Le client utilise alors un client mail gratuit, Kmail, livré avec KDE sous Fedora.[[BR]] Au niveau du serveur, il y a un serveur mail gratuit MMS (Macallan Mail Solution) sous Windows 2008 serveur.[[BR]] Le client configure Kmail: il introduit son login et mot de passe (Samir et Pfres). Il introduit l'adresse du serveur imap (imap.ent2.com) et smtp (smtp.ent2.com, smtp sera vu dans la trace smtp lors d'un envoi de mail par client mail).[[BR]] Une foit de plus, un filtre d'affichage nous permet de voir que les requête et réponse imap:[[BR]] {{{ #!rst imap }}} Nous avons 18 trames à commenter.[[BR]][[BR]] === Protocole IMAP === Le protocole Imap est un protocole qui permet de relever ses mails sur un serveur.[[BR]] Il travaille en 5 étapes numérotées de c00000 à c00005: le client émet une requete "request c0000x blabla" et le serveur répond par une "reponse c0000x blablabla" et ainsi de suite. A l'issue de l'étape C00005, le client reçoit les mails de sa boite. (ou uniquement les plus récents s'il possède une copie de ses mails sur sa machine) ici, la question ne se pose pas...[[BR]] [http://www.faqs.org/rfcs/rfc2060.html Le Rfc 2060 aide à sa compréhension.] === Echange proprement dit === {{{ #!html

A la connection le serveur se présente en informant de la version d'imap qu'il implémente

Le client demande alors C00000 capability: c'est à dire qu'il veut savoir quelles fonctions proposent le serveur

Serveur l'informe qu'il y a besoin de s'authentifier et envoie un second message C00000 ok capability completed signifiant que l'etape c00000 est terminée

Le client envoie alors C00001 LOGIN samir pfres: l'étape c00001 correspond à l'authentification du client le login est samir et le mot de passe pfres, ils apparaissent en clair!

Serveur informe que l'authentification est conforme, le login et pass fournis correspondent bien à un compte de messagerie avec le message c00001 OK login complete>
On passe à l'Etat authentifié!

Le client envoie alors la requête C00002 LIST "" "*"
la commande "LIST reference name mailbox_name" retourne un ensemble de noms de la série complète de tous les noms à la disposition du client. Les resultats contiennent le nom des attributs, le délimiteur de hiérarchie, le nom, et eventuellement la description de la liste de réponse.
Dans notre cas, le client demande l'affichage de tous les noms de dossier de toutes les adresses mails rattachés au compte samir. Ici Samir n'a qu'une adresse mail: samir@ent2.com (ouf, çà simplifie les choses..)

Serveur répond par deux messages:
1) * LIST () "/" "INBOX"
2) * LIST () "/" "sent messages"
On comprend que les comptes rattachés au login samir@ent2.com ont deux dossiers: inbox (boite mails des mails arrivés) et sent messages (pour les messages envoyés)

Le client envoie alors la requête C00003 LSUB "" "*"
La commande LSUB necessite 2 Arguments: "reference name" et "mailbox"
Ainsi, de même, La commande LSUB retourne un sous-ensemble de noms de dossiers que l'utilisateur a déclaré comme étant «actifs».

On pouvait s'y attendre, le serveur répond par deux messages:
1) * LSUB () "/" "INBOX"
2) * LSUB () "/" "sent messages"
On comprend que les 2 dossiers fournis precedemment par LIST sont actifs.

Le client envoie alors la requête C00004 SELECT INBOX
Cette commande ne necessite qu'un seul Argument: "mailbox"
Ainsi, on selectionne la boite de reception.
REMARQUE: Il existe une commande permettant d'accéder en lecture seule à la boite mail, mais mis à part ceci le meme effet que SELECT, il s'agit de la commande EXAMINE, les mails ouvert avec EXAMINE ne passe pas à l'etat "LU" !

La boite de reception passe à l'etat SELECTIONNE. Le serveur vérifie alors l'etat de cette boite et envoie deux messages:
1) * 1 EXISTS
2) * 1 RECENT
On comprend que la boite ne comprend qu'un message, et que celui ci est récent, (pas forcément non encore ouvert un mail non ouvert apparait en général "unseen").

Dernier message du client.
Il demande c00005 uid fetch 1:*
La commande FETCH récupère les données associées à un message dans la boîte aux lettres. Les éléments de données à être récupérée peut être unique parenthésé ou une liste.
Dans le cas présent, la commande UID FETCH 1:* RFC822.SIZE permet de recupérer tous les mails présents. On s'attend à ce que le serveur attribue un numéro "unique" à chaque message, et les fasse parvenir.

Le serveur n'a qu'un mail à afficher, il lui attribue le numero 1 dans un premier message ainsi que sa date d'envoi.
* Pour terminer, il l'envoie.

}}} === REMARQUES === Pourquoi le mail reçu indique que le mail vient de localhost ( 127.0.0.1) ??[[br]] Tout simplement, car le mail à été envoyé par un client directement en utilisant le serveur smtp qui se trouve sur le meme serveur que imap.ent2.com ! Si le serveur smtp du client qui a envoyé le mail serait sur une autre machine que le serveur imap, c'est son adresse ip que l'on verrait apparaitre ;) === Autre manière de procéder === Bah voilà, pas sorcier! [[br]] On aurait pu tout taper à la main, mais plus laborieux:[[br]] (je ne donne pas les réponses du serveur, se sont les même que lors de la trace..) {{{ #!rst telnet imap.ent2.com 143 LOGIN samir pfres SELECT INBOX UID FETCH 1:* }}}