Groupe de travail Réseau	M. Crispin	
Request for Comments : 4315	décembre 2005	
RFC rendue obsolète : 2359		
Catégorie : Sur la voie de la normalisation	Traduction Claude Brière de L'Isle	

Extension UIDPLUS à IMAP4

Statut de ce mémoire
Le présent document spécifie un protocole en cours de normalisation de l’Internet 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.

Notice de copyright
Copyright (C) The Internet Society (2005).

Résumé
L'extension UIDPLUS du protocole d'accès au message Internet (IMAP, Internet Message Access Protocol) fournit un ensemble de caractéristique destinées à réduire la quantité de temps et de ressources utilisée par certaines opérations de client. La caractéristique UIDPLUS est principalement destinée aux client en utilisation déconnectée.

 	1.	Introduction et généralités

L'extension UIDPLUS est présente dans toute mise en œuvre de serveur IMAP qui retourne à la commande CAPABILITY "UIDPLUS" comme une des capacités prises en charge.

L'extension UIDPLUS définit une commande supplémentaire. De plus, le présent document recommande de nouveaux codes de réponse d'état dans IMAP qui DEVRAIENT être retournés par toutes les mises en œuvre de serveur, sans considération de la mise en œuvre de l'extension UIDPLUS.

Les facilités ajoutées aux caractéristiques dans UIDPLUS sont des optimisations ; les clients peuvent fournir des fonctionnalités équivalentes, quoique moins efficaces, en utilisant les facilités du protocole de base.

 	1.1	Conventions utilisées dans ce document
Dans les exemples, "C:" et "S:" indiquent les lignes envoyées respectivement par le client et le serveur.

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

Un "ensemble UID" est similaire à l'ensemble de séquences de la [RFC3501] ; cependant, la valeur "*" pour un numéro de séquence n'est pas permise.

 	2.	Commandes supplémentaires

La définition de commande qui suit est une extension du paragraphe 6.4 de la [RFC3501].

 	2.1	Commande UID EXPUNGE 
Arguments : ensemble de séquences

Données : réponses non étiquetée : EXPUNGE

Résultat : OK - purge achevée
                NO - échec de purge (par exemple, permission refusée)
                BAD - commande inconnue ou arguments invalides

La commande UID EXPUNGE (purge) supprime de façon permanente tous les messages qui ont à la fois le fanion \Deleted (supprimé) établi et un UID qui est inclus dans l'ensemble de séquences spécifié à partir de la boîte aux lettres actuellement choisie. Si un message n'a pas le fanion \Deleted ou a un UID qui n'est pas inclus dans l'ensemble de séquence spécifié, il n'est pas affecté.

Cette commande est particulièrement utile pour les clients en utilisation déconnectée. En utilisant UID EXPUNGE à la place de EXPUNGE lors d'une resynchronisation avec le serveur, le client peut s'assurer qu'il ne retire par inadvertance aucun message qui aurait été marqué \Deleted (supprimé) par d'autres clients entre le moment de la dernière connexion du client et celui où le client se resynchronise.

Si le serveur ne prend pas en charge la capacité UIDPLUS, le client devrait revenir à l'utilisation de la commande STORE pour supprimer temporairement le fanion \Deleted des messages qu'il ne veut pas supprimer, produisant ensuite la commande EXPUNGE. Finalement, le client devrait utiliser la commande STORE pour restaurer le fanion \Deleted sur les messages dans lesquels il a été temporairement supprimé.

Autrement, le client peut revenir à l'utilisation de juste la commande EXPUNGE, prenant le risque d'une suppression involontaire de certains messages.

Exemple :
C: A003 UID EXPUNGE 3000:3002
S: * 3 EXPUNGE
S: * 3 EXPUNGE
S: * 3 EXPUNGE
S: A003 OK UID EXPUNGE completed

 	3.	Codes de réponse supplémentaires

Les codes de réponse suivants sont des extensions aux codes de réponse définis au paragraphe 7.1 de la [RFC3501]. Avec des exceptions limitées, discutées ci-dessous, les mises en œuvre de serveur qui annoncent l'extension UIDPLUS DEVRAIENT retourner ces codes de réponse.

Dans le cas d'une boîte aux lettres qui a les permissions réglées de façon que le client puisse faire une COPY ou APPEND à la boîte aux lettres, mais pas de SELECT ou EXAMINE, le serveur NE DEVRAIT PAS envoyer un code de réponse APPENDUID ou COPYUID car cela divulguerait des informations sur la boîte aux lettres.

Dans le cas d'une boîte aux lettres qui a le statut de UIDNOTSTICKY (comme défini ci-dessous) le serveur PEUT omettre le code de réponse APPENDUID ou COPYUID car il n'est pas significatif.

Si le serveur ne retourne pas les codes de réponse APPENDUID ou COPYUID, le client peut découvrir ces informations en choisissant la boîte aux lettres de destination. La localisation des messages placés dans la boîte aux lettres de destination par COPY ou APPEND peut être déterminée en utilisant les commandes FETCH et/ou SEARCH (par exemple, pour Message-ID ou quelque marqueur unique placé dans le message dans un APPEND).

APPENDUID : suivi par le UIDVALIDITY de la boîte aux lettres de destination et l'UID alloué au message ajouté dans la boîte aux lettres de destination, il indique que le message a été ajouté à la boîte aux lettres de destination avec cet UID.
Si le serveur prend aussi en charge l'extension de la [RFC3502], et si plusieurs messages ont été ajoutés dans la commande APPEND, la seconde valeur est alors un ensemble d'UID contenant les UID alloués aux messages ajoutés, dans l'ordre de leur transmission dans la commande APPEND. Cet ensemble d'UID peut ne pas contenir d'UID étrangers ou le symbole "*".

Note : la forme ensemble d'UID du code de réponse APPENDUID NE DOIT PAS être utilisée si un seul message a été ajouté. En particulier, un serveur NE DOIT PAS envoyer une gamme telle que 123:123. Cela parce que un client qui ne prend pas en charge la [RFC3502] attend un seul UID et pas un ensemble d'UID.

Les UID sont alloués en ordre strictement ascendant dans la boîte aux lettres (voir au paragraphe 2.3.1 de la [RFC3501]) et les gammes d'UID sont comme dans la [RFC3501] ; en particulier, noter qu'une gamme de 12:10 est exactement équivalente à 10:12 et se réfère à la séquence 10,11,12.

Ce code de réponse est retourné dans une réponse OK étiquetée à la commande APPEND.

COPYUID : suivi par le UIDVALIDITY de la boîte aux lettres de destination, c'est un ensemble d'UID contenant les UID du ou des messages qui, dans la boîte aux lettres source, ont été copiés à la boîte aux lettres de destination et qui contiennent les UID alloués au ou aux messages copiés dans la boîte aux lettres de destination, il indique que le ou les messages ont été copiés à la boîte aux lettres de destination avec les UID déclarés.
L'ensemble d'UID de source est dans l'ordre où le ou les messages ont été copiés ; l'ensemble d'UID de destination correspond à l'ensemble d'UID de source et est dans le même ordre. Aucun des deux ensembles d'UID ne peut contenir d'UID étrangers ni le symbole "*".
Les UID sont alloués en ordre strictement ascendant dans la boîte aux lettres (voir le paragraphe 2.3.1.1 de la [RFC3501]) et les gammes d'UID sont comme dans la [RFC3501] ; en particulier, noter qu'une gamme de 12:10 est exactement équivalente à 10:12 et se réfère à la séquence 10,11,12.
Ce code de réponse est retourné dans une réponse OK étiquetée à la commande COPY.

UIDNOTSTICKY : La boîte aux lettres choisie est prise en charge par un magasin de messagerie qui ne prend pas en charge les UID persistants ; c'est-à-dire que UIDVALIDITY sera différent chaque fois que la boîte aux lettres est choisie. Par conséquent, APPEND ou COPY sur cette boîte aux lettres ne va pas retourner un code de réponse APPENDUID ou COPYUID.
Ce code de réponse est retourné dans une réponse NO non étiquetée à la commande SELECT.

Note : Les serveurs NE DEVRAIENT PAS avoir de magasins de messagerie UIDNOTSTICKY. Cette facilité existe pour prendre en charge les magasins de messagerie traditionnels dans lesquels il est techniquement infaisable de prendre en charge des UID persistants. Cela devrait être évité lors de la conception de nouveaux magasins de messagerie.

Exemple :
C: A003 APPEND saved-messages (\Seen) {297}
C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
C: From: Fred Foobar <foobar@exemple.com>
C: Subject: réunion de l'après midi
C: To: mooch@exemple.com
C: Message-Id: <B27397-0100000@exemple.com>
C: MIME-Version: 1.0
C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
C:
C: Salut Jean, penses-tu que nous devons nous réunir demain à 15:30 ?
C:
S: A003 OK [APPENDUID 38505 3955] APPEND terminé
C: A004 COPY 2:4 réunion
S: A004 OK [COPYUID 38505 304,319:320 3956:3958] Fait
C: A005 UID COPY 305:310 réunion
S: A005 OK¨Pas de message correspondant, donc rien n'est copié
C: A006 COPY 2 drôle
S: A006 OK Fait
C: A007 SELECT drôle
S: * 1 EXISTS
S: * 1 RECENT
S: * OK [UNSEEN 1] Message 1 est non vu pour la première fois
S: * OK [UIDVALIDITY 3857529045] Validité seulement de session
S: * OK [UIDNEXT 2] Prochain UID prédit
S: * NO [UIDNOTSTICKY] UID non persistants
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * OK [PERMANENTFLAGS (\Deleted \Seen)] Limited
S: A007 OK [READ-WRITE] SELECT terminé

Dans cet exemple, A003 et A004 montrent la réussite de l'ajout et de la copie dans une boîte aux lettres qui retourne les UID alloués aux messages. A005 est un exemple dans lequel aucun message n'a été copié ; c'est parce que dans A003, on voit que le message 2 avait l'UID 304, et le message 3 avait l'UID 319 ; donc, les UID de 305 à 310 n'existent pas (voir les explications au paragraphe 2.3.1.1 de la [RFC3501]). A006 est un exemple de message copié qui ne retourne pas de COPYUID ; et, comme attendu, A007 montre que le magasin de messagerie qui contient cette boîte aux lettres ne prend pas en charge les UID persistants.

 	4.	Syntaxe formelle

La syntaxe formelle est définie en utilisant l'ABNF [RFC4234], qui étend les règles d'ABNF définies dans la [RFC3501]. L'ABNF IMAP4 devrait être importé avant de tenter de valider ces règles.

append-uid = uniqueid
capability =/ "UIDPLUS"
command-select  =/ uid-expunge
resp-code-apnd  = "APPENDUID" SP nz-number SP append-uid
resp-code-copy = "COPYUID" SP nz-number SP uid-set SP uid-set
resp-text-code  =/ resp-code-apnd / resp-code-copy / "UIDNOTSTICKY"	; incorporé avant la règle d'expansion de atom [SP 1*<tout TEXT-CHAR sauf "]">] qui apparaît dans la [RFC3501]
uid-expunge = "UID" SP "EXPUNGE" SP sequence-set
uid-set = (uniqueid / uid-range) *("," uid-set)
uid-range = (uniqueid ":" uniqueid)	; deux valeurs de uniqueid et toutes les valeurs entre ces deux en tenant compte de l'ordre. Exemple : 2:4 et 4:2 sont équivalents.

Les serveurs qui prennent en charge la [RFC3502] auront l'extension suivante aux règles ci-dessus :

append-uid =/ uid-set	; n'est permis que si le client utilise la [RFC3502] pour ajouter plusieurs messages.

 	5.	Considérations sur la sécurité

Les codes de réponse COPYUID et APPENDUID retournent des informations sur la boîte aux lettres, qui peuvent être considérées comme sensibles si la boîte aux lettres a établi des permissions qui autorisent le client à effectuer les commandes COPY ou APPEND sur la boîte aux lettres, mais pas SELECT ou EXAMINE.

Par conséquent, ces codes de réponse NE DEVRAIENT PAS être produits si le client n'a pas accès aux commandes SELECT ou EXAMINE sur la boîte aux lettres.

 	6.	Considérations relatives à l'IANA

Le présent document constitue l'enregistrement de la capacité UIDPLUS dans le registre imap4-capabilities, remplaçant la [RFC2359].

 	7.	Références normatives

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

[RFC3501]	M. Crispin, "Protocole d'accès au message Internet - version 4rev1", mars 2003. (P.S. ; MàJ par RFC4466, 4469, 4551, 5032, 5182, 7817, 8314, 8437, 8474)

[RFC3502]	M. Crispin, "Protocole d'accès au message Internet (IMAP) - Extension MULTIAPPEND", mars 2003. (MàJ par RFC4466, RFC4469) (P.S.)

[RFC4234]	D. Crocker et P. Overell, "BNF augmenté pour les spécifications de syntaxe : ABNF", octobre 2005. (Remplace RFC2234, remplacée par RFC5234)

 	8.	Références pour information

[RFC2359]	J. Myers, "Extension UIDPLUS d'IMAP4", juin 1998. (Obsolète, voir RFC4315) (P.S.)

 	9.	Changements par rapport à la RFC 2359

Le présent document rend obsolète la [RFC2359]. Cependant, il se fonde sur ce document, et emprunte des parties substancielles de son texte (bien qu'avec de nombreuses précisions de formulation).

La [RFC2359] impliquait qu'un serveur doit toujours retourner les données de COPYUID/APPENDUID, suggérant donc que dans ce cas, le serveur devrait retourner des données arbitraires si la boîte aux lettres de destination ne prend pas en charge les UID persistants. Le présent document ajoute le code de réponse UIDNOTSTICKY pour indiquer qu'une boîte aux lettres ne prend pas en charge les UID persistants, et stipule qu'un serveur UIDPLUS ne retourne pas de données COPYUID/APPENDUID quand la boîte aux lettres de destination en COPY (ou APPEND) a l'état UIDNOTSTICKY.

 	Adresse de l'auteur

Mark R. Crispin
Networks and Distributed Computing
University of Washington
4545 15th Avenue NE
Seattle, WA  98105-4527

téléphone : (206) 543-5762
mél : MRC@CAC.Washington.EDU 

 	Déclaration de droits de reproduction

Copyright (C) The IETF Society (2005).

Le présent document est soumis aux droits, licences et restrictions contenus dans le BCP 78, et à www.rfc-editor.org, et sauf pour ce qui est mentionné ci-après, les auteurs conservent tous leurs droits.

Le présent document et les informations contenues sont fournis sur une base "EN L’ÉTAT" et le contributeur, l’organisation qu’il ou elle représente ou qui le/la finance (s’il en est), la INTERNET SOCIETY et la INTERNET ENGINEERING TASK FORCE déclinent toutes garanties, exprimées ou implicites, y compris mais non limitées à toute garantie que l’utilisation des informations ci-encloses ne violent aucun droit ou aucune garantie implicite de commercialisation ou d’aptitude à un objet particulier.

Propriété intellectuelle

L’IETF ne prend pas position sur la validité et la portée de tout droit de propriété intellectuelle ou autres droits qui pourrait être revendiqués au titre de la mise en œuvre ou l’utilisation de la technologie décrite dans le présent document ou sur la mesure dans laquelle toute licence sur de tels droits pourrait être ou n’être pas disponible ; pas plus qu’elle ne prétend avoir accompli aucun effort pour identifier de tels droits. Les informations sur les procédures de l’ISOC au sujet des droits dans les documents de l’ISOC figurent dans les BCP  78 et BCP 79.

Des copies des dépôts d’IPR faites au secrétariat de l’IETF et toutes assurances de disponibilité de licences, ou le résultat de tentatives faites pour obtenir une licence ou permission générale d’utilisation de tels droits de propriété par ceux qui mettent en œuvre ou utilisent la présente spécification peuvent être obtenues sur répertoire en ligne des IPR de l’IETF à http://www.ietf.org/ipr.

L’IETF invite toute partie intéressée à porter son attention sur tous copyrights, licences ou applications de licence, ou autres droits de propriété qui pourraient couvrir les technologies qui peuvent être nécessaires pour mettre en œuvre la présente norme. Prière d’adresser les informations à l’IETF à ietf- ipr@ietf.org.

Remerciement 
Le financement de la fonction d’édition des RFC est actuellement fourni par la Internet Society.