Groupe de travail Réseau	M. Gahrns, Microsoft	
Request for Comments : 2193	septembre 1997	
Catégorie : En cours de normalisation	Traduction Claude Brière de L'Isle	

Références de boîtes aux lettres IMAP4

Statut du présent mémoire
Le présent document spécifie un protocole de l’Internet en cours de normalisation pour la communauté de l’Internet, et appelle à des discussions et suggestions pour son amélioration. Prière de se référer à l’édition en cours des "Normes officielles des protocoles de l’Internet" (STD 1) pour connaître l’état de la normalisation et le statut de ce protocole. La distribution du présent mémoire n’est soumise à aucune restriction.

1.	Résumé

Lorsque on traite avec de grandes quantités d'utilisateurs, de messages et de serveurs IMAP4 [RFC2060] dispersés géographiquement, il est souvent souhaitable de répartir les messages entre différents serveurs au sein d'une organisation. Par exemple, un administrateur peut choisir de mémoriser les boîtes aux lettres personnelles d'un utilisateur sur un serveur IMAP4 local, tout en mémorisant les boîtes aux lettres partagées à distance sur un autre serveur. Ce type de configuration est courant lorsque il est trop coûteux de mémoriser centralement toutes les données à cause des limitations de bande passante ou de ressources en mémoire.

Les références de boîtes aux lettres permettent aux clients d'accèder de façon transparente aux boîtes aux lettres qui sont réparties entre plusieurs serveurs IMAP4.

Un mécanisme de référence peut donner plus d'efficacité que la "méthode du mandataire" dans laquelle le serveur IMAP4 local contacte le serveur distant au nom du client, puis transfère chez lui les données du serveur distant, puis ensuite au client. La connexion directe du client au serveur distant du mécanisme de référence fait souvent une utilisation plus efficace de la bande passante, et n'exige pas que le serveur local se fasse passer pour le client lors de l'authentification auprès du serveur distant.

2.	Conventions utilisées dans ce document

Dans les exemples, "C:" et "S:" indiquent des lignes envoyées respectivement par le client et le serveur.

Un serveur de rattachement est un serveur IMAP4 qui contient la boîte entrante de l'utilisateur.

Une boîte aux lettres distante est une boîte aux lettres qui n'est pas hébergée sur le serveur de rattachement de l'utilisateur.

Un serveur distant est celui qui contient les boîtes aux lettres distantes.

Une boîte aux lettres partagée est une boîte aux lettres à laquelle plusieurs utilisateurs ont accès.

Une référence de boîte aux lettres IMAP est lorsque le serveur dirige le client sur une autre boîte aux lettres IMAP.

Les mots clés "DOIT", "NE DOIT PAS", "EXIGE", "DEVRA", "NE DEVRA PAS", "DEVRAIT", "NE DEVRAIT PAS", "RECOMMANDE",  "PEUT", et "FACULTATIF" dans ce document sont à interpréter comme décrit dans la [RFC2119].

3.	Introduction et généralités

Les serveurs IMAP4 qui prennent en charge cette extension DOIVENT faire la liste des mots clés MAILBOX-REFERRALS (références de boîte aux lettres) dans leur réponse CAPABILITY (capacités). Aucune action de client n'est nécessaire pour invoquer la capacité MAILBOX-REFERRALS dans un serveur.

Un serveur IMAP4 à capacité MAILBOX-REFERRALS NE DOIT PAS retourner de références qui résulteraient en références en boucle.

Une réponse de référence consiste en une réponse NON étiquetée et en un code de réponse REFERRAL. Le code de réponse REFERRAL DOIT contenir comme argument un ou plusieurs URL valides séparés par une espace comme défini dans la [RFC1738]. Si un serveur répond avec plusieurs URL pour un objet particulier, ils DOIVENT tous être du même type. Dans ce cas, l'URL DOIT être un URL IMAP, comme défini dans la [RFC2192]. Un client qui prend en charge l'extension REFERRALS DOIT être prêt pour tout type d'URL, mais il a seulement besoin d'être capable de traiter les URL IMAP.

Un serveur PEUT répondre avec plusieurs références de boîtes aux lettres IMAP si il y a plus d'une réplique de la boîte aux lettres. Cela permet la mise en œuvre d'un schéma d'équilibrage de charge ou de récupération sur défaillance. Le présent document ne traite pas de la façon dont un serveur conserve la synchronisation de plusieurs répliques d'une boîte aux lettres.

Si le serveur a un ordre préféré dans lequel le client devrait tenter d'accéder aux URL, l'URL préféré DEVRAIT figurer en premier sur la liste, les URL restants étant présentés dans l'ordre décroissant de préférence. Si plusieurs références sont données pour une boîte aux lettres, un serveur devrait savoir qu'il y a des problèmes de synchronisation pour un client si les UIDVALIDITY (durée de validité d'identifiant univoque) des boîtes aux lettres auxquelles il est fait référence sont différents.
Une référence de boîte aux lettres IMAP peut être donnée en réponse à une commande IMAP qui spécifie une boîte aux lettres comme argument.

Exemple :
A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/REMOTE]Remote Mailbox

Note : user;AUTH=* est spécifié comme exigé par la [RFC2192] pour éviter qu'un client retombe sur une connexion anonyme.
Les boîtes aux lettres distantes et leurs subordonnées, qui ne sont accessibles que via des références NE DEVRAIENT PAS apparaître dans les réponses LIST et LSUB fournies au serveur de rattachement de l'utilisateur. Elles DOIVENT apparaître dans les réponses RLIST et RLSUB fournies au serveur de rattachement de l'utilisateur. Les références hiérarchiques, dans lesquelles il serait exigé d'un client qu'il se connecte au serveur distant pour produire une commande LIST pour découvrir les subordonnées d'une boîte aux lettres ne sont pas traitées dans le présent document.

Par exemple, si des boîtes aux lettres partagées n'étaient accessibles que via des références sur un serveur distant, une commande RLIST "" "#SHARED/%" retournerait la même réponse si elle était produite au serveur de rattachement de l'usager ou au serveur distant.

Note :	Les boîtes aux lettres qui sont disponibles sur le serveur de rattachement de l'usager n'ont pas besoin d'être disponibles sur le serveur distant. De plus, il peut y avoir des boîtes aux lettres disponibles supplémentaires sur le serveur distant, mais elles ne seront pas accessibles au client via les références sauf si elles apparaissent dans la réponse LIST à la commande RLIST envoyée au serveur de rattachement de l'usager.
Un client capable de MAILBOX-REFERRALS va produire les commandes RLIST et RLSUB à la place des LIST et LSUB. Les commandes RLIST et RLSUB se comportent de façon identique à leurs contreparties LIST et LSUB, excepté que les boîtes aux lettres distantes sont retournées en plus des boîtes aux lettres distantes dans les réponses LIST et LSUB. Cela évite d'afficher les boîtes aux lettres distantes inaccessibles chez un client qui n'a pas la capacité MAILBOX-REFERRALS.

4.1	Références SELECT, EXAMINE, DELETE, SUBSCRIBE, UNSUBSCRIBE, STATUS et APPEND
Un serveur IMAP4 PEUT répondre à une commande SELECT, EXAMINE, DELETE, SUBSCRIBE, UNSUBSCRIBE, STATUS ou APPEND avec une ou plusieurs références de boîte aux lettres IMAP pour indiquer au client que la boîte aux lettres est hébergée sur un serveur distant.

Lorsque un client traite une référence de boîte aux lettres IMAP, il va ouvrir une nouvelle connexion ou utiliser une connexion existante avec le serveur distant de façon à être capable de produire les commandes nécessaires pour traiter la boîte aux lettres distante.

Exemple :  <connexion IMAP4 au serveur de rattachement>
C: A001 DELETE "SHARED/FOO"
S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/SHARED/FOO]
Boîte aus lettres distante. Essayer SERVER2.

<Le client a établi une seconde connexion au SERVER2 et produit la commande DELETE sur la boîte aux lettres de référence>

S: * OK IMAP4rev1 serveur prêt
C: B001 AUTHENTICATE KERBEROS_V4
<échange d'authentification>
S: B001 OK l'usager est authentifié
C: B002 DELETE "SHARED/FOO"
S: B002 OK DELETE terminé

Exemple :  <connexion IMAP4 au serveur de rattachement>
C: A001 SELECT REMOTE
S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/REMOTE
	IMAP://user;AUTH=*@SERVER3/REMOTE] Remote mailbox.
	Essayer SERVER2 ou SERVER3.

<Le client ouvre une seconde connexion au serveur distant, et produit les commandes nécessaires pour traiter les éléments de la boîte aux lettres distante>

S: * OK IMAP4rev1 serveur prêt
C: B001 AUTHENTICATE KERBEROS_V4
<échange d'authentification>
S: B001 OK l'usager est authentifié
C: B002 SELECT REMOTE
S: * 12 EXISTS
S: * 1 RECENT
S: * OK [UNSEEN 10] Le message 10 est le premier non lu
S: * OK [UIDVALIDITY 123456789]
S: * FLAGS (Répondu, Marqué, Supprimé, Lu, Projet)
S: * OK [PERMANENTFLAGS (Répondu, Supprimé, Lu ]
S: B002 OK [LECTURE-ÉCRITURE] Choisi terminé

C: B003 FETCH 10:12 RFC822
S: * 10 FETCH . . .
S: * 11 FETCH . . .
S: * 12 FETCH . . .
S: B003 OK FETCH terminé

<Le client a terminé le traitement de la boîte aux lettres DISTANTE et veut traiter une boîte aux lettres sur son serveur de rattachement>

C: B004 LOGOUT
S: * BYE IMAP4rev1 déconnexion du serveur
S: B004 OK LOGOUT Terminée

<Le client continue avec la première connexion>

C: A002 SELECT INBOX
S: * 16 EXISTS
S: * 2 RECENT
S: * OK [UNSEEN 10] Le message 10 est le premier non lu
S: * OK [UIDVALIDITY 123456789]
S: * FLAGS (Answered Flagged Deleted Seen Draft)
S: * OK [PERMANENTFLAGS (Answered Deleted Seen ]
S: A002 OK [READ-WRITE] Selected completed

4.2	CREATE Referrals
Un serveur IMAP4 PEUT répondre à la commande CREATE avec une ou plusieurs références de boîte aux lettres IMAP, si il souhaite amener le client à produire la commande CREATE auprès d'un autre serveur. Le serveur peut employer tout moyen, comme d'examiner la hiérarchie des noms de boîte aux lettres spécifiés, pour déterminer sur quel serveur la boîte aux lettres devrait être créée.

Exemple :
C: A001 CREATE "SHARED/FOO"
S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/SHARED/FOO]
La boîte aux lettres devrait être créée sur un serveur distant

Autrement, parce qu'un serveur de rattachement est obligé de conserver une liste des boîtes aux lettres distantes de référence, un serveur PEUT permettre la création d'une boîte aux lettres qui va finalement résider sur un serveur distant plutôt que sur le serveur de rattachement, et fournir des références sur les commandes suivantes qui manipulent la boîte aux lettres.

Exemple :
C: A001 CREATE "SHARED/FOO"
S: A001 OK CREATE réussie

C: A002 SELECT "SHARED/FOO"
S: A002 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/SHARED/FOO]
Boîte aux lettres distante. Essayer SERVER2

4.3	RENAME Referrals
Un serveur IMAP4 PEUT répondre à la commande RENAME avec une ou plusieurs paires de références de boîte aux lettres IMAP. Dans chaque paire de références de boîte aux lettres IMAP, la première est un URL pointant sur le nom de la boîte aux lettres existante et le second est un URL sur le nouveau nom demandé de boîte aux lettres.

Si dans une paire de références de boîte aux lettres IMAP, les URL de boîte aux lettres existante et nouvelle sont sur des serveurs différents, les serveurs distants ne sont pas capables d'effectuer l'opération RENAME. Pour réaliser le même comportement de serveur RENAME, le client PEUT produire les commandes constitutives CREATE (créer), FETCH (aller chercher), APPEND (ajouter), et DELETE (supprimer) sur les deux serveurs.

Si au sein d'une paire de références de boîte aux lettres IMAP, les URL des boîtes aux lettres existante et nouvelle sont sur le même serveur, c'est l'indication que le serveur actuellement connecté n'est pas capable d'effectuer l'opération. Le client peut simplement refaire la commande RENAME sur le serveur distant.

Exemple :
C: A001 RENAME FOO BAR
S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER1/FOO
	IMAP://user;AUTH=*@SERVER2/BAR] Incapable de renommer la boîte aux lettres sur les serveurs

Comme les noms de la boîte aux lettres existante et de la nouvelle boîte aux lettres sont sur des serveurs différents, le client sera obligé de faire une connexion sur les deux serveurs et de produire les commandes constitutives nécessaires pour réaliser le RENAME.

Exemple :
C: A001 RENAME FOO BAR
S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/FOO
	IMAP://user;AUTH=*@SERVER2/BAR] Incapable de renommer la boîte aux lettres située sur SERVER2

Comme les deux boîtes aux lettres, existante et nouvelle, sont sur le même serveur distant, le client peut simplement faire une connexion avec le serveur distant et produire à nouveau la commande RENAME.

4.4	COPY Referrals
Un serveur IMAP4 PEUT répondre à une commande COPY avec une ou plusieurs références de boîte aux lettres IMAP. Cela indique que la boîte au lettres de destination est sur un serveur distant. Pour réaliser le même comportement de serveur que COPY, le client PEUT produire les commandes constituves FETCH et APPEND sur les deux serveurs.

Exemple :
C: A001 COPY 1 "SHARED/STUFF"
S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/SHARED/STUFF]
	Incapable de copier le ou les messages sur SERVER2.

5.1	Commande RLIST
Arguments : nom de référence, nom de boîte aux lettres, avec des caractères génériques possibles
Réponses : réponses non étiquetées : LIST
Résultat :	OK - RLIST terminée
	NO - RLIST échec
	BAD – commande inconnue ou arguments invalides

La commande RLIST se comporte de façon identique à sa contrepartie LIST, excepté que les boîtes aux lettres distantes sont retournées enplus des boîtes aux lettres locales dans les réponses LIST.

5.2	Commande RLSUB
Arguments : nom de référence, nom de boîte aux lettres, avec des caractères génériques possibles
Réponses : réponses non étiquetées : LSUB
Résultat :	OK - RLSUB terminée
	NO - RLSUB échec
	BAD - commande inconnue ou arguments invalides

La commande RLSUB se comporte de façon identique à sa contrepartie LSUB, excepté que les boîtes aux lettres distantes sont retournées en plus des boîtes aux lettres locales dans les réponses LSUB.

6.	Syntaxe formelle

La spécification de syntaxe suivante utilise la forme Backus-Naur augmentée (BNF) décrite dans la [RFC2234].

list_mailbox = <list_mailbox> comme défini dans la [RFC2060]

mailbox = <mailbox> comme défini dans la [RFC2060]

mailbox_referral = <tag> SPACE "NO" SPACE <referral_response_code> (text / text_mime2)
	; Voir dans la [RFC2060] les définitions de <tag>, text et text_mime2

referral_response_code = "[" "REFERRAL" 1*(SPACE <url>) "]"
	; Voir dans la [RFC1738] la définition de <url>

rlist = "RLIST" SPACE mailbox SPACE list_mailbox

rlsub = "RLSUB" SPACE mailbox SPACE list_mailbox

6.	Considérations pour la sécurité

Le mécanisme de référence IMAP4 utilise les URL IMAP, et à ce titre subit les mêmes considérations de sécurité que les URL généraux de l'Internet [RFC1738], et en particulier les URL IMAP [RFC2192].

Avec la capacité MAILBOX-REFERRALS, il est éventuellement plus facile de mettre en œuvre un serveur félon qui injecte des réponses de références falsifiées qui dirigent un usager sur une boîte aux lettres incorrecte. Bien que les références réduisent les efforts nécessaires pour écrire un tel serveu, la réponse de référence rend plus facile la détection de l'intrusion.

7.	Références

[RFC2060]	M. Crispin, "Protocole d'accès au message Internet - version 4rev1", décembre 1996. (Remplace RFC1730) (Obsolète, voir RFC3501) (P.S.)

[RFC2192]	C. Newman, "Schéma d'URL IMAP", septembre 1997. (Obsolète, voir RFC5092) (P.S.)

[RFC1738]	T. Berners-Lee et autres, "Localisateurs uniformes de ressource (URL)", décembre 1994. (P.S., Obsolète, voir les RFC4248  et 4266 )

[RFC2119]	S. Bradner, "Mots clés à utiliser dans les RFC pour indiquer les niveaux d'exigence", BCP 14, mars 1997.

[RFC2234]	D. Crocker et P. Overell, "BNF augmenté pour les spécifications de syntaxe : ABNF", novembre 1997. (Obsolète, voir RFC5234)

8.	Remerciements

De nombreuses suggestions précieuses ont été reçues dans des discussions privées et sur la liste de diffusion du groupe de travail IMAP4. En particulier, Raymond Cheng, Mark Crispin, Mark Keasling, Chris Newman et Larry Osterman ont fait des contributions significatives au présent document.

9.	Adresse de l'auteur

Mike Gahrns
Microsoft
One Microsoft Way
Redmond, WA, 98072
USA
téléphone : + 1 (206) 936-9833
mél : mikega@microsoft.com