Le protocole IMAP4
22/02/2005
 Christian CALECA 
Liste des cours

Présentation générale

Accueil ] [ Introduction ] [ Le protocole ] [ Serveurs IMAP ] [ Plus avec Cyrus ]


Initialement, IMAP représentait un acronyme de  : "Interactive Message Access Protocol". Le nom a été modifié en "Internet Message Access Protocol" Pour tenir compte des derniers ajouts au protocole (actuellement en version 4 révision 1).

Il est actuellement défini par la RFC 2060.

Pourquoi IMAP4 ?

Puisqu'on a POP3 ...

POP3 remplit tout à fait son rôle de relève de courrier, nous l'avons vu. Alors pourquoi changer ?

POP3 permet de travailler en modes "hors-ligne" et "déconnecté", autrement dit, il est possible :

Le mode "hors-ligne" est tout à fait utilisable si l'on ne gère sa messagerie que depuis un seul poste de travail, ce qui n'est pas toujours le cas.

Le mode "déconnecté" permet quant à lui une gestion depuis plusieurs postes, mais pose tout de même le problème de la purge du serveur. En effet, il faudra bien faire de la place de temps en temps si l'on ne veut pas voir sa boîte exploser. Et les messages une fois détruits sur le serveur ne pourront plus y être remis autrement qu'en se les renvoyant.

Lorsque l'on est dans des conditions de connexion difficiles, POP3 se révèle peu puissant pour se tirer d'embarras si un message volumineux se trouve dans la file. Il est possible, en exploitant toutes les finesses de POP3, d'éliminer ce message ou du moins de ne pas le rapatrier, mais peu de MUA savent gérer ces possibilités et le message non lu représentera toujours un écueil, à chaque consultation.

Mais avec IMAP4 ...

Ici, le protocole autorise des manipulations infiniment plus souples. De plus, et c'est probablement là le point le plus décisif, les messages peuvent être entièrement gérés en restant sur le serveur. IMAP propose en effet les possibilités suivantes :

Toutes ces possibilités nécessitent bien entendu d'être connecté en permanence, donc en mode interactif, d'où le nom initial du protocole.

Mais IMAP fait encore plus, dans la mesure où les modes "hors-ligne" et "déconnecté" sont également possibles.

Ce que vous devez pouvoir faire avec IMAP4 :

Vous le voyez, il semble n'y avoir aucune bonne raison de ne pas passer à IMAP.

Alors pourquoi POP3 encore ?

S'il ne semble y avoir que de bonnes raisons de passer à IMAP, il y en a aussi (mais sont-elles bonnes ?) pour rester sur POP3.

IMAP4 est un protocole beaucoup plus compliqué que POP3 et pour cause, il est plus puissant. Cette complexité relative amène plusieurs effets négatifs :

Mais nous sommes ici pour parler d'IMAP4. Pas moins de 25 commandes alors que POP3 n'en propose que 12. Nous ne les verrons pas toutes en détail, le but étant d'avantage de comprendre l'intérêt du protocole que de le manipuler avec telnet :-)

Démonstration

Les configurations utilisées

Nous disposons de deux serveurs IMAP différents. Pour l'instant, nous nous contenterons de les utiliser, nous verrons plus en détails comment les installer plus tard.

UW-IMAP

Un serveur développé à l'université de Washington, installé sur une Debian Woody. Le serveur SMTP utilisé est EXIM, installé par défaut par Debian. C'est un bon SMTP, plus souple que Postfix, mais aussi plus délicat à configurer. La machine s'appelle poétiquement gw2.maison.mrs.

Ce serveur utilise le format "MAILBOX".

Cyrus21

Un serveur développé à l'université de Carnegie Mellon, installé sur une Debian "testing". Le SMTP employé ici est Postfix. C'est un bon SMTP, moins souple qu'EXIM mais plus facile à configurer :). La machine s'appelle mythologiquement cyclope.maison.mrs.

Ce serveur utilise le format "MAILDIR".

Les tests

Configuration du client (MUA)

Sur chacune de ces machines, un compte de messagerie est créé :

Un client de messagerie, "Thunderbird", est installé sur une troisième machine : pchris2.maison.mrs, qui fonctionne sous Mandrake 9.1 (nous avons les moyens pour travailler correctement).

Thunderbird est donc issu du projet Mozilla. C'est le client de messagerie qui a été extrait et très légèrement modifié.

Si vous utilisez la suite Mozilla, ce qui est tout à fait recommandable, Thunderbird ne sera donc pas nécessaire. L'avantage de Thunderbird est qu'il ne nécessite pas d'installation. Vous téléchargez le pack, vous de désarchivez où vous voulez, vous donnez les bons droits d'exécution et c'est tout. Aussi bien sous Linux, quelle qu'en soit la distribution, que sous Windows.

Le tout monté en réseau local, bien entendu.

Nous allons créer ces deux comptes sur Thunderbird :

thunderbird

Deux remarques immédiates :

Création de répertoires

Ceci n'est pas un cours sur l'emploi de Thunderbird. Nous nous dispenserons donc de développer le mode opératoire. 

Thunderbird aime bien disposer de répertoires supplémentaires :

Nous allons les créer pour chaque compte, sur les serveurs respectifs.

thunderbird

Encore deux remarques :

Réception d'un premier mail

Nous avons plus de moyens que vous ne pensez. Depuis une quatrième machine (Windows, celle là, mais qui utilise aussi Thunderbird), nous envoyons un message sur ces deux comptes :

courrier

Bien entendu, ça fonctionne et nous retrouvons sur pchris2 ce message dans chaque BAL :

bal

Manipulations diverses

Voyons un peu la configuration de notre Thunderbird :

manip

Par défaut, Thunderbird place une copie des messages envoyés dans le dossier "Sent", sur le serveur IMAP du compte employé. Vérifions ça en répondant à ce premier message depuis le compte sur gw2 :

test

Il y est.

Le dossier "Sent" est bien sur le serveur IMAP de gw2.maison.mrs et le message envoyé s'y trouve bien. Nous allons le vérifier tout de suite, puisque nous avons le serveur sous la main :

/home/testimap# ls -la
total 28
drwxr-xr-x    2 testimap nogroup      4096 Dec 20 10:53 .
drwxrwsr-x    6 root     staff        4096 Nov 30 16:42 ..
-rw-r--r--    1 testimap nogroup        28 Dec 20 10:20 .mailboxlist
-rw-------    1 testimap nogroup       513 Dec 20 10:19 Drafts
-rw-------    1 testimap nogroup      1190 Dec 20 10:53 Sent
-rw-------    1 testimap nogroup       513 Dec 20 10:20 Templates
-rw-------    1 testimap nogroup       513 Dec 20 10:03 Trash

Nous avons bien quatre fichiers qui correspondent aux quatre dossiers créés et un cinquième, caché, qui s'appelle .mailboxlist. Etant d'un naturel curieux, impossible de résister à l'envie de regarder son contenu :

/home/testimap# cat .mailboxlist
Trash
Drafts
Sent
Templates

Un peu décevant... Il ne contient que la liste des noms des répertoires.

Voyons maintenant le contenu du fichier "Sent" :

sysop:/home/testimap# cat Sent
From MAILER-DAEMON Sat Dec 20 10:20:02 2003
Date: 20 Dec 2003 10:20:02 +0100
From: Mail System Internal Data <MAILER-DAEMON@sysop.eme-enseignement.fr>
Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA
X-IMAP: 1071912002 0000000000
Status: RO

This text is part of the internal format of your mail folder, and is not
a real message.  It is created automatically by the mail system software.
If deleted, important folder data will be lost, and it will be re-created
with the data reset to initial values.

From testimap@sysop.eme-enseignement.fr Sat Dec 20 10:53:12 2003 +0100
Status: R
X-Status:
X-Keywords:
Message-ID: <3FE41C07.1030504@gw2.maison.mrs>
Date: Sat, 20 Dec 2003 10:53:11 +0100
From: testimap-gw2 <testimap@gw2.maison.mrs>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6b) Gecko/20031205 Thunderbird/0.4
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: Christian Caleca <christian.caleca@free.fr>
Subject: Re: un premier test IMAP
References: <3FE4192C.7040107@free.fr>
In-Reply-To: <3FE4192C.7040107@free.fr>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

Christian Caleca wrote:

> Coucou.

Bien reçu :)

Intéressons nous pour l'instant à ce qui est surligné : c'est bien le texte de la réponse faite.

Il n'a bien entendu pas échappé à votre sagacité que le dossier "Inbox" n'est pas ici. C'est tout simplement qu'il est ailleurs. Il est dans le spool de messagerie, directement alimenté par le SMTP, via l'agent de distribution local (MDA). Avec EXIM vous le trouverez dans /var/spool/mail

sysop:/var/spool/mail# ls
chris  testimap

Profitons-en pour voir ce qu'il y a dedans :

sysop:/var/spool/mail# cat testimap
From christian.caleca@free.fr Sat Dec 20 10:40:53 2003
Return-path: <christian.caleca@free.fr>
Envelope-to: testimap@gw2.maison.mrs
Received: from pchris.maison.mrs ([192.168.0.10] helo=free.fr)
        by sysop.eme-enseignement.fr with esmtp (Exim 3.35 #1 (Debian))
        id 1AXdbQ-0000u2-00; Sat, 20 Dec 2003 10:40:52 +0100
Message-ID: <3FE4192C.7040107@free.fr>
Date: Sat, 20 Dec 2003 10:41:00 +0100
From: Christian Caleca <christian.caleca@free.fr>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6b) Gecko/20031205 Thunderbird/0.4
X-Accept-Language: en-us, en
MIME-Version: 1.0
To:  testimap@gw2.maison.mrs,  testimap@cyclope.maison.mrs
Subject: un premier test IMAP
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-IMAPbase: 1071913280 2
Status: RO
X-Status: DA
X-Keywords:
X-UID: 1

Coucou.
--
Christian Caléca.
Pour l'Internet A Fond : http://www.piaf.asso.fr
La météo du Net : http://www.grenouille.com
Comprendre les réseaux : http://christian.caleca.free.fr

Le message que l'on a reçu. C'est réconfortant.

Suppression d'un message dans "Inbox"

Le message initial n'ayant pas d'intérêt, nous allons le détruire. Nous devrions théoriquement le retrouver dans la poubelle (Trash):

trash

Tout va bien, tout se passe comme prévu.

Comme ce message n'a toujours pas d'intérêt, même dans la poubelle, nous vidons aussi la poubelle.

Bien. Vous êtes bien assis ? Alors, allons vérifier tout ça sur le serveur :

/home/testimap# cat Trash
From MAILER-DAEMON Sat Dec 20 11:07:13 2003
Date: 20 Dec 2003 11:07:13 +0100
From: Mail System Internal Data <MAILER-DAEMON@sysop.eme-enseignement.fr>
Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA
Message-ID: <1071914833@sysop.eme-enseignement.fr>
X-IMAP: 1071911016 0000000001
Status: RO

This text is part of the internal format of your mail folder, and is not
a real message.  It is created automatically by the mail system software.
If deleted, important folder data will be lost, and it will be re-created
with the data reset to initial values.

From christian.caleca@free.fr Sat Dec 20 10:40:53 2003
Return-path: <christian.caleca@free.fr>
Envelope-to: testimap@gw2.maison.mrs
Received: from pchris.maison.mrs ([192.168.0.10] helo=free.fr)
        by sysop.eme-enseignement.fr with esmtp (Exim 3.35 #1 (Debian))
        id 1AXdbQ-0000u2-00; Sat, 20 Dec 2003 10:40:52 +0100
Message-ID: <3FE4192C.7040107@free.fr>
Date: Sat, 20 Dec 2003 10:41:00 +0100
From: Christian Caleca <christian.caleca@free.fr>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6b) Gecko/20031205 Thunderbird/0.4
X-Accept-Language: en-us, en
MIME-Version: 1.0
To:  testimap@gw2.maison.mrs,  testimap@cyclope.maison.mrs
Subject: un premier test IMAP
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
Status: RO
X-Status: A
X-Keywords:

Coucou.
--
Christian Caléca.
Pour l'Internet A Fond : http://www.piaf.asso.fr
La météo du Net : http://www.grenouille.com
Comprendre les réseaux : http://christian.caleca.free.fr

Ca c'est c.. ennuyeux. Bien qu'effacé, le message y est toujours !

Et dans le spool, le premier message reçu, puis effacé, y est-il toujours lui aussi ?

sysop:/var/spool/mail# cat testimap
From christian.caleca@free.fr Sat Dec 20 10:40:53 2003
Return-path: <christian.caleca@free.fr>
Envelope-to: testimap@gw2.maison.mrs
Received: from pchris.maison.mrs ([192.168.0.10] helo=free.fr)
        by sysop.eme-enseignement.fr with esmtp (Exim 3.35 #1 (Debian))
        id 1AXdbQ-0000u2-00; Sat, 20 Dec 2003 10:40:52 +0100
Message-ID: <3FE4192C.7040107@free.fr>
Date: Sat, 20 Dec 2003 10:41:00 +0100
From: Christian Caleca <christian.caleca@free.fr>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6b) Gecko/20031205 Thunderbird/0.4
X-Accept-Language: en-us, en
MIME-Version: 1.0
To:  testimap@gw2.maison.mrs,  testimap@cyclope.maison.mrs
Subject: un premier test IMAP
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-IMAPbase: 1071913280 2
Status: RO
X-Status: DA
X-Keywords:
X-UID: 1

Coucou.
--
Christian Caléca.
Pour l'Internet A Fond : http://www.piaf.asso.fr
La météo du Net : http://www.grenouille.com
Comprendre les réseaux : http://christian.caleca.free.fr

Oui...

Ca voudrait dire que petit à petit, l'espace alloué va s'encombrer de déchets et au final, la BAL va exploser alors même qu'elle sera considérée comme vide ?

La réponse est oui, si l'on ne prend pas une précaution supplémentaire : le compactage des dossiers.

En cliquant sur Inbox du bouton droit et en faisant "Compact This Folder" et en répétant la même opération sur "Trash", nous allons remédier au problème :

/var/spool/mail# ls -l
total 48
-rw-rw----    1 testimap mail            0 Dec 20 11:33 testimap

Le fichier existe toujours, mais fait 0 octets, ce qui prouve qu'il est vide.

Il est donc primordial, avec IMAP, de penser à compacter régulièrement les dossiers de la messagerie. 

Déplacement de messages

Nous allons créer pour le compte sur gw2.maison.mrs une règle de filtrage qui va déplacer tout message contenant le mot "trier" dans un dossier spécial intitulé "demotri" et créé à cet effet.

filter

et nous envoyons un message  :

message

Et chez le destinataire :

destinataire

Ca fonctionne. Le seul fait de lire sa messagerie va faire que le message sera déplacé dans le dossier "demotri" sans qu'il ait été au préalable rapatrié chez le client.

On efface ce message sans intérêt, on vide la poubelle et au bout du compte, notre BAL contiendra toujours trois exemplaires de ce message, invisibles, mais bien présents :

Pensez donc à compacter les dossiers souvent ;-)

Plus fort encore, nous allons créer une règle de tri qui fera que, lorsqu'un message à destination de testimap@cyclope.maison.mrs contient le mot "distant" dans son objet, il faudra le déplacer dans le répertoire "demotri" du compte testimap@gw2.maison.mrs.

Autrement dit, nous allons déplacer un message d'un serveur à l'autre.

filter

Répétons-le, cette règle est écrite pour le compte testimap@cyclope.maison.mrs !

Envoi du message :

envoi

Et réception :

réception

Le cas d'un gros message encombrant.

Vous êtes perdu quelque part de l'autre côté de la fracture numérique et ne disposez que d'une méchante connexion RTC qui plafonne à 28800 bps et qui se déconnecte toutes les cinq minutes, à cause de la mauvaise qualité de votre ligne téléphonique. Je peux vous indiquer des endroits en France où c'est comme ça que ça se passe.

Comme dans ce cas, vous avez pris la précaution de faire afficher la taille des messages, vous constatez que celui-ci fait 805 Ko, qu'avec votre connexion pourrie, vous n'arriverez jamais à le télécharger, IMAP vous sauve.

En effet, à ce stade, le message n'est pas téléchargé en local. Aussi longtemps que vous ne cliquerez pas dessus du bouton gauche, il ne se téléchargera pas.

Cliquez donc dessus du bouton droit, demandez de le déplacer dans le dossier "Lire_plus_tard", que vous avez créé à cet effet. Le déplacement aura lieu sans que le message ne soit téléchargé localement. Vous pourrez alors aller le lire plus tard, lorsque vous aurez retrouvé une connexion de bonne qualité.

Premières conclusions

Si cette démonstration ne vous a pas convaincu de l'intérêt d'IMAP, c'est que vous n'avez pas besoin de consulter votre messagerie depuis des machines différentes, que vous êtes suffisamment sûr de la fiabilité de votre machine locale pour ne pas souhaiter conserver vos messages importants sur le serveur de votre fournisseur, que vous n'avez jamais été confronté au blocage de votre messagerie  parce que vous avez une connexion tellement minable qu'un gros message ne peut jamais être rapatrié à cause des déconnexions.

IMAP propose beaucoup de fonctionnalités, c'est une autre affaire que d'en disposer avec son MUA. Thunderbird gère bien mieux l'IMAP que ne le fait Outlook Express, par exemple, qui ne sait pas appliquer de règles de filtrage sur les dossiers IMAP. Cependant, il n'est pas parfait non plus. Il n'est pas possible par exemple de définir simplement une règle de tri en fonction de la taille des messages.

Pourquoi avons-nous fait ces manipulations surtout avec UW-imap ? Parce que c'est le serveur dont la structure est la plus simple. Mais rassurez-vous, nous verrons Cyrus plus en détails dans la suite de cet exposé.

De ce que nous avons vu pour l'instant, retenons que Cyrus offre plus de souplesse dans l'organisation des répertoires que ne le fait UW-imap. Nous verrons plus loin que ce n'est pas son seul avantage. Mais en ce qui concerne le protocole IMAP lui-même, les deux serveurs se comportent de la même manière.


Accueil ] [ Suivante ]