-
Voila une petite infographie amusante qui résume bien la problématique dès qu’il s’agit d’effectuer la maintenance d’un ordinateur qu’il s’agisse d’un Mac, PC ou d’un ordinateur sous Linux. SI vous aimez les clichés, idées reçues et les échanges un peu “Troll”, cette image est pour vous ;-)
Vous pouvez la retrouver ainsi que d’autres, sur theoatmeal.
Merci à : http://www.crack-net.com
Pour ma part, je suis un indécrottable utilisateur de Windows et je n’ai jamais perdu mes données même si j’ai une ou 2 fois été dans l’obligation de formater la machine.
Au final, tout le monde en prend pour son grade… Mais le coup du “buy a new Mac” et “overdraw your account” en cas de panne m’a bien fait rire. C’est tellement vrai… ;-)
1 commentaire -
-
Les données de son entreprise, protégées et disponibles
La disponibilité des données de l’entreprise implique qu’il faut assurer la fiabilité et la continuité du service informatique. L’indisponibilité d’un service ou d’une donnée a des répercussions sur la productivité de l’entreprise. Que faut-il donc faire ?
Imaginons un seul instant que le serveur de fichier sur lequel les employés d’une entreprise stockent leurs travaux n’est pas disponible durant toute une journée ? L’entreprise est gelée pendant ce même temps et la perte d’argent est importante. Il faut donc mettre en place une politique de haute disponibilité qui prend en compte la redondance matérielle et logicielle et réduire au maximum les fautes envisageables.
Différentes méthodes peuvent être utilisées pour augmenter le taux de disponibilité et nous allons lister quelques une.Le Clustering
Un cluster est une grappe d’ordinateurs formant des nœuds capables de fonctionner indépendamment les uns des autres. Deux types de cluster existent. D’un côté, il existe les clusters de calcul, qui répartissent l’exécution d’une tâche sur tous les serveurs pour bénéficier de la somme de puissance de calcul. De l’autre, les Clusters de haute disponibilité permettent de rediriger un traitement sur le premier nœud disponible. Ainsi, tant qu’un nœud est disponible, ce traitement est sûr d’être réalisé.
Installation d’un RAID
Oui un RAID. Il ne s’agit pas d’un assaut militaire, mais plutôt d’une technologie très efficace. Cette technologie permet d’avoir une disponibilité accrue des données sur un serveur. Pour être bref et le moins technique possible, il faut déjà savoir que les types de RAID les plus utilisés sont les RAID 1(mirroring) et les RAID 5. La particularité du RAID 1 est qu’il effectue une copie bit à bit des données d’un disque sur un ou plusieurs autres disques tandis que le RAID 5, permet d’écrire sur plusieurs disques avec un bit de parité qui servira en cas de panne de l’un des trois disques à recalculer la partie manquante.
La redondance matérielle
Il est important de pouvoir se prémunir d’une panne matérielle sur un serveur. Ce dernier doit donc gérer la redondance matérielle ainsi que le remplacement à « chaud » du matériel défectueux dans le serveur (Hot swapping). Remplacement à chaud ? Oui c’est à dire sans éteindre le serveur. Cela permet d’assurer une continuité de service le temps de la réparation.
L’équilibrage de charge ou Load Balancing
Il consiste en la répartition des charges sur plusieurs ordinateurs/serveurs de sorte que ce soit celle qui a la charge la moins élevée qui effectue le calcul ou qui exécute la tâche. Cela permet au client qui a émis la requête d’avoir une réponse dans un temps correct.
La sauvegarde
L’une des choses les plus simples à faire, mais très négligé. Le service de sauvegarde permet d’avoir des traces datées des données et permet de se prémunir contre toute modification ou suppression accidentelle de celle-ci. Elle doit être programmée et effectuer de manière périodique et idéalement sur un site distant afin de prévenir une catastrophe naturelle ou un vol.
Les données font vivre l’entreprise. Il faut donc faire le maximum pour qu’elles soient disponibles en appliquant ces bonnes pratiques.
Auteur : Laïcana COULIBALY
Expert en Sécurité des Systèmes d'Information
votre commentaire -
L'Internet Rapide et Permanent
Le protocole de messagerie IMAP
Table des matières
Vous disposez d'une connexion permanente et rapide… et maintenant, vous êtes perdu dans la technique…
Cette série « L'Internet Rapide et Permanent », que Christian Caleca nous a aimablement autorisés à reproduire, est là pour répondre à quelques-unes de ces questions. Cet article parlera du protocole de messagerie IMAP.
N'hésitez pas à commenter cet article ! Commentez
Article lu 1013 fois.
1. Introduction▲
Internet Mail Access Protocol est un protocole de relève des messages électroniques, fonctionnellement comparable à POP.
Il présente toutefois de nombreux avantages et l'on peut se demander pourquoi il n'est pas plus souvent utilisé.
Ce chapitre essaye de montrer les avantages de ce protocole et les limites des actuels clients de messagerie.
Pour y arriver, nous utiliserons comme d'habitude des outils de base :
- Telnet, le terminal à tout faire ;
- Ethereal, le sniffeur habituel ;
- Thunderbird, un client de messagerie issu du projet Mozilla. Il existe pour les plateformes Windows, GNU/Linux et Mac OS X. Vous le trouverez sur le site du projet Mozilla.
Nous utiliserons des serveurs IMAP locaux, Dovecot principalement, comme indiqué dans l'article « SMTP/IMAP en pratique ».
2. Présentation générale▲
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 défini par le RFC 2060, remplacé par le RFC 3501.
2-1. Pourquoi IMAP4 ?▲
2-1-1. Puisqu'on a POP3…▲
Le protocole 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 :
- de rapatrier tous ses messages en local et de les effacer du serveur, ce qui permet d'interrompre la connexion et de gérer ses messages localement (mode « hors-ligne ») ;
- de faire la même chose, mais en rapatriant une copie locale des messages, laissant les messages « originaux » sur le serveur (mode « déconnecté »).
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.
2-1-2. 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 :
- lecture des objets des messages seulement (sans le corps) ;
- création de dossiers sur le serveur ;
- déplacement de messages sur le serveur d'un dossier à l'autre, sans avoir à rapatrier tout le message en local ;
- effacement de message sans l'avoir lu ;
- lecture des messages en les laissant sur le serveur ;
- marquage des messages sur le serveur. Par exemple, vous lisez un message sur un poste client A, lorsque vous ouvrez votre messagerie sur un poste client B, le message apparaitra comme lu. Il y a d'autres marqueurs que nous verrons plus loin ;
- il est possible, si votre fournisseur de service le permet, de poser sur le serveur des filtres qui classeront vos messages à leur arrivée sur le serveur. Ainsi, en ouvrant une session IMAP, vous trouverez vos messages déjà triés dans les bons dossiers.
Cette notion de dossiers de stockage sur le serveur n'est absolument pas exploitable en POP3, qui ne sait lire que le contenu de INBOX, le point d'entrée des nouveaux messages.
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.
2-1-3. Ce qu'IMAP4 sait faire▲
- consulter seulement les objets des messages ;
- effacer, déplacer des messages sans les lire, éventuellement avec des règles de tri automatiques ;
- rapatrier en local certains messages et pas d'autres, en faisant une copie ou un déplacement, éventuellement avec des règles de tri automatique ;
- recopier sur le serveur des messages que vous avez en local ;
- bien d'autres choses encore.
Vous le voyez, il semble n'y avoir aucune bonne raison de ne pas passer à IMAP, même si tous les MUA n'exploitent pas pleinement les possibilités de ce protocole.
2-2. 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 :
- tous les fournisseurs de services Internet ne proposent pas encore de serveur IMAP, et ceux qui en proposent, pour des raisons diverses, les amputent parfois de certaines de leurs possibilités ;
- rares sont les clients de messagerie (MUA) qui gèrent toutes les possibilités offertes par IMAP4, si l'on se limite à ce que sait faire POP3, alors, autant utiliser POP3 ;
- garder tous ses messages sur le serveur, même bien classés dans divers dossiers n'a pas que des avantages, l'espace disponible est souvent limité et le stockage sur le serveur va rapidement remplir cet espace, encore que cette situation évolue rapidement. Il faudra donc adopter des stratégies de purge qui restreindront les avantages du système.
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 davantage de comprendre l'intérêt du protocole que de le manipuler avec Telnet.
2-3. Démonstration▲
2-3-1. Les configurations utilisées▲
Pour cette démonstration, nous disposons de deux serveurs IMAP différents. Nous nous contenterons de les utiliser pour une première approche des possibilités de ce protocole.
Note : cette démonstration date un peu, mais elle reste d'actualité.
2-3-1-1. UW-IMAP▲
Un serveur développé à l'université de Washington, installé pour l'occasion sur mon poste de travail. Le serveur SMTP utilisé est Postfix. La machine s'appelle poétiquement pchris2.maison.mrs.
Ce serveur utilise le format « MAILBOX ».
2-3-1-2. Cyrus▲
Un serveur développé à l'université de Carnegie Mellon, installé sur une Debian « Etch ». Le SMTP employé ici est également Postfix. La machine s'appelle cyrus.nain-t.net.
Ce serveur utilise le format « MAILDIR ».
2-3-2. Les tests▲
2-3-2-1. Configuration du client (MUA)▲
Sur chacune de ces machines, un compte de messagerie est créé :
- testimap@pchris2.maison.mrs pour le serveur Uw-imap ;
- testimap@cyrus.nain-t.net pour le serveur Cyrus.
Un client de messagerie, « Thunderbird », est installé sur la machine : pchris2.maison.mrs, qui fonctionne sous Ubuntu.
Nous allons créer ces deux comptes sur Thunderbird :
Deux remarques immédiates :
- les deux comptes contiennent déjà deux dossiers, « Inbox » et « Trash » ;
- sur pchris2 (uw-imap) les deux dossiers sont au même niveau de hiérarchie, alors que sur cyrus, « Trash » est un sous-dossier de « Inbox ». Cette subtilité trouvera son explication plus loin dans cet exposé.
2-3-2-2. 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 :
- Sent, pour stocker les messages envoyés ;
- Drafts, pour stocker les brouillons ;
- Templates, pour stocker les modèles.
Nous allons les créer pour chaque compte, sur les serveurs respectifs.
Encore deux remarques :
- avec uw-imapd, il n'est pas possible de créer ces dossiers dans « Inbox », tous les dossiers sont obligatoirement au même niveau de hiérarchie ;
- avec Cyrus, les dossiers ne peuvent être créés que dans « Inbox » (ou dans un sous-dossier de « Inbox »). Il est possible de construire une arborescence complexe, même si ce n'est pas forcément souhaitable.
2-3-2-3. 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 :
Bien entendu, ça fonctionne et nous retrouvons sur pchris2 ce message dans chaque BAL :
2-3-2-4. Manipulations diverses▲
Voyons un peu la configuration de notre Thunderbird :
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 :
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 :
Sélectionnez/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. Étant d'un naturel curieux, impossible de résister à l'envie de regarder son contenu :
Sélectionnez/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 » :
Sélectionnezsysop:/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
Sélectionnezsysop:/var/spool/mail# ls chris testimap
Profitons-en pour voir ce qu'il y a dedans :
Sélectionnezsysop:/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.
Le message que l'on a reçu. C'est réconfortant.
2-3-2-5. 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) :
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 :
Sélectionnez/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.
Ça, c'est 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 ?
Sélectionnezsysop:/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.
Oui…
Ça voudrait dire que petit à petit, l'espace alloué va s'encombrer de déchets et finalement, 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 :
Sélectionnez/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 octet, ce qui prouve qu'il est vide.
Il est donc primordial, avec IMAP, de penser à compacter régulièrement les dossiers de la messagerie.
2-3-2-6. 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.
et nous envoyons un message :
Et chez le destinataire :
Ça 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 :
- dans Inbox, parce que le déplacement n'est en réalité qu'une copie suivie d'un effacement ;
- dans demotri ;
- dans Trash.
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.
Répétons-le, cette règle est écrite pour le compte [testimap@cyclope.maison.mrs !
Envoi du message :
Et réception :
2-3-2-7. 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 à 28 800 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é.
2-4. 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 aurons l'occasion de voir Cyrus plus en détail plus tard.
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.
3. Les commandes d'IMAP▲
Entrons maintenant dans le vif du sujet. Il y a quelques RFC qui définissent IMAP4 tel qu'il est utilisé actuellement. Les voici :
RFC Titre Commentaire 2060 INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1 Pour mémoire 2087 IMAP4 QUOTA extension 3501 INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1 Obsoletes : 2060 3502 Internet Message Access Protocol (IMAP) - MULTIAPPEND Extension 3691 Internet Message Access Protocol (IMAP) UNSELECT command 4314 IMAP4 Access Control List (ACL) Extension 4315 Internet Message Access Protocol (IMAP) - UIDPLUS extension 4466 Collected Extensions to IMAP4 ABNF Updates : 2088, 2342, 3501, 3502, 3516 4469 Internet Message Access Protocol (IMAP) CATENATE Extension Updates : 3501, 3502 4978 The IMAP COMPRESS Extension 5032 WITHIN Search Extension to the IMAP Protocol Updates : 3501 Et voici la liste des commandes, avec les RFC qui y font référence.
Commande RFC APPEND RFC 3501, RFC 3502, RFC 4466, RFC 4469 AUTHENTICATE RFC 3501 CAPABILITY RFC 3501 CHECK RFC 3501 CLOSE RFC 3501 COMPRESS RFC 4978 COPY RFC 3501 CREATE RFC 3501, RFC 4466 DELETE RFC 3501 DELETEACL RFC 4314 EXAMINE RFC 3501, RFC 4466 EXPUNGE RFC 3501 FETCH RFC 3501, RFC 4466 GETACL RFC 4314 GETQUOTA RFC 2087 GETQUOTAROOT RFC 2087 LIST RFC 3501 LISTRIGHTS RFC 4314 LOGIN RFC 3501 LOGOUT RFC 3501 LSUB RFC 3501 MYRIGHTS RFC 4314 NOOP RFC 3501 RENAME RFC 3501, RFC 4466 SEARCH RFC 3501, RFC 5032 SELECT RFC 3501, RFC 4466 SETACL RFC 4314 SETQUOTA RFC 2087 STARTTLS RFC 3501 STATUS RFC 3501 STORE RFC 3501, RFC 4466 SUBSCRIBE RFC 3501 UID RFC 3501, RFC 4315, RFC 4466 UNSELECT RFC 3691 UNSUBSCRIBE RFC 3501 X<atom> RFC 3501 Au minimum, le RFC 3501 gagne à être lu pour mieux comprendre ce qui suit. Les commandes en gras seront plus particulièrement observées.
3-1. Petit dialogue en IMAP▲
Suit un dialogue tout simple, entre le MUA Thunderbird et un serveur IMAP (Dovecot) configuré pour accepter les échanges en plaintext. Le compte lu n'a pas de dossiers particuliers, à part la « corbeille » (Trash). Il n'y a pas de nouveaux messages dans la boite. On peut difficilement faire plus simple, comme le montre l'illustration.
SélectionnezNo. Time Source Destination Protocol Info 4 0.000665 janus.maison.mrs pchris.maison.mrs IMAP Response: * OK Dovecot ready. 5 0.010322 pchris.maison.mrs janus.maison.mrs IMAP Request: 1 capability 7 0.010724 janus.maison.mrs pchris.maison.mrs IMAP Response: * CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND UNSELECT LITERAL+ IDLE CHILDREN NAMESPACE LOGIN-REFERRALS QUOTA STARTTLS AUTH=PLAIN 8 0.056690 pchris.maison.mrs janus.maison.mrs IMAP Request: 2 authenticate plain 9 0.057215 janus.maison.mrs pchris.maison.mrs IMAP Response: + 10 0.057487 pchris.maison.mrs janus.maison.mrs IMAP Request: AHN5c29wQG1haXNvbi5tcnMAd3preHJsZQ== 12 1.748651 janus.maison.mrs pchris.maison.mrs IMAP Response: 2 OK Logged in. 13 1.749334 pchris.maison.mrs janus.maison.mrs IMAP Request: 3 namespace 15 1.750784 janus.maison.mrs pchris.maison.mrs IMAP Response: * NAMESPACE (("" ".")) NIL NIL 16 1.752712 pchris.maison.mrs janus.maison.mrs IMAP Request: 4 lsub "" "*" 17 1.753294 janus.maison.mrs pchris.maison.mrs IMAP Response: * LSUB () "." "Trash" 18 1.754174 pchris.maison.mrs janus.maison.mrs IMAP Request: 5 list "" "INBOX" 19 1.754645 janus.maison.mrs pchris.maison.mrs IMAP Response: * LIST (\HasNoChildren) "." "INBOX" 20 1.762273 pchris.maison.mrs janus.maison.mrs IMAP Request: 6 select "INBOX" 21 1.763705 janus.maison.mrs pchris.maison.mrs IMAP Response: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) 22 1.764358 pchris.maison.mrs janus.maison.mrs IMAP Request: 7 getquotaroot "INBOX" 23 1.765468 janus.maison.mrs pchris.maison.mrs IMAP Response: * QUOTAROOT "INBOX" "" 24 1.765912 pchris.maison.mrs janus.maison.mrs IMAP Request: 8 UID fetch 1:* (FLAGS) 25 1.767333 janus.maison.mrs pchris.maison.mrs IMAP Response: * 1 FETCH (FLAGS (\Seen) UID 1) 26 1.774399 pchris.maison.mrs janus.maison.mrs IMAP Request: 9 IDLE 27 1.775210 janus.maison.mrs pchris.maison.mrs IMAP Response: + idling 29 8.352640 pchris.maison.mrs janus.maison.mrs IMAP Request: DONE 30 8.352984 janus.maison.mrs pchris.maison.mrs IMAP Response: 9 OK Idle completed. 31 8.353243 pchris.maison.mrs janus.maison.mrs IMAP Request: 10 close 32 8.354027 janus.maison.mrs pchris.maison.mrs IMAP Response: 10 OK Close completed. 33 8.354250 pchris.maison.mrs janus.maison.mrs IMAP Request: 11 logout 34 8.354431 janus.maison.mrs pchris.maison.mrs IMAP Response: * BYE Logging out 35 8.354688 janus.maison.mrs pchris.maison.mrs IMAP Response: 11 OK Logout completed.
Pas moins de 11 commandes sont envoyées au serveur. Regardons-les de plus près.
Commande Description capability demande la liste des possibilités que le serveur supporte. authenticate indique au serveur un mécanisme d'authentification. Si le serveur supporte le mécanisme d'authentification demandé, il exécute un échange protocolaire d'authentification afin d'authentifier et identifier le client. Il est aussi possible d'utiliser la commande login, plus rudimentaire car elle ne supporte que le nom d'utilisateur et son mot de passe en texte clair. namespace Pour aller vite, cette commande retourne ce qu'il faut pour que l'utilisateur puisse connaître les dossiers auxquels il peut accéder et souscrire, ce qui peut inclure les dossiers partagés, prévus dans le protocole IMAP. lsub permet d'obtenir à partir d'un point de référence la liste de dossiers auxquels le client a souscrit (qu'il désire voir dans son client). list permet d'obtenir à partir d'un point de référence la liste de dossiers existants. select sélectionne une boite aux lettres, ainsi les messages dans la boite aux lettres sont accessibles. Cette commande renvoie le nombre total de messages (EXISTS), et le nombre de nouveaux messages (RECENT). getquotaroot Comme son nom le laisse penser, cette commande renvoie l'état d'occupation de l'espace alloué, lorsque les quotas sont activés sur le serveur IMAP. uid s'utilise avec les commandes COPY, FETCH, STORE ou encore SEARCH. Son utilité est de renvoyer un index unique plutôt qu'un numéro de séquence, comme le feraient les commandes COPY, FETCH, STORE et SEARCH. fetch cette commande dispose d'une syntaxe assez complexe. Il est possible d'obtenir par elle de nombreuses informations sur un message ou un lot de messages. Dans l'exemple, Thunderbird se contente de récupérer les drapeaux attachés à chaque message présent dans INBOX. idle lorsque le serveur supporte cette commande, il permet au client d'être informé en temps réel de l'arrivée de nouveaux messages. close assez similaire à EXPUNGE, cette commande détruit de façon définitive tous les messages qui ont le drapeau deleted. Elle ne renvoie pas de compte rendu, comme le fait EXPUNGE. Thunderbird n'envoie pas cette commande par défaut. Il faut le lui indiquer dans sa configuration avancée, comme expliqué plus loin. logout Logout met fin à la session IMAP. Comme nous n'allons pas coder un client IMAP, nous n'irons pas beaucoup plus loin. Il est vivement recommandé, si l'on désire approfondir ce protocole, de s'installer un serveur SMTP et un serveur IMAP et de jouer avec par l'entremise de Telnet. Nous allons d'ailleurs avoir dans la suite un petit aperçu de la complexité de ce jeu.
3-2. Points de repère▲
Encore une fois, rien ne vaut la lecture du RFC 3501 (ce ne sera pas faute d'avoir insisté). Voici tout de même quelques points forts du protocole.
3-2-1. Port par défaut▲
Un serveur IMAP écoute par défaut sur le port 143. Si l'on n'utilise ni TLS ni IMAPS, l'échange se fait en texte clair (y compris éventuellement le nom d'utilisateur et le mot de passe) et Telnet permet de jouer aux MUA les plus évolués.
3-2-2. Syntaxe▲
Premier point, les commandes doivent être indexées, contrairement à POP. Autrement dit, chaque commande doit être précédée d'un index unique. Ceci permet dans certaines conditions d'envoyer au serveur une nouvelle commande alors que l'on n'a pas encore reçu la réponse de la précédente.
3-2-3. Les « flags »▲
Les commandes peuvent être envoyées en caractères majuscules ou en minuscules. Il vaut mieux le faire en majuscules.
\Seen Le message a été lu. \Answered Il a été répondu au message. \Flagged Le message est marqué pour lui donner une attention particulière. \Deleted Le message est supprimé pour que plus tard un EXPUNGE ou un CLOSE puisse le supprimer physiquement sur le serveur. \Draft Le message n'a pas été entièrement composé. Il est marqué en tant que brouillon. \Recent Le message est arrivé dans cette boite aux lettres après la dernière consultation de celle-ci. Les sessions ultérieures ne verront pas l'état \Recent pour ce message. Ce drapeau ne peut être modifié par le client. S'il n'est pas possible de déterminer si oui ou non, cette session est la première session a être notifiée du message, alors ce message DEVRA (SHOULD) être considéré comme récent. 3-2-4. Quelques commandes utiles▲
Il existe des commandes qui peuvent être utilisées sans authentification préalable (très peu) et d'autres qui ne peuvent l'être qu'après avoir été authentifié.
3-2-4-1. CAPABILITY▲
C'est une commande importante, elle permet au client de savoir ce dont le serveur est capable. Tous les serveurs IMAP n'ont pas les mêmes possibilités. Cette commande peut être envoyée au serveur avant l'authentification. Il est même recommandé de le faire, de manière à choisir le moyen d'authentification le plus approprié. Exemples :
un serveur uw-imapd
Sélectionnez10 capability * CAPABILITY IMAP4REV1 LITERAL+ IDLE UIDPLUS NAMESPACE CHILDREN MAILBOX-REFERRALS BINARY UNSELECT ESEARCH WITHIN SCAN SORT THREAD=REFERENCES THREAD=ORDEREDSUBJECT MULTIAPPEND SASL-IR LOGIN-REFERRALS STARTTLS LOGINDISABLED 10 OK CAPABILITY completed
un serveur Dovecot
Sélectionnez10 capability * CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND UNSELECT LITERAL+ IDLE CHILDREN NAMESPACE LOGIN-REFERRALS QUOTA STARTTLS AUTH=PLAIN 10 OK CAPABILITY completed
un autre serveur Dovecot, configuré différemment
Sélectionnez10 capability * CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND UNSELECT LITERAL+ IDLE CHILDREN NAMESPACE LOGIN-REFERRALS STARTTLS AUTH=PLAIN 10 OK CAPABILITY completed
un serveur Courier-imapd
Sélectionnez10 capability * CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS LOGINDISABLED 10 OK CAPABILITY completed
un serveur Cyrus-imapd
Sélectionnez10 capability * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ MAILBOX-REFERRALS NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE IDLE STARTTLS LOGINDISABLED 10 OK Completed
Notez STARTTLS et LOGINDISABLED. L'une permet de passer en mode chiffré, l'autre indique que la commande LOGIN qui passe le nom d'utilisateur et le mot de passe en clair n'est pas acceptée par le serveur.
3-2-4-2. LSUB et LIST▲
Ces deux commandes permettent de savoir quels sont les répertoires souscrits et existants. Exemple :
Sélectionnez* OK Dovecot ready. 10 login chris@maison.mrs epikoi 10 OK Logged in. 20 lsub "*" "*" * LSUB () "." "Trash" 20 OK Lsub completed. 30 list "*" "*" * LIST (\HasNoChildren) "." "Trash" * LIST (\HasNoChildren) "." "INBOX" 30 OK List completed. 40 unsubscribe "Trash" 40 OK Unsubscribe completed. 50 lsub "*" "*" 50 OK Lsub completed. 60 list "*" "*" * LIST (\HasNoChildren) "." "Trash" * LIST (\HasNoChildren) "." "INBOX" 60 OK List completed. 70 logout * BYE Logging out 70 OK Logout completed. Connection closed by foreign host.
Au début de la session, LSUB dit que chris@maison.mrs est abonné au dossier Trash. La commande LIST indique qu'il y a un autre dossier : INBOX. Mais à celui-ci l'utilisateur est obligatoirement abonné.
La commande UNSUBSCRIBE permet de se désabonner à Trash. En effet la commande LSUB n'indique plus rien, ce qui ne veut pas dire que le dossier n'existe plus, puisque la commande LIST l'affiche toujours.
3-2-4-3. SELECT▲
Permet de sélectionner un dossier et d'avoir un compte rendu de son contenu. Pour les besoins, envoyons un message à chris@maison.mrs et manipulons un peu :
Sélectionnez20 select INBOX * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted. * 6 EXISTS * 1 RECENT * OK [UNSEEN 5] First unseen. * OK [UIDVALIDITY 1216295789] UIDs valid * OK [UIDNEXT 7] Predicted next UID 20 OK [READ-WRITE] Select completed.
Le fait de sélectionner INBOX nous apprend principalement que dedans il y a :
- six messages ;
- un est RECENT ;
- le premier message non lu a l'index 5.
3-2-4-4. UID et FETCH▲
Pour en savoir plus, il faut utiliser ce couple infernal, avec la bonne syntaxe. Ici, nous voulons juste avoir le détail des FLAGS pour tous les messages présents dans INBOX :
Sélectionnez30 uid fetch 1:* (FLAGS) * 1 FETCH (FLAGS (\Seen) UID 1) * 2 FETCH (FLAGS (\Seen) UID 2) * 3 FETCH (FLAGS (\Seen) UID 3) * 4 FETCH (FLAGS (\Seen) UID 4) * 5 FETCH (FLAGS () UID 5) * 6 FETCH (FLAGS (\Recent) UID 6) 30 OK Fetch completed.
Ce qui nous apprend que :
- les messages 1 à 4 ont été lus ;
- le message 5 était déjà présent lors de la dernière consultation, mais n'a pas été lu ;
- le message 6 est Recent. Il n'était pas présent lors de la dernière consultation.
Est-ce à dire que le seul fait d'ouvrir une session IMAP peut changer des flags ? Absolument. La preuve :
Sélectionnez40 logout 40 OK Logout completed. Connection closed by foreign host. chris@pchris2:~$ telnet janus.maison.mrs 143 Trying 192.168.0.18... Connected to janus.maison.mrs. Escape character is '^]'. * OK Dovecot ready. 10 login chris@maison.mrs epikoi 10 OK Logged in. 20 select "INBOX" * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted. * 6 EXISTS * 0 RECENT * OK [UNSEEN 5] First unseen. * OK [UIDVALIDITY 1216295789] UIDs valid * OK [UIDNEXT 7] Predicted next UID 20 OK [READ-WRITE] Select completed. 30 uid fetch 1:* (FLAGS) * 1 FETCH (FLAGS (\Seen) UID 1) * 2 FETCH (FLAGS (\Seen) UID 2) * 3 FETCH (FLAGS (\Seen) UID 3) * 4 FETCH (FLAGS (\Seen) UID 4) * 5 FETCH (FLAGS () UID 5) * 6 FETCH (FLAGS () UID 6) 30 OK Fetch completed.
Le seul fait d'avoir fermé la session IMAP puis d'en avoir ouvert une autre fait que le message 6 n'est plus Recent. Soyons clairs. Ceci ne veut pas dire qu'il a été lu. Un message lu a le flag Seen. La preuve :
Sélectionnez40 uid FETCH 6 BODY[HEADER] * 6 FETCH (UID 6 FLAGS (\Seen) BODY[HEADER] {811} Return-Path: <root@janus.nain-t.net> Delivered-To: chris@maison.mrs Received: from localhost (localhost [127.0.0.1]) by janus.nain-t.net (Postfix) with ESMTP id C47C64000B3 for <chris@maison.mrs>; Sun, 20 Jul 2008 17:58:32 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at janus.nain-t.net Received: from janus.nain-t.net ([127.0.0.1]) by localhost (janus.nain-t.net [127.0.0.1]) (amavisd-new, port 0024) with ESMTP id UPxwk-p3hN85 for <chris@maison.mrs>; Sun, 20 Jul 2008 17:58:17 +0200 (CEST) Received: by janus.nain-t.net (Postfix, from userid 0) id C886740009C; Sun, 20 Jul 2008 17:58:17 +0200 (CEST) To: chris@maison.mrs Subject: test IMAP Message-Id: <20080720155817.C886740009C@janus.nain-t.net> Date: Sun, 20 Jul 2008 17:58:17 +0200 (CEST) From: root@janus.nain-t.net (root) ) 40 OK Fetch completed. 40 uid fetch 1:* (FLAGS) * 1 FETCH (FLAGS (\Seen) UID 1) * 2 FETCH (FLAGS (\Seen) UID 2) * 3 FETCH (FLAGS (\Seen) UID 3) * 4 FETCH (FLAGS (\Seen) UID 4) * 5 FETCH (FLAGS () UID 5) * 6 FETCH (FLAGS (\Seen) UID 6) 40 OK Fetch completed.
uid FETCH 6 BODY[HEADER] signifie que l'on souhaite lire le texte du message d'index 6, mais seulement son en-tête. Cette demande fait que par la suite, le message 6 est marqué comme Seen.
3-2-4-5. STARTTLS▲
Cette commande permet de négocier entre le client et le serveur une méthode de chiffrement des données échangées. Le serveur doit présenter un certificat (avec sa clé publique) et le client doit accepter ce certificat. Soit automatiquement parce qu'il est signé par une autorité de confiance connue, soit manuellement. STARTTLS employé avant AUTHANTICATE permet de chiffrer aussi la procédure de login. Il n'est que trop conseillé d'utiliser cette méthode si le serveur le permet.
3-2-5. Supprimer un message▲
Vous avez bien lu jusqu'au bout tous les RFC impliqués dans le protocole IMAP et vous avez compris qu'il n'y a pas de commande simple prévue pour supprimer un message. La commande DELETE s'applique à des dossiers, pas à des messages. Comment faire alors ? Il y a deux étapes à franchir, et il est absolument fondamental d'en comprendre le principe ! (Notez-le…)
3-2-5-1. Marqué avec \Deleted▲
Il faut utiliser la commande STORE pour placer sur le message visé le flag \Deleted :
Sélectionnez50 store 6 +FLAGS (\Deleted) * 6 FETCH (FLAGS (\Deleted \Seen)) 50 OK Store completed. 60 uid fetch 1:* (FLAGS) * 1 FETCH (FLAGS (\Seen) UID 1) * 2 FETCH (FLAGS (\Seen) UID 2) * 3 FETCH (FLAGS (\Seen) UID 3) * 4 FETCH (FLAGS (\Seen) UID 4) * 5 FETCH (FLAGS () UID 5) * 6 FETCH (FLAGS (\Deleted \Seen) UID 6) 60 OK Fetch completed.
Vous l'avez compris, ceci n'a rien effacé du tout. Nous avons juste ajouté le flag \Deleted au message d'index 6. Dans les MUA graphiques, cette opération peut être diversement visualisée :
- le message semble avoir disparu, ce qui est une très mauvaise approche, car l'utilisateur non averti peut penser légitimement que le message est détruit ;
- le message apparait barré, mais est toujours visible. C'est probablement la meilleure approche.
Devinez laquelle choisissent la plupart des MUA ? La première bien sûr. Non contents de ça, ils créent automatiquement un répertoire Trash dans lequel ils copient les messages marqués comme effacés. Moralité, l'utilisateur (non averti) croit faire du ménage, en fait, il ajoute des copies de messages en plus dans son espace, en attendant de vider la poubelle.
Ce détail a son importance lorsque l'on a atteint le quota fixé par le fournisseur du service. Refaire un peu de place peut s'avérer impossible si l'on n'a pas compris ce fonctionnement.
3-2-5-2. EXPUNGE ou CLOSE▲
EXPUNGE a pour mission de détruire physiquement tous les messages marqués \Deleted dans le dossier courant. CLOSE fait la même chose en refermant le dossier courant. Exemple :
Sélectionnez70 close 70 OK Close completed. 80 select "INBOX" * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted. * 5 EXISTS * 0 RECENT * OK [UNSEEN 5] First unseen. * OK [UIDVALIDITY 1216295789] UIDs valid * OK [UIDNEXT 7] Predicted next UID 80 OK [READ-WRITE] Select completed. 90 uid fetch 1:* (FLAGS) * 1 FETCH (FLAGS (\Seen) UID 1) * 2 FETCH (FLAGS (\Seen) UID 2) * 3 FETCH (FLAGS (\Seen) UID 3) * 4 FETCH (FLAGS (\Seen) UID 4) * 5 FETCH (FLAGS () UID 5) 90 OK Fetch completed.
Le message d'index 6, qui était marqué \Deleted a bien disparu de INBOX. EXPUNGE et CLOSE sont de vrais effaceurs.
Malheureusement, les MUA communs n'emploient pas par défaut ni l'un ni l'autre de ces effaceurs. Thunderbird peut le faire si on le lui demande, mais il faut passer par la configuration avancée et ce n'est pas trivial pour l'utilisateur (non averti).
3-3. Jouons un peu▲
Ami lecteur, le temps est maintenant venu pour toi de vérifier que tu as bien assimilé tout ceci. Pour t'aider dans cette quête, une petite épreuve. Voici une suite de commandes IMAP. À toi de comprendre ce qui est fait et d'expliquer.
3-3-1. État initial▲
3-3-2. Jeu de commandes▲
Nous nous connectons avec Telnet sur le serveur et envoyons les commandes suivantes :
Sélectionnez10 login chris@maison.mrs epikoi 10 OK Logged in. 20 list "*" "*" * LIST (\HasNoChildren) "." "Trash" * LIST (\HasNoChildren) "." "INBOX" 20 OK List completed. 30 create Dossier_1 30 OK Create completed. 40 create Dossier_1.SousDossier_1 40 OK Create completed. 50 create INBOX.Rangement 50 OK Create completed. 60 subscribe INBOX.Rangement 60 OK Subscribe completed. 70 subscribe Dossier_1 70 OK Subscribe completed. 80 subscribe Dossier_1.SousDossier_1 80 OK Subscribe completed. 90 select INBOX * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted. * 3 EXISTS * 0 RECENT * OK [UNSEEN 1] First unseen. * OK [UIDVALIDITY 1216295789] UIDs valid * OK [UIDNEXT 10] Predicted next UID 90 OK [READ-WRITE] Select completed. 100 rename Dossier_1 Archive 100 OK Rename completed. 110 list "*" "*" * LIST (\HasNoChildren) "." "Trash" * LIST (\HasChildren) "." "INBOX" * LIST (\HasChildren) "." "Archive" * LIST (\HasNoChildren) "." "INBOX.Rangement" * LIST (\HasNoChildren) "." "Archive.SousDossier_1" 110 OK List completed. 120 rename Archive.SousDossier_1 Archive.2007-2008 120 OK Rename completed. 130 uid fetch 1:* (FLAGS) * 1 FETCH (FLAGS () UID 7) * 2 FETCH (FLAGS () UID 8) * 3 FETCH (FLAGS () UID 9) 130 OK Fetch completed. 140 copy 1:2 Archive.2007-2008 140 OK Copy completed. 150 copy 3 INBOX.Rangement 150 OK Copy completed. 160 store 1:3 +FLAGS (\Deleted) * 1 FETCH (FLAGS (\Deleted)) * 2 FETCH (FLAGS (\Deleted)) * 3 FETCH (FLAGS (\Deleted)) 160 OK Store completed. 170 expunge * 3 EXPUNGE * 2 EXPUNGE * 1 EXPUNGE 170 OK Expunge completed. 180 logout * BYE Logging out 180 OK Logout completed. Connection closed by foreign host.
Ami lecteur, peux-tu prévoir ce que le client va désormais trouver dans son Thunderbird, à la prochaine ouverture ?
3-3-3. État final▲
Ami lecteur, avais-tu vu le piège ?
Reprenons avec Telnet :
Sélectionnez10 login chris@maison.mrs epikoi 10 OK Logged in. 20 lsub "*" "*" * LSUB () "." "INBOX.Rangement" * LSUB () "." "Dossier_1" * LSUB () "." "Dossier_1.SousDossier_1" 20 OK Lsub completed.
Ce n'est pas parce que l'on a renommé les dossiers que les abonnements ont été mis à jour. Il faut le faire manuellement :
Sélectionnez30 unsubscribe Dossier_1 30 OK Unsubscribe completed. 40 unsubscribe Dossier_1.SousDossier_1 40 OK Unsubscribe completed. 50 list "*" "*" * LIST (\HasNoChildren) "." "Trash" * LIST (\HasChildren) "." "INBOX" * LIST (\HasChildren) "." "Archive" * LIST (\HasNoChildren) "." "INBOX.Rangement" * LIST (\HasNoChildren) "." "Archive.2007-2008" 50 OK List completed. 60 subscribe Archive 60 OK Subscribe completed. 70 subscribe Archive.2007-2008 70 OK Subscribe completed. 80 logout * BYE Logging out 80 OK Logout completed.
Voilà qui devrait aller mieux :
Nettement. Les dossiers sont à jour et leur contenu aussi.
Puisque nous y sommes et puisque nous avons la main sur le serveur (Dovecot, en l'occurrence)…
Sélectionnezjanus:/home/virtual/mail/maison.mrs/chris/Maildir# ls -la total 44 drwx------ 9 vmail vmail 4096 2008-07-20 19:31 . drwx------ 3 vmail vmail 20 2008-07-17 13:56 .. drwx------ 5 vmail vmail 56 2008-07-20 19:10 .Archive drwx------ 5 vmail vmail 148 2008-07-20 19:35 .Archive.2007-2008 drwx------ 2 vmail vmail 6 2008-07-20 19:21 cur -rw------- 1 vmail vmail 144 2008-07-20 19:21 dovecot.index -rw------- 1 vmail vmail 20480 2008-07-20 19:21 dovecot.index.cache -rw------- 1 vmail vmail 2984 2008-07-20 19:23 dovecot.index.log -rw------- 1 vmail vmail 377 2008-07-20 19:05 dovecot-uidlist drwx------ 5 vmail vmail 148 2008-07-20 19:36 .INBOX.Rangement -rw------- 1 vmail vmail 138 2008-07-20 19:21 maildirsize drwx------ 2 vmail vmail 6 2008-07-20 19:05 new -rw------- 1 vmail vmail 42 2008-07-20 19:31 subscriptions drwx------ 2 vmail vmail 6 2008-07-20 19:05 tmp drwx------ 5 vmail vmail 148 2008-07-20 19:04 .Trash
Notez les analogies, mais INBOX n'y est pas ?
C'est normal. En fait, Dovecot range dans new les messages qui ne sont pas encore \Seen et dans cur les messages \Seen. INBOX est donc en réalité un « faux dossier » qui représente le contenu de new et de cur.
Nous sommes dans une architecture de type Maildir la plus courante pour faire de l'IMAP. Dovecot, comme Courier-imap rangent les messages à peu près de la même manière. En revanche, Cyrus-imap utilise une autre stratégie, mais pour le client comme pour le protocole, ceci importe peu.
3-4. Conclusion▲
Tout ceci avait pour but de montrer la supériorité d'IMAP sur son concurrent POP3. Sa plus grande complexité aussi.
IMAPS, tout comme POP3S, utilise une connexion entièrement chiffrée dès le départ, mais les protocoles demeurent identiques. IMAP, tout comme POP3, peut implémenter la commande STARTTLS, qui met en œuvre un chiffrement, mais après établissement de la connexion. De plus, comme il y a négociation, si le client invoque STARTTLS et que le serveur ne sait pas y répondre, il est possible de continuer sans chiffrement (suivant la configuration du MUA).
IMAPS n'utilise pas le port 143, mais le port 993.
4. Remerciements Developpez▲
Vous pouvez retrouver l'article original ici : L'Internet Rapide et Permanent. Christian Caleca a aimablement autorisé l'équipe « Réseaux » de Developpez.com à reprendre son article. Retrouvez tous les articles de Christian Caleca sur cette page.
Nos remerciements à ClaudeLELOUP pour la relecture orthographique de cet article.
N'hésitez pas à commenter cet article ! Commentez
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Christian Caleca. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
source : http://caleca.developpez.com/tutoriels/protocole-imap/
votre commentaire