draft-ietf-imapext-annotate-13.txt   draft-ietf-imapext-annotate-14.txt 
IMAP Extensions Working Group C. Daboo IMAP Extensions Working Group C. Daboo
Internet-Draft ISAMET, Inc. Internet-Draft
Expires: September 29, 2005 R. Gellens Expires: May 25, 2006 R. Gellens
QUALCOMM Incorporated QUALCOMM Incorporated
March 31, 2005 November 21, 2005
IMAP ANNOTATE Extension IMAP ANNOTATE Extension
draft-ietf-imapext-annotate-13 draft-ietf-imapext-annotate-14
Status of this Memo Status of this Memo
This document is an Internet-Draft and is subject to all provisions By submitting this Internet-Draft, each author represents that any
of section 3 of RFC 3667. By submitting this Internet-Draft, each applicable patent or other IPR claims of which he or she is aware
author represents that any applicable patent or other IPR claims of have been or will be disclosed, and any of which he or she becomes
which he or she is aware have been or will be disclosed, and any of aware will be disclosed, in accordance with Section 6 of BCP 79.
which he or she become aware will be disclosed, in accordance with
RFC 3668.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as other groups may also distribute working documents as Internet-
Internet-Drafts. Drafts.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt. http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
This Internet-Draft will expire on September 29, 2005. This Internet-Draft will expire on May 25, 2006.
Copyright Notice Copyright Notice
Copyright (C) The Internet Society (2005). Copyright (C) The Internet Society (2005).
Abstract Abstract
The ANNOTATE extension to the Internet Message Access Protocol The ANNOTATE extension to the Internet Message Access Protocol
permits clients and servers to maintain "metadata" for messages, or permits clients and servers to maintain "metadata" for messages, or
individual message parts, stored in an IMAP mailbox. individual message parts, stored in a mailbox on the server.
Change History (to be removed prior to publication as an RFC) Change History (to be removed prior to publication as an RFC)
Changes from -13 to -14:
1. Changed 'string' formal syntax to 'list-mailbox' and 'astring'
for entry/attribute names.
2. Updated examples to match new astring syntax.
3. Now requires explicit use of .priv or .shared in SORT.
4. Removed requirement that 'n' right only be present if 'r' right
is also present.
5. Changed ANNOTATESIZE response to ANNOTATIONS response.
6. Allow servers to indicate that they do not support private
annotations.
7. Added example for extended SELECT including ANNOTATIONS response
code.
8. Removed content-type attribute.
9. Removed display-name attribute.
10. Prevent use of * and % wildcards in attributes.
11. Only allow "value" attributes in SEARCH.
12. Only allow "value" or "size" attributes in SORT.
13. Removed vendor attributes.
14. Removed IMAP flags, though the /flags entry path is reserved.
15. Added internationalization considerations.
Changes from -12 to -13: Changes from -12 to -13:
1. Sync with change from DC meeting wrt 'r' right for both read and 1. Sync with change from DC meeting wrt 'r' right for both read and
write of .priv. write of .priv.
2. Add text about 'n' right being a 'shared flag right' as defined 2. Add text about 'n' right being a 'shared flag right' as defined
in 2086upd. in 2086upd.
3. Allow NIL in /<section-part>/flags entries. 3. Allow NIL in /<section-part>/flags entries.
4. Expand abstract to also indicate that annotations can apply on a 4. Expand abstract to also indicate that annotations can apply on a
per-body part basis as well as per message. per-body part basis as well as per message.
5. Fix resp-text-code to use nil instead of "NIL". 5. Fix resp-text-code to use nil instead of "NIL".
6. Use double-quotes consistently around ANNOTATESIZE etc. 6. Use double-quotes consistently around ANNOTATESIZE etc.
skipping to change at page 3, line 32 skipping to change at page 4, line 4
mapping issues with utf8 text. mapping issues with utf8 text.
5. Clarify COPY interaction to indicate that only the current user's 5. Clarify COPY interaction to indicate that only the current user's
'.priv's are copied, not the '.priv's of other users. '.priv's are copied, not the '.priv's of other users.
Changes from -07 to -08: Changes from -07 to -08:
1. ANNOTATESIZE response changed to use "NIL" for a mailbox that 1. ANNOTATESIZE response changed to use "NIL" for a mailbox that
does not support any type of annotations, and "0" for a mailbox does not support any type of annotations, and "0" for a mailbox
that only supports read-only annotations. that only supports read-only annotations.
Changes from -06 to -07: Changes from -06 to -07:
1. Added text to state entry and attribute names are always
case-insensitive. 1. Added text to state entry and attribute names are always case-
insensitive.
2. Removed top-level entry namespace. 2. Removed top-level entry namespace.
3. Added server accept minima for annotation size and count. 3. Added server accept minima for annotation size and count.
4. Added [ANNOTATE TOOBIG] & [ANNOTATE TOOMANY] response codes. 4. Added [ANNOTATE TOOBIG] & [ANNOTATE TOOMANY] response codes.
5. Added [ANNOTATESIZE <<n>>] response code. 5. Added [ANNOTATESIZE <<n>>] response code.
6. Added comment on suggested CONDSTORE support. 6. Added comment on suggested CONDSTORE support.
7. Modified append behaviour to account for MULTIAPPEND. 7. Modified append behaviour to account for MULTIAPPEND.
8. Tweaked ABNF. 8. Tweaked ABNF.
Changes from -05 to -06: Changes from -05 to -06:
1. Split references into Normative and Informative. 1. Split references into Normative and Informative.
skipping to change at page 4, line 28 skipping to change at page 4, line 48
6. Added comment that IMAP flags are mapped one-to-one with their 6. Added comment that IMAP flags are mapped one-to-one with their
corresponding FLAGS items. corresponding FLAGS items.
7. Added comment that the recent flag annotation is read-only. 7. Added comment that the recent flag annotation is read-only.
Changes from -02 to -03: Changes from -02 to -03:
1. Removed reference to status modtime item. 1. Removed reference to status modtime item.
2. Added missing 'notify' and 'ret' dsn annotations for /message/ 2. Added missing 'notify' and 'ret' dsn annotations for /message/
smtp-envelope. smtp-envelope.
3. Added requirement to store data permanently - no 'session only' 3. Added requirement to store data permanently - no 'session only'
annotations. annotations.
4. Removed Access Control section. Replaced with comments on 4. Removed Access Control section. Replaced with comments on read-
read-only/read-write mailboxes and storing private or shared only/read-write mailboxes and storing private or shared
annotations. annotations.
5. Removed STORE to default .priv or .shared. 5. Removed STORE to default .priv or .shared.
6. Added section on optional select parameters. 6. Added section on optional select parameters.
Changes from -01 to -02: Changes from -01 to -02:
1. Now require .priv or .shared on store operations. 1. Now require .priv or .shared on store operations.
Changes from -00 to -01: Changes from -00 to -01:
1. MODTIME moved to its own draft, which this draft now depends on. 1. MODTIME moved to its own draft, which this draft now depends on.
Thus, Conditional Annotation STORE and related items deleted from Thus, Conditional Annotation STORE and related items deleted from
this draft. this draft.
skipping to change at page 6, line 7 skipping to change at page 6, line 7
CAPABILITY command response. CAPABILITY command response.
13. Prohibition on annotations in lieu of base spec functionality. 13. Prohibition on annotations in lieu of base spec functionality.
14. Specified required ACL rights. 14. Specified required ACL rights.
15. ANNOTATION message data item in APPEND. 15. ANNOTATION message data item in APPEND.
16. ANNOTATION-MODTIME message data item in STATUS. 16. ANNOTATION-MODTIME message data item in STATUS.
17. Replaced ATOM_CHAR with utf8-char. 17. Replaced ATOM_CHAR with utf8-char.
18. Updated other ABNF entries. 18. Updated other ABNF entries.
Table of Contents Table of Contents
1. Introduction and Overview . . . . . . . . . . . . . . . . . 8 1. Introduction and Overview . . . . . . . . . . . . . . . . . . 7
2. Conventions Used in This Document . . . . . . . . . . . . . 8 2. Conventions Used in This Document . . . . . . . . . . . . . . 7
3. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 9 3. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Namespace of entries and attributes . . . . . . . . . . . 9 3.2. Namespace of entries and attributes . . . . . . . . . . . 8
3.2.1 Entry Names . . . . . . . . . . . . . . . . . . . . . 10 3.2.1. Entry Names . . . . . . . . . . . . . . . . . . . . . 9
3.2.2 Attribute Names . . . . . . . . . . . . . . . . . . . 12 3.2.2. Attribute Names . . . . . . . . . . . . . . . . . . . 10
3.3 Private versus Shared . . . . . . . . . . . . . . . . . . 13 3.3. Private versus Shared . . . . . . . . . . . . . . . . . . 11
3.4 Access Control . . . . . . . . . . . . . . . . . . . . . . 14 3.4. Access Control . . . . . . . . . . . . . . . . . . . . . . 12
3.5 Access to Standard IMAP Flags and Keywords . . . . . . . . 16 3.5. Access to Standard IMAP Flags and Keywords . . . . . . . . 15
4. IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . 16 4. IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . . 15
4.1 General Considerations . . . . . . . . . . . . . . . . . . 16 4.1. General Considerations . . . . . . . . . . . . . . . . . . 15
4.2 ANNOTATE parameter with the SELECT/EXAMINE commands . . . 16 4.2. ANNOTATE parameter with the SELECT/EXAMINE commands . . . 16
4.3 ANNOTATION Message Data Item in FETCH Command . . . . . . 17 4.3. ANNOTATION Message Data Item in FETCH Command . . . . . . 16
4.4 ANNOTATION Message Data Item in FETCH Response . . . . . . 19 4.4. ANNOTATION Message Data Item in FETCH Response . . . . . . 18
4.5 ANNOTATION Message Data Item in STORE . . . . . . . . . . 20 4.5. ANNOTATION Message Data Item in STORE . . . . . . . . . . 20
4.6 ANNOTATION interaction with COPY . . . . . . . . . . . . . 22 4.6. ANNOTATION interaction with COPY . . . . . . . . . . . . . 21
4.7 ANNOTATION Message Data Item in APPEND . . . . . . . . . . 22 4.7. ANNOTATION Message Data Item in APPEND . . . . . . . . . . 22
4.8 ANNOTATION Criterion in SEARCH . . . . . . . . . . . . . . 23 4.8. ANNOTATION Criterion in SEARCH . . . . . . . . . . . . . . 22
4.9 ANNOTATION Key in SORT . . . . . . . . . . . . . . . . . . 24 4.9. ANNOTATION Key in SORT . . . . . . . . . . . . . . . . . . 23
4.10 New ACL Rights . . . . . . . . . . . . . . . . . . . . . 24 4.10. New ACL Rights . . . . . . . . . . . . . . . . . . . . . . 24
5. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . 24 5. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 24
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . 26 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26
6.1 Entry and Attribute Registration Template . . . . . . . . 27 6.1. Entry and Attribute Registration Template . . . . . . . . 26
6.2 Entry Registrations . . . . . . . . . . . . . . . . . . . 27 6.2. Entry Registrations . . . . . . . . . . . . . . . . . . . 27
6.2.1 /comment . . . . . . . . . . . . . . . . . . . . . . . 28 6.2.1. /comment . . . . . . . . . . . . . . . . . . . . . . . 27
6.2.2 /flags/\answered . . . . . . . . . . . . . . . . . . . 28 6.2.2. /flags . . . . . . . . . . . . . . . . . . . . . . . . 27
6.2.3 /flags/\flagged . . . . . . . . . . . . . . . . . . . 29 6.2.3. /altsubject . . . . . . . . . . . . . . . . . . . . . 28
6.2.4 /flags/\deleted . . . . . . . . . . . . . . . . . . . 29 6.2.4. /<section-part>/comment . . . . . . . . . . . . . . . 28
6.2.5 /flags/\seen . . . . . . . . . . . . . . . . . . . . . 30 6.2.5. /<section-part>/flags/seen . . . . . . . . . . . . . . 29
6.2.6 /flags/\draft . . . . . . . . . . . . . . . . . . . . 30 6.2.6. /<section-part>/flags/answered . . . . . . . . . . . . 29
6.2.7 /flags/\recent . . . . . . . . . . . . . . . . . . . . 31 6.2.7. /<section-part>/flags/flagged . . . . . . . . . . . . 30
6.2.8 /flags/$mdnsent . . . . . . . . . . . . . . . . . . . 31 6.2.8. /<section-part>/flags/forwarded . . . . . . . . . . . 30
6.2.9 /flags/$redirected . . . . . . . . . . . . . . . . . . 32 6.3. Attribute Registrations . . . . . . . . . . . . . . . . . 30
6.2.10 /flags/$forwarded . . . . . . . . . . . . . . . . . 32 6.3.1. value . . . . . . . . . . . . . . . . . . . . . . . . 31
6.2.11 /altsubject . . . . . . . . . . . . . . . . . . . . 33 6.3.2. size . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.2.12 /<section-part>/comment . . . . . . . . . . . . . . 33 6.3.3. content-language . . . . . . . . . . . . . . . . . . . 32
6.2.13 /<section-part>/flags/seen . . . . . . . . . . . . . 34 7. Internationalization Considerations . . . . . . . . . . . . . 32
6.2.14 /<section-part>/flags/answered . . . . . . . . . . . 34 8. Security Considerations . . . . . . . . . . . . . . . . . . . 32
6.2.15 /<section-part>/flags/flagged . . . . . . . . . . . 35 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 32
6.2.16 /<section-part>/flags/forwarded . . . . . . . . . . 35 9.1. Normative References . . . . . . . . . . . . . . . . . . . 32
6.3 Attribute Registrations . . . . . . . . . . . . . . . . . 35 9.2. Informative References . . . . . . . . . . . . . . . . . . 33
6.3.1 value . . . . . . . . . . . . . . . . . . . . . . . . 36 Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . . 33
6.3.2 size . . . . . . . . . . . . . . . . . . . . . . . . . 36 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 34
6.3.3 content-type . . . . . . . . . . . . . . . . . . . . . 37 Intellectual Property and Copyright Statements . . . . . . . . . . 35
6.3.4 content-language . . . . . . . . . . . . . . . . . . . 37
6.3.5 display-name . . . . . . . . . . . . . . . . . . . . . 38
7. Security Considerations . . . . . . . . . . . . . . . . . . 38
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 38
8.1 Normative References . . . . . . . . . . . . . . . . . . . . 38
8.2 Informative References . . . . . . . . . . . . . . . . . . . 39
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 39
A. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 40
Intellectual Property and Copyright Statements . . . . . . . 41
1. Introduction and Overview 1. Introduction and Overview
The ANNOTATE extension is present in any IMAP [RFC3501] The ANNOTATE extension is present in any IMAP [RFC3501]
implementation which returns "ANNOTATE" as one of the supported implementation which returns "ANNOTATE" as one of the supported
capabilities in the CAPABILITY response. capabilities in the CAPABILITY response.
This extension makes the following changes to the IMAP protocol: This extension makes the following changes to the IMAP protocol:
a. adds a new ANNOTATION message data item for use in FETCH a. adds a new ANNOTATION message data item for use in FETCH
skipping to change at page 8, line 26 skipping to change at page 7, line 26
d. adds a new ANNOTATION sort key for use in SORT extension d. adds a new ANNOTATION sort key for use in SORT extension
e. adds a new ANNOTATION data item for use in APPEND e. adds a new ANNOTATION data item for use in APPEND
f. adds a new requirement on the COPY command f. adds a new requirement on the COPY command
g. adds a new ANNOTATE parameter for use with the SELECT/EXAMINE g. adds a new ANNOTATE parameter for use with the SELECT/EXAMINE
commands commands
h. adds two new response codes to indicate store failures of h. adds two new response codes to indicate store failures of
annotations. annotations.
i. adds a new untagged response code for the SELECT or EXAMINE i. adds a new untagged response code for the SELECT or EXAMINE
commands to indicate the maximum size. commands to indicate the maximum size.
j. adds a new ACL "bit" for use with the ACL extensions [RFC2086] j. adds a new ACL "bit" for use with the ACL extensions [RFC2086]
and [ACLUPD] . and [I-D.ietf-imapext-2086upd] .
The data model used for the storage of annotations is based on that The data model used for the storage of annotations is based on that
of the Application Configuration Access Protocol [RFC2244]. Note of the Application Configuration Access Protocol [RFC2244]. Note
that there is no inheritance in annotations. that there is no inheritance in annotations.
If a server supports annotations, then it MUST store all annotation If a server supports annotations, then it MUST store all annotation
data permanently, i.e. there is no concept of "session only" data permanently, i.e. there is no concept of "session only"
annotations that would correspond to the behaviour of "session" flags annotations that would correspond to the behaviour of "session" flags
as defined in the IMAP base specification. as defined in the IMAP base specification.
In order to provide optimum support for a disconnected client (one In order to provide optimum support for a disconnected client (one
that needs to synchronise annotations for use when offline), servers that needs to synchronise annotations for use when offline), servers
SHOULD also support the Conditional STORE [CONDSTORE] extension. SHOULD also support the Conditional STORE [I-D.ietf-imapext-
condstore] extension.
The rest of this document describes the data model and protocol The rest of this document describes the data model and protocol
changes more rigorously. changes more rigorously.
2. Conventions Used in This Document 2. Conventions Used in This Document
In examples, "C:" and "S:" indicate lines sent by the client and In examples, "C:" and "S:" indicate lines sent by the client and
server respectively. server respectively.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
3. Data Model 3. Data Model
3.1 Overview 3.1. Overview
The data model used in ANNOTATE is that of a uniquely named entry The data model used in ANNOTATE is that of a uniquely named entry
which contains a set of standard attributes. A single coherent unit which contains a set of standard attributes. A single coherent unit
of "metadata" for a message is stored as a single entry, made up of of "metadata" for a message is stored as a single entry, made up of
several attributes. several attributes.
For example, a comment annotation added to a message has an entry For example, a comment annotation added to a message has an entry
name of "/comment". This entry is composed of several attributes name of "/comment". This entry is composed of several attributes
such as "value", "size", etc. which contain the properties and data such as "value", "size", etc. which contain the properties and data
of the entry. of the entry.
The protocol changes to IMAP described below allow a client to access The protocol changes to IMAP described below allow a client to access
or change the values of any attributes in any entries in a message or change the values of any attributes in any entries in a message
annotation, assuming it has sufficient access rights to do so (see annotation, assuming it has sufficient access rights to do so (see
Section 3.4 for specifics). Section 3.4 for specifics).
3.2 Namespace of entries and attributes 3.2. Namespace of entries and attributes
Each message annotation is made up of a set of entries. Each entry Each message annotation is made up of a set of entries. Each entry
has a hierarchical name, with each component of the name separated by has a hierarchical name, with each component of the name separated by
a slash ("/"). An entry name MUST NOT contain two consecutive "/" a slash ("/"). An entry name MUST NOT contain two consecutive "/"
characters and MUST NOT end with a "/" character. characters and MUST NOT end with a "/" character.
Each entry is made up of a set of attributes. Each attribute has a Each entry is made up of a set of attributes. Each attribute has a
hierarchical name, with each component of the name separated by a hierarchical name, with each component of the name separated by a
period ("."). An attribute name MUST NOT contain two consecutive "." period ("."). An attribute name MUST NOT contain two consecutive "."
characters and MUST NOT end with a "." character. characters and MUST NOT end with a "." character.
The value of an attribute is "NIL" (has no value), or is a string of The value of an attribute is "NIL" (has no value), or is a string of
zero or more octets. zero or more octets.
Entry and attribute names MUST NOT contain asterisk ("*") or percent Entry and attribute names MUST NOT contain asterisk ("*") or percent
("%") characters and MUST NOT contain non-ASCII characters or the ("%") characters and MUST NOT contain non-ASCII characters or the
NULL octet. Invalid entry or attribute names result in a BAD NULL octet. Invalid entry or attribute names result in a BAD
response in any IMAP commands where they are used. response in any IMAP commands where they are used.
Attribute names MUST NOT contain any hierarchical components with the Attribute names MUST NOT contain any hierarchical components with the
names "priv" or "shared" as those have special meaning (see Section names "priv" or "shared" as those have special meaning (see
3.3. Section 3.3.
Entry and attribute names are case-sensitive. Entry and attribute names are case-sensitive.
Use of control or punctuation characters in entry and attribute names Use of control or punctuation characters in entry and attribute names
is strongly discouraged. is strongly discouraged.
This specification defines an initial set of entry and attribute This specification defines an initial set of entry and attribute
names available for use in message annotations. In addition, an names available for use in message annotations. In addition, an
extension mechanism is described to allow additional names to be extension mechanism is described to allow additional names to be
added as needed. added as needed.
3.2.1 Entry Names 3.2.1. Entry Names
Entry names MUST be specified in a standards track or IESG approved Entry names MUST be specified in a standards track or IESG approved
experimental RFC, or fall under the vendor namespace. See Section experimental RFC, or fall under the vendor namespace. See
6.1 for the registration template. Section 6.1 for the registration template.
/ /
Defines the top-level of entries associated with an entire Defines the top-level of entries associated with an entire
message. This entry itself does not contain any attributes. All message. This entry itself does not contain any attributes. All
entries that start with a numeric character ("0" - "9") refer to entries that start with a numeric character ("0" - "9") refer to
an annotation on a specific body part. All other entries are for an annotation on a specific body part. All other entries are for
annotations on the entire message. annotations on the entire message.
/comment /comment
Defines a comment or note associated with an entire message. Defines a comment or note associated with an entire message.
/flags /flags
Defines the top-level of entries for flags associated with an This entry hierarchy is reserved for future use.
entire message. The "value" attribute of each of the entries
described below must be either "1", "0" or "NIL". "1" corresponds
to the flag being set.
Standard [RFC3501] flags always have a "\" prefix character.
Other standard flags have a "$" prefix. The annotation names used
for all flags uses the complete name for that flag, including the
prefix character.
Flag annotations are read-only. Clients MUST NOT attempt to
change them via the annotation entries, instead the normal IMAP
STORE FLAGS command is used.
The set of standard IMAP flags annotations are:
/flags/\answered
/flags/\flagged
/flags/\deleted
/flags/\seen
/flags/\draft
/flags/\recent
Note that entry names are sent as IMAP string elements which
requires that "\" characters be escaped if sent as a quoted string
as opposed to a literal.
Note that flag and keyword names in IMAP are case-insensitive,
however the entry names for the corresponding annotations are
case-sensitive. Thus the IMAP flag and keyword names MUST be
mapped to lowercase characters before being used as entry names
for annotations.
Additional standard flags are:
/flags/$mdnsent
/flags/$redirected
/flags/$forwarded
The "$mdnsent" flag is used to indicate message disposition
notification processing state [RFC3503].
The "$redirected" flag indicates that a message has been handed
off to someone else, by resending the message with minimal
alterations, and in such a way that a reply by the new
recipient is addressed to the original author, not the user who
performed the redirection.
The "$forwarded" flag indicates the message was resent to
another user, embedded within or attached to a new message.
/altsubject /altsubject
Contains text supplied by the message recipient, to be used by the Contains text supplied by the message recipient, to be used by the
client instead of the original message Subject. client instead of the original message Subject.
/vendor/<vendor-token> /vendor/<vendor-token>
Defines the top-level of entries associated with an entire message Defines the top-level of entries associated with an entire message
as created by a particular product of some vendor. These as created by a particular product of some vendor. These sub-
sub-entries can be used by vendors to provide client-specific entries can be used by vendors to provide client-specific
attributes. The vendor-token MUST be registered with IANA, using annotations. The vendor-token MUST be registered with IANA, using
the [RFC2244] vendor subtree registry. the [RFC2244] vendor subtree registry.
/<section-part> /<section-part>
Defines the top-level of entries associated with a specific body Defines the top-level of entries associated with a specific body
part of a message. This entry itself does not contain any part of a message. This entry itself does not contain any
attributes. The section-part uses the same numeric part specifier attributes. The section-part uses the same numeric part specifier
syntax as the BODY message data item in the FETCH command syntax as the BODY message data item in the FETCH command
[RFC3501]. The server MUST return a BAD response if the client [RFC3501]. The server MUST return a BAD response if the client
uses an incorrect part specifier (either incorrect syntax or a uses an incorrect part specifier (either incorrect syntax or a
specifier referring to a non-existent part). The server MUST specifier referring to a non-existent part). The server MUST
skipping to change at page 12, line 24 skipping to change at page 10, line 28
/<section-part>/flags/forwarded /<section-part>/flags/forwarded
Defines flags for a specific body part of a message. The "value" Defines flags for a specific body part of a message. The "value"
attribute of each of the entries described above must be either attribute of each of the entries described above must be either
"1", "0" or "NIL". "1" corresponds to the flag being set. "1", "0" or "NIL". "1" corresponds to the flag being set.
/<section-part>/vendor/<vendor-token> /<section-part>/vendor/<vendor-token>
Defines the top-level of entries associated with a specific body Defines the top-level of entries associated with a specific body
part of a message as created by a particular product of some part of a message as created by a particular product of some
vendor. This entry can be used by vendors to provide client vendor. This entry can be used by vendors to provide client
specific attributes. The vendor-token MUST be registered with specific annotations. The vendor-token MUST be registered with
IANA. IANA.
3.2.2 Attribute Names 3.2.2. Attribute Names
Attribute names MUST be specified in a standards track or IESG Attribute names MUST be specified in a standards track or IESG
approved experimental RFC, or fall under the vendor namespace. See approved experimental RFC. See Section 6.1 for the registration
Section 6.1 for the registration template. template.
All attribute names implicitly have a ".priv" and a ".shared" suffix All attribute names implicitly have a ".priv" and a ".shared" suffix
which maps to private and shared versions of the entry. Searching or which maps to private and shared versions of the entry. Searching or
fetching without using either suffix includes both. The client MUST fetching without using either suffix includes both. The client MUST
specify either a ".priv" or ".shared" suffix when storing an specify either a ".priv" or ".shared" suffix when storing an
annotation. annotation.
value value
A string or binary data representing the value of the annotation. A string or binary data representing the value of the annotation.
To delete an annotation, the client can store "NIL" into the To delete an annotation, the client can store "NIL" into the
value. The content represented by the string is set via the value. The content represented by the string is determined by the
content-type attribute. When the content-type attribute is not Content-type used to register the entry (see Section 6.1 for entry
present, the value MUST be a "text/plain" content-type with a registration templates). Where applicable, the registered
character set of "utf-8" [RFC3629]. Clients SHOULD use the utf-8 content-type MUST include a charset parameter. Text values SHOULD
character set for any text values that contain non ASCII data. use the utf-8 [RFC3629] character set.
Note that binary data (data which may contain the NULL octet) is Note that binary data (data which may contain the NULL octet) is
allowed (e.g. for storing images etc), and this extension uses allowed (e.g. for storing images etc), and this extension uses the
the "literal8" syntax element [ABNFEXT] to allow such data to be "literal8" syntax element [I-D.melnikov-imap-ext-abnf] to allow
written to or read from the server. such data to be written to or read from the server.
size size
The size of the value, in octets. Set automatically by the The size of the value, in octets. Set automatically by the
server, read-only to clients. server, read-only to clients.
content-type
A MIME [RFC2046] content type and subtype that describes the
nature of the content of the "value" attribute. If not present, a
value of "text/plain; charset=utf-8" is assumed.
content-language content-language
Indicates the language used for the value. This follows the Indicates the language used for the value. This follows the
format described in [RFC3282]. Clients SHOULD set this value when format described in [RFC3282]. Clients SHOULD set this value when
storing an annotation that uses text that can be presented to the storing an annotation that uses text that can be presented to the
user. It is not required for enumerated or numeric values such as user. It is not required for enumerated or numeric values such as
flags etc. If a value is being set, clients MUST ensure that it flags etc. If a value is being set, clients MUST ensure that it
accurately reflects the content stored in the value attribute. accurately reflects the content stored in the value attribute.
Servers MUST ensure that the "content-language" attribute value is
kept in synchronization with the "value" attribute. To ensure
that, the server MUST remove any "content-language" attribute
value when the client STOREs a "value" attribute without also
including a "content-language" attribute in the same STORE
command.
display-name 3.3. Private versus Shared
A text string using the "utf-8" character set [RFC3629] that
describes the nature of the corresponding annotation, in a
language specified by the "content-language" attribute.
vendor.<vendor-token>
Defines an attribute associated with a particular product of some
vendor. This attribute can be used by vendors to provide client
specific attributes. The vendor-token MUST be registered with
IANA, using the [RFC2244] vendor subtree registry.
3.3 Private versus Shared
Some IMAP mailboxes are private, accessible only to the owning user. Some IMAP mailboxes are private, accessible only to the owning user.
Other mailboxes are not, either because the owner has set an ACL Other mailboxes are not, either because the owner has set an ACL
[ACLUPD] which permits access by other users, or because it is a [I-D.ietf-imapext-2086upd] which permits access by other users, or
shared mailbox. because it is a shared mailbox.
This raises the issue of shared versus private annotations. This raises the issue of shared versus private annotations.
If all annotations are private, it is impossible to set annotations If all annotations are private, it is impossible to set annotations
in a shared or otherwise non-private mailbox that are visible to in a shared or otherwise non-private mailbox that are visible to
other users. This eliminates what could be a useful aspect of other users. This eliminates what could be a useful aspect of
annotations in a shared environment. An example of such use is a annotations in a shared environment. An example of such use is a
shared IMAP folder containing bug reports. Engineers may want to use shared IMAP folder containing bug reports. Engineers may want to use
annotations to add information to existing messages, indicate annotations to add information to existing messages, indicate
assignments, status, etc. This use requires shared annotations. assignments, status, etc. This use requires shared annotations.
skipping to change at page 14, line 17 skipping to change at page 12, line 13
set shared annotations on messages in a shared folder, which set shared annotations on messages in a shared folder, which
individual users may wish to supplement with additional notes. individual users may wish to supplement with additional notes.
If shared and private annotations are to coexist, we need a clear way If shared and private annotations are to coexist, we need a clear way
to differentiate them. Also, it should be as easy as possible for a to differentiate them. Also, it should be as easy as possible for a
client to access both and not overlook either. There is also a client to access both and not overlook either. There is also a
danger in allowing a client to store an annotation without knowing if danger in allowing a client to store an annotation without knowing if
it is shared or private. it is shared or private.
This document proposes two standard suffixes for all attributes: This document proposes two standard suffixes for all attributes:
".shared" and ".priv". A search, fetch, or sort which specifies ".shared" and ".priv". A SEARCH or FETCH command which specifies
neither uses both. Store operations MUST explicitly use ".priv" or neither uses both. STORE, APPEND and SORT commands MUST explicitly
".shared" suffixes. use ".priv" or ".shared" suffixes.
3.4 Access Control If the ANNOTATE extension is present, support for shared annotations
in servers is REQUIRED, whilst support for private annotations in
servers is OPTIONAL. This recognises the fact that support for
private annotations may introduce significantly more complexity to a
server in terms of tracking ownership of the annotations, how quota
is determined for users based on their own annotations etc. Clients
that support the ANNOTATE extension MUST handle both shared and
private annotations.
3.4. Access Control
A user needs to have appropriate rights in order to read or write A user needs to have appropriate rights in order to read or write
".priv" or ".shared" annotation values. How those rights are ".priv" or ".shared" annotation values. How those rights are
calculated depends on whether the ACL [RFC2086] extension or its calculated depends on whether the ACL [RFC2086] extension or its
update [ACLUPD] is present or not. If a client attempts to store or update [I-D.ietf-imapext-2086upd] is present or not. If a client
fetch an annotation to which they do not have the appropriate rights, attempts to store or fetch an annotation to which they do not have
the server MUST respond with a NO response. the appropriate rights, the server MUST respond with a NO response.
When the ACL extension is not present, access to annotation values is When the ACL extension is not present, access to annotation values is
governed by the nature of the selected state. In particular whether governed by the nature of the selected state. In particular whether
the mailbox was SELECT'ed or EXAMINE'd in READ-ONLY or READ-WRITE the mailbox was SELECT'ed or EXAMINE'd in READ-ONLY or READ-WRITE
mode. mode.
When the ACL extension is present, the server MUST recognise the new When the ACL extension is present, the server MUST recognise the new
ACL right "n", in addition to the ones defined by the ACL extension ACL right "n", in addition to the ones defined by the ACL extension
itself. itself.
The "r" right controls both read and write access to ".priv" The "r" right controls both read and write access to ".priv"
annotation values. When it is on, access to ".priv" annotations is annotation values. When it is on, access to ".priv" annotations is
allowed, when it is off, access to ".priv" annotations is disallowed. allowed, when it is off, access to ".priv" annotations is disallowed.
The "r" right controls only the read access for ".shared" annotation The "r" right controls only the read access for ".shared" annotation
values. When it is on, ".shared" annotations can be read, when it is values. When it is on, ".shared" annotations can be read, when it is
off, ".shared" annotations cannot be read. off, ".shared" annotations cannot be read.
The "n" right controls only the write access for ".shared" annotation The "n" right controls only the write access for ".shared" annotation
values. When it is on, ".shared" annotations can be changed, when it values. When it is on, ".shared" annotations can be changed or
is off, ".shared" annotations cannot be changed. The "n" right MUST created through either a STORE or APPEND command, when it is off,
NOT be present if the "r" is not present. The "n" right constitutes ".shared" annotations cannot be changed or created. The "n" right
a "shared flag right" as defined in [ACLUPD] Section 6.2. constitutes a "shared flag right" as defined in [I-D.ietf-imapext-
2086upd] Section 6.2.
A summary of all the access control restrictions is tabulated below A summary of all the access control restrictions is tabulated below
+---------------+---------------+-----------------------------------+ +---------------+---------------+-----------------------------------+
| Server Type | Action on | Type of mailbox | | Server Type | Action on | Type of mailbox |
| | annotation | | | | annotation | |
+===============+===============+===================================+ +===============+===============+===================================+
| | | | | | | |
| | read .priv | Any mailbox that can be SELECTED | | | read .priv | Any mailbox that can be SELECTED |
| | values | or EXAMINED. | | | values | or EXAMINED. |
| | | | | | | |
| +---------------+-----------------------------------+ | +---------------+-----------------------------------+
| | | | | | | |
skipping to change at page 16, line 5 skipping to change at page 15, line 5
| | read .shared | Any mailbox with the "r" | | | read .shared | Any mailbox with the "r" |
| | values | ACL right. | | | values | ACL right. |
| | | | | | | |
| +---------------+-----------------------------------+ | +---------------+-----------------------------------+
| | | | | | | |
| | write .shared | Any mailbox with the "n" | | | write .shared | Any mailbox with the "n" |
| | values | ACL right. | | | values | ACL right. |
| | | | | | | |
+---------------+---------------+-----------------------------------+ +---------------+---------------+-----------------------------------+
3.5 Access to Standard IMAP Flags and Keywords 3.5. Access to Standard IMAP Flags and Keywords
Flags cannot be changed through annotations due to ambiguity of how Due to ambiguity of how private and shared values would map to the
private and shared values would map to the base IMAP flag and keyword base IMAP flag and keyword values, the ANNOTATE extension does not
values. As a result the /flags annotation values are treated as expose IMAP flags or keywords as entries. However, the /flags
read-only and MUST NOT be changed by a client. In turn this means annotation entry is reserved for future use and MUST NOT be used by
that the ".priv" and ".shared" values of a flag annotation are always clients or servers supporting this extension.
the same and represent the value of the base IMAP flag or keyword.
Clients that need to implement shared and private "flags" can create Clients that need to implement shared and private "flags" can create
their own annotation entries for those, completely bypassing the base their own annotation entries for those, completely bypassing the base
IMAP flag/keyword behaviour. IMAP flag/keyword behaviour.
4. IMAP Protocol Changes 4. IMAP Protocol Changes
4.1 General Considerations 4.1. General Considerations
The server is allowed to impose limitations on the size of any one Servers may be able to offer only a limited level of support for
annotation or the total number of annotations for a single message. annotations in mailboxes, and it is useful for clients to be able to
However, the server MUST accept a minimum annotation data size of at know what level of support is available. Servers MUST return an
least 1024 bytes, and a minimum annotation count per message of at ANNOTATIONS response during the SELECT or EXAMINE command for a
least 10. mailbox to indicate the level of support. Possible response codes
used with the ANNOTATIONS response are:
The server MUST indicate the maximum size for an annotation value by "NONE" - this indicates that the mailbox being selected does not
sending an untagged ANNOTATESIZE response containing the maximum size support annotations at all. Clients MUST NOT attempt to use
value during a SELECT or EXAMINE command. Clients MUST NOT store annotation extensions in commands.
annotation values of a size greater than the amount indicated by the
server in the ANNOTATESIZE response.
In some cases, servers may be able to offer annotations on some "READ-ONLY" - this indicates that the annotations supported by the
mailboxes and not others, or may be able to provide only read-only mailbox cannot be changed by the client. Clients MUST NOT attempt
annotations on some mailboxes. For mailboxes that cannot have to store annotations on any messages in a mailbox with this
annotations associated with them, the server MUST return an response code.
ANNOTATESIZE response with a value of "NIL" during the SELECT or
EXAMINE command for that mailbox. Clients MUST NOT attempt to fetch
or store annotations on any messages in a mailbox for which the
ANNOTATESIZE response was "NIL". For mailboxes that can only have
read-only annotations associated with them, the server MUST return an
ANNOTATESIZE response with a value of "0" (zero) during the SELECT or
EXAMINE command for that mailbox. Clients MUST NOT attempt to store
annotations on any messages in a mailbox for which the ANNOTATESIZE
response was zero.
4.2 ANNOTATE parameter with the SELECT/EXAMINE commands "NOPRIVATE" - this indicates that the server does not support
private annotations on the mailbox. Only shared annotations are
supported. Clients SHOULD only attempt to read or store
annotations attributes with the ".shared" suffix. If a client
uses an attribute with the ".priv" suffix in a FETCH command, then
servers should return the attribute value in the FETCH response as
"NIL". If a client uses an attribute with the ".priv" suffix in a
STORE command (or an APPEND command targetted at the mailbox) then
the server MUST return a NO response.
numeric values - if servers support writable annotations, then the
server MUST indicate the maximum size for an annotation value by
providing the maximum size value in the response code. Clients
MUST NOT store annotation values of a size greater than the amount
indicated by the server. Servers MUST accept a minimum annotation
data size of at least 1024 bytes if annotations can be written.
In addition the server MAY limit the total number of annotations for
a single message. However, the server MUST provide a minimum
annotation count per message of at least 10.
4.2. ANNOTATE parameter with the SELECT/EXAMINE commands
The ANNOTATE extension defines a single optional SELECT parameter The ANNOTATE extension defines a single optional SELECT parameter
[ABNFEXT] "ANNOTATE", which is used to turn on unsolicited responses [I-D.melnikov-imap-ext-abnf] "ANNOTATE", which is used to turn on
for annotations as described in Section 4.4. This optional parameter unsolicited responses for annotations as described in Section 4.4.
results in a per-mailbox state change, i.e. it must be used in each This optional parameter results in a per-mailbox state change, i.e.
SELECT/EXAMINE command in order to be effective, irrespective of it must be used in each SELECT/EXAMINE command in order to be
whether it was used in a previous SELECT/EXAMINE during the same effective, irrespective of whether it was used in a previous SELECT/
session. EXAMINE during the same session.
4.3 ANNOTATION Message Data Item in FETCH Command Example:
C: a SELECT INBOX ANNOTATE
S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
S: * OK [PERMANENTFLAGS (\Answered \Flagged \Draft
\Deleted \Seen \*)]
S: * 10268 EXISTS
S: * 1 RECENT
S: * OK [UNSEEN 10268]
S: * OK [UIDVALIDITY 890061587]
S: * OK [UIDNEXT 34643]
S: * OK [ANNOTATIONS 20480 NOPRIVATE]
S: a OK [READ-WRITE] Completed
In the above example, a SELECT command with the ANNOTATE parameter
is issued. The response from the server includes the required
ANNOTATIONS response that indicates that the server supports
annotations up to a maximum size of 20480 bytes and does not
support private annotations (only shared).
4.3. ANNOTATION Message Data Item in FETCH Command
This extension adds an ANNOTATION message data item to the FETCH This extension adds an ANNOTATION message data item to the FETCH
command. This allows clients to retrieve annotations for a range of command. This allows clients to retrieve annotations for a range of
messages in the currently selected mailbox. messages in the currently selected mailbox.
ANNOTATION <entry-specifier> <attribute-specifier> ANNOTATION <entry-specifier> <attribute-specifier>
The ANNOTATION message data item, when used by the client in the The ANNOTATION message data item, when used by the client in the
FETCH command, takes an entry specifier and an attribute FETCH command, takes an entry specifier and an attribute
specifier. specifier.
Example: Example:
C: a FETCH 1 (ANNOTATION ("/comment" "value")) C: a FETCH 1 (ANNOTATION (/comment value))
S: * 1 FETCH (ANNOTATION ("/comment" S: * 1 FETCH (ANNOTATION (/comment
("value.priv" "My comment" (value.priv "My comment"
"value.shared" "Group note"))) value.shared "Group note")))
S: a OK Fetch complete S: a OK Fetch complete
In the above example, the content of the "value" attribute for the In the above example, the content of the "value" attribute for the
"/comment" entry is requested by the client and returned by the "/comment" entry is requested by the client and returned by the
server. Since neither ".shared" nor ".priv" was specified, both server. Since neither ".shared" nor ".priv" was specified, both
are returned. are returned.
"*" and "%" wildcard characters can be used in either specifier to "*" and "%" wild card characters can be used in entry specifiers to
match one or more characters at that position, with the exception match one or more characters at that position, with the exception
that "%" does not match the hierarchy delimiter for the specifier it that "%" does not match the "/" hierarchy delimiter. Thus an entry
appears in (that is, "/" for an entry specifier or "." for an specifier of "/%" matches entries such as "/comment" and
attribute specifier). Thus an entry specifier of "/%" matches "/altsubject", but not "/1/comment".
entries such as "/comment" and "/altsubject", but not "/flags/
$redirected".
Example: Example:
C: a UID FETCH 1123 (UID ANNOTATION C: a UID FETCH 1123 (UID ANNOTATION
("/*" ("value.priv" "size.priv"))) (/* (value.priv size.priv)))
S: * 12 FETCH (UID 1123 ANNOTATION S: * 12 FETCH (UID 1123 ANNOTATION
("/comment" ("value.priv" "My comment" (/comment (value.priv "My comment"
"size.priv" "10") size.priv "10")
"/altsubject" ("value.priv" "Rhinoceroses!" /altsubject (value.priv "Rhinoceroses!"
"size.priv" "13") size.priv "13")
"/vendor/foobar/label.priv" /vendor/foobar/label.priv
("value.priv" "label43" (value.priv "label43"
"size.priv" "7") size.priv "7")
"/vendor/foobar/personality" /vendor/foobar/personality
("value.priv" "Tallulah Bankhead" (value.priv "Tallulah Bankhead"
"size.priv" "17"))) size.priv "17")))
S: a OK Fetch complete S: a OK Fetch complete
In the above example, the contents of the private "value" and In the above example, the contents of the private "value" and
"size" attributes for any entries in the "/" hierarchy are "size" attributes for any entries in the "/" hierarchy are
requested by the client and returned by the server. requested by the client and returned by the server.
Example: Example:
C: a FETCH 1 (ANNOTATION ("/%" "value.shared")) C: a FETCH 1 (ANNOTATION (/% value.shared))
S: * 1 FETCH (ANNOTATION S: * 1 FETCH (ANNOTATION
("/comment" ("value.shared" "Patch Mangler") (/comment (value.shared "Patch Mangler")
"/altsubject" ("value.shared" "Patches? We don't /altsubject (value.shared "Patches? We don't
need no steenkin patches!"))) need no steenkin patches!")))
S: a OK Fetch complete S: a OK Fetch complete
In the above example, the contents of the shared "value" In the above example, the contents of the shared "value"
attributes for entries at the top level only of the "/" hierarchy attributes for entries at the top level only of the "/" hierarchy
are requested by the client and returned by the server. are requested by the client and returned by the server.
Entry and attribute specifiers can be lists of atomic specifiers, so Entry and attribute specifiers can be lists of atomic specifiers, so
that multiple items of each type may be returned in a single FETCH that multiple items of each type may be returned in a single FETCH
command. command.
Example: Example:
skipping to change at page 18, line 44 skipping to change at page 18, line 15
attributes for entries at the top level only of the "/" hierarchy attributes for entries at the top level only of the "/" hierarchy
are requested by the client and returned by the server. are requested by the client and returned by the server.
Entry and attribute specifiers can be lists of atomic specifiers, so Entry and attribute specifiers can be lists of atomic specifiers, so
that multiple items of each type may be returned in a single FETCH that multiple items of each type may be returned in a single FETCH
command. command.
Example: Example:
C: a FETCH 1 (ANNOTATION C: a FETCH 1 (ANNOTATION
(("/comment" "/altsubject") "value.priv")) ((/comment /altsubject) value.priv))
S: * 1 FETCH (ANNOTATION S: * 1 FETCH (ANNOTATION
("/comment" ("value.priv" "What a chowder-head") (/comment (value.priv "What a chowder-head")
"/altsubject" ("value.priv" "How to crush beer cans"))) /altsubject (value.priv "How to crush beer cans")))
S: a OK Fetch complete S: a OK Fetch complete
In the above example, the contents of the private "value" In the above example, the contents of the private "value"
attributes for the two entries "/comment" and "/altsubject" are attributes for the two entries "/comment" and "/altsubject" are
requested by the client and returned by the server. requested by the client and returned by the server.
4.4 ANNOTATION Message Data Item in FETCH Response 4.4. ANNOTATION Message Data Item in FETCH Response
The ANNOTATION message data item in the FETCH response displays The ANNOTATION message data item in the FETCH response displays
information about annotations in a message. information about annotations in a message.
ANNOTATION parenthesised list ANNOTATION parenthesised list
The response consists of a list of entries, each of which has a The response consists of a list of entries, each of which has a
list of attribute-value pairs. list of attribute-value pairs.
Example: Example:
C: a FETCH 1 (ANNOTATION ("/comment" "value")) C: a FETCH 1 (ANNOTATION (/comment value))
S: * 1 FETCH (ANNOTATION ("/comment" S: * 1 FETCH (ANNOTATION (/comment
("value.priv" "My comment" (value.priv "My comment"
"value.shared" NIL))) value.shared NIL)))
S: a OK Fetch complete S: a OK Fetch complete
In the above example, a single entry with a single attribute-value In the above example, a single entry with a single attribute-value
pair is returned by the server. Since the client did not specify pair is returned by the server. Since the client did not specify
a ".shared" or ".priv" suffix, both are returned. Only the a ".shared" or ".priv" suffix, both are returned. Only the
private attribute has a value (the shared value is "NIL"). private attribute has a value (the shared value is "NIL").
Example: Example:
C: a FETCH 1 (ANNOTATION C: a FETCH 1 (ANNOTATION
(("/comment" "/altsubject") "value")) ((/comment /altsubject) value))
S: * 1 FETCH (ANNOTATION S: * 1 FETCH (ANNOTATION
("/comment" ("value.priv" "My comment" (/comment (value.priv "My comment"
"value.shared" NIL) value.shared NIL)
"/altsubject" ("value.priv" "My subject" /altsubject (value.priv "My subject"
"value.shared" NIL))) value.shared NIL)))
S: a OK Fetch complete S: a OK Fetch complete
In the above example, two entries each with a single In the above example, two entries each with a single attribute-
attribute-value pair are returned by the server. Since the client value pair are returned by the server. Since the client did not
did not specify a ".shared" or ".priv" suffix, both are returned. specify a ".shared" or ".priv" suffix, both are returned. Only
Only the private attributes have values; the shared attributes are the private attributes have values; the shared attributes are
"NIL". "NIL".
Example: Example:
C: a FETCH 1 (ANNOTATION C: a FETCH 1 (ANNOTATION
("/comment" ("value" "size"))) (/comment (value size)))
S: * 1 FETCH (ANNOTATION S: * 1 FETCH (ANNOTATION
("/comment" (/comment
("value.priv" "My comment" (value.priv "My comment"
"value.shared" NIL value.shared NIL
"size.priv" "10" size.priv "10"
"size.shared" "0"))) size.shared "0")))
S: a OK Fetch complete S: a OK Fetch complete
In the above example, a single entry with two attribute-value In the above example, a single entry with two attribute-value
pairs is returned by the server. Since the client did not specify pairs is returned by the server. Since the client did not specify
a ".shared" or ".priv" suffix, both are returned. Only the a ".shared" or ".priv" suffix, both are returned. Only the
private attributes have values; the shared attributes are "NIL". private attributes have values; the shared attributes are "NIL".
Servers SHOULD send ANNOTATION message data items in unsolicited Servers SHOULD send ANNOTATION message data items in unsolicited
FETCH responses if an annotation entry is changed by a third-party, FETCH responses if an annotation entry is changed by a third-party,
and the ANNOTATE select parameter was used. This allows servers to and the ANNOTATE select parameter was used. This allows servers to
skipping to change at page 20, line 34 skipping to change at page 19, line 51
Unsolicited ANNOTATION responses MUST NOT include ANNOTATION data Unsolicited ANNOTATION responses MUST NOT include ANNOTATION data
values - only the entry name of the ANNOTATION that has changed. values - only the entry name of the ANNOTATION that has changed.
This restriction avoids sending ANNOTATION data values (which may be This restriction avoids sending ANNOTATION data values (which may be
large) to a client unless the client explicitly asks for the value. large) to a client unless the client explicitly asks for the value.
Example: Example:
C: a STORE 1 +FLAGS (\Seen) C: a STORE 1 +FLAGS (\Seen)
S: * 1 FETCH (FLAGS (\Seen)) S: * 1 FETCH (FLAGS (\Seen))
ANNOTATION ("/comment")) ANNOTATION (/comment))
S: a OK STORE complete S: a OK STORE complete
In the above example, an unsolicited ANNOTATION response is In the above example, an unsolicited ANNOTATION response is
returned during a STORE command. The unsolicited response returned during a STORE command. The unsolicited response
contains only the entry name of the annotation that changed, and contains only the entry name of the annotation that changed, and
not its value. not its value.
4.5 ANNOTATION Message Data Item in STORE 4.5. ANNOTATION Message Data Item in STORE
ANNOTATION <parenthesised entry-attribute-value list> ANNOTATION <parenthesised entry-attribute-value list>
Sets the specified list of entries by adding or replacing the Sets the specified list of entries by adding or replacing the
specified attributes with the values provided. Clients can use specified attributes with the values provided. Clients can use
"NIL" for values of attributes it wants to remove from entries. "NIL" for values of attributes it wants to remove from entries.
The ANNOTATION message data item used with the STORE command has an The ANNOTATION message data item used with the STORE command has an
implicit ".SILENT" behaviour. This means the server does not implicit ".SILENT" behaviour. This means the server does not
generate an untagged FETCH in response to the STORE command and generate an untagged FETCH in response to the STORE command and
skipping to change at page 21, line 18 skipping to change at page 20, line 34
its value is too large, the server MUST return a tagged NO response its value is too large, the server MUST return a tagged NO response
with a "[ANNOTATE TOOBIG]" response code. with a "[ANNOTATE TOOBIG]" response code.
If the server is unable to store a new annotation because the maximum If the server is unable to store a new annotation because the maximum
number of allowed annotations has already been reached, the server number of allowed annotations has already been reached, the server
MUST return a tagged NO response with a "[ANNOTATE TOOMANY]" response MUST return a tagged NO response with a "[ANNOTATE TOOMANY]" response
code. code.
Example: Example:
C: a STORE 1 ANNOTATION ("/comment" C: a STORE 1 ANNOTATION (/comment
("value.priv" "My new comment")) (value.priv "My new comment"))
S: a OK Store complete S: a OK Store complete
In the above example, the entry "/comment" is created (if not In the above example, the entry "/comment" is created (if not
already present) and the private attribute "value" with data set already present) and the private attribute "value" with data set
to "My new comment" is created if not already present, or replaced to "My new comment" is created if not already present, or replaced
if it exists. if it exists.
Example: Example:
C: a STORE 1 ANNOTATION ("/comment" C: a STORE 1 ANNOTATION (/comment
("value.shared" NIL)) (value.shared NIL))
S: a OK Store complete S: a OK Store complete
In the above example, the shared "value" attribute of the entry "/ In the above example, the shared "value" attribute of the entry
comment" is removed by storing "NIL" into the attribute. "/comment" is removed by storing "NIL" into the attribute.
Multiple entries can be set in a single STORE command by listing Multiple entries can be set in a single STORE command by listing
entry-attribute-value pairs in the list. entry-attribute-value pairs in the list.
Example: Example:
C: a STORE 1 ANNOTATION ("/comment" C: a STORE 1 ANNOTATION (/comment
("value.priv" "Get tix Tuesday") (value.priv "Get tix Tuesday")
"/altsubject" /altsubject
("value.priv" "Wots On")) (value.priv "Wots On"))
S: a OK Store complete S: a OK Store complete
In the above example, the entries "/comment" and "/altsubject" are In the above example, the entries "/comment" and "/altsubject" are
created (if not already present) and the private attribute "value" created (if not already present) and the private attribute "value"
is created for each entry if not already present, or replaced if is created for each entry if not already present, or replaced if
they exist. they exist.
Multiple attributes can be set in a single STORE command by listing Multiple attributes can be set in a single STORE command by listing
multiple attribute-value pairs in the entry list. multiple attribute-value pairs in the entry list.
Example: Example:
C: a STORE 1 ANNOTATION ("/comment" C: a STORE 1 ANNOTATION (/comment
("value.priv" "My new comment" (value.priv "My new comment"
"vendor.foobar.priv" "foo's bar")) value.shared "foo's bar"))
S: a OK Store complete S: a OK Store complete
In the above example, the entry "/comment" is created (if not already In the above example, the entry "/comment" is created (if not already
present) and the private attributes "value" and "vendor.foobar" are present) and the private and shared "value" attributes are created if
created if not already present, or replaced if they exist. not already present, or replaced if they exist.
4.6 ANNOTATION interaction with COPY 4.6. ANNOTATION interaction with COPY
The COPY command can be used to move messages from one mailbox to The COPY command can be used to move messages from one mailbox to
another on the same server. Servers that support the ANNOTATION another on the same server. Servers that support the ANNOTATION
extension MUST, for each message being copied, copy all ".priv" extension MUST, for each message being copied, copy all ".priv"
annotation data for the current user only, and all ".shared" annotation data for the current user only, and all ".shared"
annotation data along with the message to the new mailbox. The only annotation data along with the message to the new mailbox. The only
exceptions to this are if the destination mailbox permissions are exceptions to this are if the destination mailbox permissions are
such that either the ".priv" or ".shared" annotations are not such that either the ".priv" or ".shared" annotations are not
allowed, or if the destination mailbox is of a type that does not allowed, or if the destination mailbox is of a type that does not
support annotations or does not support storing of annotations (a support annotations or does not support storing of annotations (a
mailbox that returns a zero or "NIL" value for its ANNOTATESIZE mailbox that returns a "NONE" or "READ-ONLY" response code in its
response code), or if the destination mailbox cannot support the size ANNOTATIONS response), or if the destination mailbox cannot support
of a annotation because it exceeds the ANNOTATESIZE value. Servers the size of a annotation because it exceeds the ANNOTATIONS value.
MUST NOT copy ".priv" annotation data for users other than the Servers MUST NOT copy ".priv" annotation data for users other than
current user. the current user.
4.7 ANNOTATION Message Data Item in APPEND 4.7. ANNOTATION Message Data Item in APPEND
ANNOTATION <parenthesised entry-attribute-value list> ANNOTATION <parenthesised entry-attribute-value list>
Sets the specified list of entries and attributes in the resulting Sets the specified list of entries and attributes in the resulting
message. message.
The APPEND command can include annotations for the message being The APPEND command can include annotations for the message being
appended via the addition of a new append data item [ABNFEXT]. The appended via the addition of a new append data item [I-D.melnikov-
new data item can also be used with the multi-append [RFC3502] imap-ext-abnf]. The new data item can also be used with the multi-
extension that allows multiple messages to be appended via a single append [RFC3502] extension that allows multiple messages to be
APPEND command. appended via a single APPEND command.
Example: Example:
C: a APPEND drafts ANNOTATION ("/comment" C: a APPEND drafts ANNOTATION (/comment
("value.priv" "Don't send until we hear from Sally")) {310} (value.priv "Don't send until I say so")) {310}
S: + Ready for literal data S: + Ready for literal data
C: MIME-Version: 1.0 C: MIME-Version: 1.0
... ...
C: C:
S: a OK APPEND completed S: a OK APPEND completed
In the above example, a comment with a private value is added to a In the above example, a comment with a private value is added to a
new message appended to the mailbox. The ellipsis represents the new message appended to the mailbox. The ellipsis represents the
bulk of the message. bulk of the message.
4.8 ANNOTATION Criterion in SEARCH 4.8. ANNOTATION Criterion in SEARCH
ANNOTATION <entry-name> <attribute-name> <value> ANNOTATION <entry-name> <attribute-name> <value>
The ANNOTATION criterion for the SEARCH command allows a client to The ANNOTATION criterion for the SEARCH command allows a client to
search for a specified string in the value of an annotation entry of search for a specified string in the value of an annotation entry of
a message. a message.
Messages that have annotations with entries matching <entry-name> and Messages that have annotations with entries matching <entry-name> and
attributes matching <attribute-name> and the specified string <value> attributes matching <attribute-name> and the specified string <value>
in their values are returned in the SEARCH results. The "*" in their values are returned in the SEARCH results. The "*"
character can be used in the entry or attribute name fields to match character can be used in the entry name field to match any content in
any content in those items. The "%" character can be used in the those items. The "%" character can be used in the entry name field
entry or attribute name fields to match a single level of hierarchy to match a single level of hierarchy only.
only.
Only the "value", "value.priv" and "value.shared" attributes can be
searched. Clients MUST NOT specify an attribute other than either
"value", "value.priv" or "value.shared". Servers MUST return a BAD
response if the client tries to search any other attribute.
Example: Example:
C: a SEARCH ANNOTATION "/comment" "value" "IMAP4" C: a SEARCH ANNOTATION /comment value "IMAP4"
S: * SEARCH 2 3 5 7 11 13 17 19 23 S: * SEARCH 2 3 5 7 11 13 17 19 23
S: a OK Search complete S: a OK Search complete
In the above example, the message numbers of any messages In the above example, the message numbers of any messages
containing the string "IMAP4" in the shared or private "value" containing the string "IMAP4" in the shared or private "value"
attribute of the "/comment" entry are returned in the search attribute of the "/comment" entry are returned in the search
results. results.
Example: Example:
C: a SEARCH ANNOTATION "*" "*" "IMAP4" C: a SEARCH ANNOTATION * value.priv "IMAP4"
S: * SEARCH 1 2 3 5 8 13 21 34 S: * SEARCH 1 2 3 5 8 13 21 34
S: a OK Search complete S: a OK Search complete
In the above example, the message numbers of any messages In the above example, the message numbers of any messages
containing the string "IMAP4" in any attribute (public or private) containing the string "IMAP4" in the private "value" attribute of
of any entry are returned in the search results. any entry are returned in the search results.
4.9 ANNOTATION Key in SORT 4.9. ANNOTATION Key in SORT
ANNOTATION <entry-name> <attribute-name> ANNOTATION <entry-name> <attribute-name>
The ANNOTATION criterion for the SORT command [SORT] instructs the The ANNOTATION criterion for the SORT command [I-D.ietf-imapext-sort]
server to return the message numbers or UIDs of a mailbox, sorted instructs the server to return the message numbers or UIDs of a
using the values of the specified annotations. The ANNOTATION mailbox, sorted using the values of the specified annotations. The
criterion is available if the server returns both ANNOTATE and SORT ANNOTATION criterion is available if the server returns both ANNOTATE
as supported capabilities in the CAPABILITY command response. and SORT as supported capabilities in the CAPABILITY command
response.
Messages are sorted using the values of the <attribute-name> Messages are sorted using the values of the <attribute-name>
attributes in the <entry-name> entries. (The charset argument attributes in the <entry-name> entries.
determines sort order, as specified in the SORT extension
description.) Clients MUST provide either the ".priv" or ".shared" suffix to the
attribute name to ensure that the server knows which specific value
to sort on.
Only the "value.priv", "value.shared", "size.priv" and "size.shared"
attributes can be used for sorting. Clients MUST NOT specify an
attribute other than either "value.priv", "value.shared", "size.priv"
or "size.shared". Servers MUST return a BAD response if the client
tries to search any other attribute.
When either "value.priv" or "value.shared" is being sorted, the
server MUST use the character set value specified in the SORT command
to determine the appropriate sort order.
When either "size.priv" or "size.shared" is being sorted, the server
sorts using the numeric values of those attributes, as it would when
the "SIZE" sort key is used.
Example: Example:
C: a SORT (ANNOTATION "/altsubject" "value.shared") UTF-8 ALL C: a SORT (ANNOTATION /altsubject value.shared) UTF-8 ALL
S: * SORT 2 3 4 5 1 11 10 6 7 9 8 S: * SORT 2 3 4 5 1 11 10 6 7 9 8
S: a OK Sort complete S: a OK Sort complete
In the above example, the message numbers of all messages are In the above example, the message numbers of all messages are
returned, sorted according to the shared "value" attribute of the returned, sorted according to the shared "value" attribute of the
"/altsubject" entry. "/altsubject" entry.
Note that the ANNOTATION sort key must include a fully specified Note that the ANNOTATION sort key must include a fully specified
entry and attribute -- wildcards are not allowed. entry - wild cards are not allowed.
4.10 New ACL Rights 4.10. New ACL Rights
As discussed in Section 3.4 this extension adds a new "n" right to As discussed in Section 3.4 this extension adds a new "n" right to
the list of rights provided by the ACL extensions [RFC2086] and the list of rights provided by the ACL extensions [RFC2086] and
[ACLUPD]. [I-D.ietf-imapext-2086upd].
5. Formal Syntax 5. Formal Syntax
The following syntax specification uses the Augmented Backus-Naur The following syntax specification uses the Augmented Backus-Naur
Form (ABNF) notation as specified in [RFC2234]. Form (ABNF) notation as specified in [RFC2234].
Non-terminals referenced but not defined below are as defined by Non-terminals referenced but not defined below are as defined by
[RFC3501] with the new definitions in [ABNFEXT] superceding those in [RFC3501] with the new definitions in [I-D.melnikov-imap-ext-abnf]
[RFC3501]. superseding those in [RFC3501].
Except as noted otherwise, all alphabetic characters are Except as noted otherwise, all alphabetic characters are case-
case-insensitive. The use of upper or lower case characters to insensitive. The use of upper or lower case characters to define
define token strings is for editorial clarity only. Implementations token strings is for editorial clarity only. Implementations MUST
MUST accept these strings in a case-insensitive fashion. accept these strings in a case-insensitive fashion.
ann-size = "NONE" /
(("READ-ONLY" / nz-size)
[SP "NOPRIVATE"])
; response codes indicating the level of
; support for annotations in a mailbox
append-ext =/ att-annotate append-ext =/ att-annotate
; modifies [RFC3501] extension behaviour ; modifies [RFC3501] extension behaviour
att-annotate = "ANNOTATION" SP "(" entry-att *(SP entry-att) ")" att-annotate = "ANNOTATION" SP
"(" entry-att *(SP entry-att) ")"
att-search = "value" / "value.priv" / "value.shared"
; the only attributes that can be searched
att-match = string att-sort = "value.priv" / "value.shared" /
; dot-separated attribute name "size.priv" / "size.shared"
; MAY contain "*" or "%" for use as wildcards ; the only attributes that can be sorted
att-value = attrib SP value att-value = attrib SP value
attrib = string attrib = astring
; dot-separated attribute name ; dot-separated attribute name
; MUST NOT contain "*" or "%" ; MUST NOT contain "*" or "%"
attribs = att-match / attribs = attrib / "(" attrib *(SP attrib) ")"
"(" att-match *(SP att-match) ")" ; one or more attribute specifiers
capability =/ "ANNOTATE" capability =/ "ANNOTATE"
; defines the capability for this extension ; defines the capability for this extension
entries = entry-match / entries = entry-match /
"(" entry-match *(SP entry-match) ")" "(" entry-match *(SP entry-match) ")"
entry = string entry = astring
; slash-separated path to entry ; slash-separated path to entry
; MUST NOT contain "*" or "%" ; MUST NOT contain "*" or "%"
entry-att = entry SP "(" att-value *(SP att-value) ")" entry-att = entry SP "(" att-value *(SP att-value) ")"
entry-match = string entry-match = list-mailbox
; slash-separated path to entry ; slash-separated path to entry
; MAY contain "*" or "%" for use as wildcards ; MAY contain "*" or "%" for use as wildcards
fetch-att =/ "ANNOTATION" SP "(" entries SP attribs ")" fetch-att =/ "ANNOTATION" SP "(" entries SP attribs ")"
; modifies original IMAP fetch-att ; modifies original IMAP fetch-att
msg-att-dynamic =/ "ANNOTATION" SP msg-att-dynamic =/ "ANNOTATION" SP
( "(" entry-att *(SP entry-att) ")" / ( "(" entry-att *(SP entry-att) ")" /
"(" entry *(SP entry) ")" ) "(" entry *(SP entry) ")" )
; extends FETCH response with annotation data ; extends FETCH response with annotation data
resp-text-code =/ "ANNOTATE" SP "TOOBIG" / resp-text-code =/ "ANNOTATE" SP "TOOBIG" /
"ANNOTATE" SP "TOOMANY" / "ANNOTATE" SP "TOOMANY" /
"ANNOTATESIZE" SP (number / nil) "ANNOTATIONS" SP ann-size
; new response codes ; new response codes
search-key =/ "ANNOTATION" SP entry-match SP att-match search-key =/ "ANNOTATION" SP entry-match SP att-search
SP value SP value
; modifies original IMAP search-key ; modifies original IMAP search-key
select-param =/ "ANNOTATE" select-param =/ "ANNOTATE"
; defines the select parameter used with ; defines the select parameter used with
; ANNOTATE extension ; ANNOTATE extension
sort-key =/ "ANNOTATION" SP entry SP attrib sort-key =/ "ANNOTATION" SP entry SP att-sort
; modifies original sort-key ; modifies original sort-key
store-att-flags =/ att-annotate store-att-flags =/ att-annotate
; modifies original IMAP STORE command ; modifies original IMAP STORE command
value = nstring / literal8 value = nstring / literal8
6. IANA Considerations 6. IANA Considerations
Both entry names and attribute names MUST be specified in a standards Entry names MUST be specified in a standards track or IESG approved
track or IESG approved experimental RFC, or fall under the vendor experimental RFC, or fall under the vendor namespace. Vendor names
namespace. Vendor names MUST be registered. Each entry registration MUST be registered.
MUST include a recommended content-type that is used to indicate the
expected nature of the annotation value.
6.1 Entry and Attribute Registration Template Attribute names MUST be specified in a standards track or IESG
approved experimental RFC.
Each entry registration MUST include a content-type that is used to
indicate the nature of the annotation value. Where applicable a
charset parameter MUST be included with the content-type.
6.1. Entry and Attribute Registration Template
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[] Entry [] Attribute [] Entry [] Attribute
Name: ______________________________ Name: ______________________________
Description: _______________________ Description: _______________________
____________________________________ ____________________________________
____________________________________ ____________________________________
Recommended Content-Type:___________ Content-Type:_______________________
____________________________________
Contact person: ____________________ Contact person: ____________________
email: ____________________ email: ____________________
6.2 Entry Registrations 6.2. Entry Registrations
The following templates specify the IANA registrations of annotation The following templates specify the IANA registrations of annotation
entries specified in this document. entries specified in this document.
6.2.1 /comment 6.2.1. /comment
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[X] Entry [] Attribute [X] Entry [] Attribute
Name: /comment Name: /comment
Description: Defined in IMAP ANNOTATE extension document. Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain Content-Type: text/plain; charset=utf-8
Contact person: Cyrus Daboo
email: daboo@isamet.com
6.2.2 /flags/\answered
To: iana@iana.org
Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item:
[X] Entry [] Attribute
Name: /flags/\answered
Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain
Contact person: Cyrus Daboo
email: daboo@isamet.com
6.2.3 /flags/\flagged
To: iana@iana.org
Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item:
[X] Entry [] Attribute
Name: /flags/\flagged
Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain
Contact person: Cyrus Daboo
email: daboo@isamet.com
6.2.4 /flags/\deleted
To: iana@iana.org
Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item:
[X] Entry [] Attribute
Name: /flags/\deleted
Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain
Contact person: Cyrus Daboo
email: daboo@isamet.com
6.2.5 /flags/\seen
To: iana@iana.org
Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item:
[X] Entry [] Attribute
Name: /flags/\seen
Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain
Contact person: Cyrus Daboo
email: daboo@isamet.com
6.2.6 /flags/\draft
To: iana@iana.org
Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item:
[X] Entry [] Attribute
Name: /flags/\draft
Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain
Contact person: Cyrus Daboo
email: daboo@isamet.com
6.2.7 /flags/\recent
To: iana@iana.org
Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item:
[X] Entry [] Attribute
Name: /flags/\recent
Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain
Contact person: Cyrus Daboo
email: daboo@isamet.com
6.2.8 /flags/$mdnsent
To: iana@iana.org
Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item:
[X] Entry [] Attribute
Name: /flags/$mdnsent
Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain
Contact person: Cyrus Daboo
email: daboo@isamet.com
6.2.9 /flags/$redirected
To: iana@iana.org
Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item:
[X] Entry [] Attribute
Name: /flags/$redirected
Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain
Contact person: Cyrus Daboo Contact person: Cyrus Daboo
email: daboo@isamet.com email: cyrus@daboo.name
6.2.10 /flags/$forwarded 6.2.2. /flags
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[X] Entry [] Attribute [X] Entry [] Attribute
Name: /flags/$forwarded Name: /flags
Description: Defined in IMAP ANNOTATE extension document. Description: Reserved entry hierarchy.
Recommended Content-Type: text/plain Content-Type: -
Contact person: Cyrus Daboo Contact person: Cyrus Daboo
email: daboo@isamet.com email: cyrus@daboo.name
6.2.11 /altsubject 6.2.3. /altsubject
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[X] Entry [] Attribute [X] Entry [] Attribute
Name: /altsubject Name: /altsubject
Description: Defined in IMAP ANNOTATE extension document. Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain Content-Type: text/plain; charset=utf-8
Contact person: Cyrus Daboo Contact person: Cyrus Daboo
email: daboo@isamet.com email: cyrus@daboo.name
6.2.12 /<section-part>/comment 6.2.4. /<section-part>/comment
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[X] Entry [] Attribute [X] Entry [] Attribute
Name: /<section-part>/comment Name: /<section-part>/comment
Description: Defined in IMAP ANNOTATE extension document. Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain Content-Type: text/plain; charset=utf-8
Contact person: Cyrus Daboo Contact person: Cyrus Daboo
email: daboo@isamet.com email: cyrus@daboo.name
6.2.13 /<section-part>/flags/seen 6.2.5. /<section-part>/flags/seen
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[X] Entry [] Attribute [X] Entry [] Attribute
Name: /<section-part>/flags/seen Name: /<section-part>/flags/seen
Description: Defined in IMAP ANNOTATE extension document. Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain Content-Type: text/plain; charset=utf-8
Contact person: Cyrus Daboo Contact person: Cyrus Daboo
email: daboo@isamet.com email: cyrus@daboo.name
6.2.14 /<section-part>/flags/answered 6.2.6. /<section-part>/flags/answered
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[X] Entry [] Attribute [X] Entry [] Attribute
Name: /<section-part>/flags/answered Name: /<section-part>/flags/answered
Description: Defined in IMAP ANNOTATE extension document. Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain Content-Type: text/plain; charset=utf-8
Contact person: Cyrus Daboo Contact person: Cyrus Daboo
email: daboo@isamet.com email: cyrus@daboo.name
6.2.15 /<section-part>/flags/flagged 6.2.7. /<section-part>/flags/flagged
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[X] Entry [] Attribute [X] Entry [] Attribute
Name: /<section-part>/flags/flagged Name: /<section-part>/flags/flagged
Description: Defined in IMAP ANNOTATE extension document. Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain Content-Type: text/plain; charset=utf-8
Contact person: Cyrus Daboo Contact person: Cyrus Daboo
email: daboo@isamet.com email: cyrus@daboo.name
6.2.16 /<section-part>/flags/forwarded 6.2.8. /<section-part>/flags/forwarded
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[X] Entry [] Attribute [X] Entry [] Attribute
Name: /<section-part>/flags/forwarded Name: /<section-part>/flags/forwarded
Description: Defined in IMAP ANNOTATE extension document. Description: Defined in IMAP ANNOTATE extension document.
Recommended Content-Type: text/plain Content-Type: text/plain; charset=utf-8
Contact person: Cyrus Daboo Contact person: Cyrus Daboo
email: daboo@isamet.com email: cyrus@daboo.name
6.3 Attribute Registrations 6.3. Attribute Registrations
The following templates specify the IANA registrations of annotation The following templates specify the IANA registrations of annotation
attributes specified in this document. attributes specified in this document.
6.3.1 value 6.3.1. value
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[] Entry [X] Attribute [] Entry [X] Attribute
Name: value Name: value
Description: Defined in IMAP ANNOTATE extension document. Description: Defined in IMAP ANNOTATE extension document.
Contact person: Cyrus Daboo Contact person: Cyrus Daboo
email: daboo@isamet.com email: cyrus@daboo.name
6.3.2 size 6.3.2. size
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[] Entry [X] Attribute [] Entry [X] Attribute
Name: size Name: size
Description: Defined in IMAP ANNOTATE extension document. Description: Defined in IMAP ANNOTATE extension document.
Contact person: Cyrus Daboo Contact person: Cyrus Daboo
email: daboo@isamet.com email: cyrus@daboo.name
6.3.3 content-type
To: iana@iana.org
Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item:
[] Entry [X] Attribute
Name: content-type
Description: Defined in IMAP ANNOTATE extension document.
Contact person: Cyrus Daboo
email: daboo@isamet.com
6.3.4 content-language 6.3.3. content-language
To: iana@iana.org To: iana@iana.org
Subject: IMAP Annotate Registration Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item: Please register the following IMAP Annotate item:
[] Entry [X] Attribute [] Entry [X] Attribute
Name: content-language Name: content-language
Description: Defined in IMAP ANNOTATE extension document. Description: Defined in IMAP ANNOTATE extension document.
Contact person: Cyrus Daboo Contact person: Cyrus Daboo
email: daboo@isamet.com email: cyrus@daboo.name
6.3.5 display-name
To: iana@iana.org
Subject: IMAP Annotate Registration
Please register the following IMAP Annotate item:
[] Entry [X] Attribute
Name: display-name
Description: Defined in IMAP ANNOTATE extension document.
Contact person: Cyrus Daboo 7. Internationalization Considerations
email: daboo@isamet.com Annotations may contain values that include text strings, and both
searching and sorting are possible with annotations. Servers MUST
follow standard IMAP text normalization, character set conversion and
collation rules when such operations are acarried out, as they would
for other textual fields being searched or sorted on.
7. Security Considerations 8. Security Considerations
Annotations whose values are intended to remain private MUST be Annotations whose values are intended to remain private MUST be
stored in ".priv" values, and not ".shared" values which may be stored in ".priv" values, and not ".shared" values which may be
accessible to other users. accessible to other users.
Excluding the above issues the ANNOTATE extension does not raise any Excluding the above issues the ANNOTATE extension does not raise any
security considerations that are not present in the base IMAP security considerations that are not present in the base IMAP
protocol, and these issues are discussed in [RFC3501]. protocol, and these issues are discussed in [RFC3501].
8. References 9. References
8.1 Normative References 9.1. Normative References
[ABNFEXT] Melnikov, A., "Collected extensions to IMAP4 ABNF", [I-D.ietf-imapext-2086upd]
draft-melnikov-imap-ext-abnf-01.txt, March 2005. Melnikov, A., "IMAP4 ACL extension",
draft-ietf-imapext-2086upd-08 (work in progress),
June 2005.
[ACLUPD] Melnikov, A., "IMAP4 ACL extension", [I-D.ietf-imapext-sort]
draft-ietf-imapext-2086upd-02.txt, December 2004. Crispin, M. and K. Murchison, "INTERNET MESSAGE ACCESS
PROTOCOL - SORT AND THREAD EXTENSION",
draft-ietf-imapext-sort-17 (work in progress), May 2004.
[RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail [I-D.melnikov-imap-ext-abnf]
Extensions (MIME) Part Two: Media Types", RFC 2046, Daboo, C. and A. Melnikov, "Collected extensions to IMAP4
November 1996. ABNF", draft-melnikov-imap-ext-abnf-05 (work in progress),
October 2005.
[RFC2086] Myers, J., "IMAP4 ACL extension", RFC 2086, January 1997. [RFC2086] Myers, J., "IMAP4 ACL extension", RFC 2086, January 1997.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax [RFC2234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997. Specifications: ABNF", RFC 2234, November 1997.
[RFC2244] Newman, C. and J. Myers, "ACAP -- Application [RFC2244] Newman, C. and J. Myers, "ACAP -- Application
Configuration Access Protocol", RFC 2244, November 1997. Configuration Access Protocol", RFC 2244, November 1997.
[RFC3282] Alvestrand, H., "Content Language Headers", RFC 3282, May [RFC3282] Alvestrand, H., "Content Language Headers", RFC 3282,
2002. May 2002.
[RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION
4rev1", RFC 3501, March 2003. 4rev1", RFC 3501, March 2003.
[RFC3502] Crispin, M., "Internet Message Access Protocol (IMAP) - [RFC3502] Crispin, M., "Internet Message Access Protocol (IMAP) -
MULTIAPPEND Extension", RFC 3502, March 2003. MULTIAPPEND Extension", RFC 3502, March 2003.
[RFC3503] Melnikov, A., "Message Disposition Notification (MDN)
profile for Internet Message Access Protocol (IMAP)", RFC
3503, March 2003.
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
10646", STD 63, RFC 3629, November 2003. 10646", STD 63, RFC 3629, November 2003.
[SORT] Crispin, M. and K. Murchison, "Internet Message Access 9.2. Informative References
Protocol - Sort and Thread Extension",
draft-ietf-imapext-sort-17.txt, May 2004.
8.2 Informative References
[CONDSTORE] [I-D.ietf-imapext-condstore]
Melnikov, A. and S. Hole, "IMAP Extension for Conditional Melnikov, A. and S. Hole, "IMAP Extension for Conditional
STORE operation", draft-ietf-imapext-condstore-05.txt, STORE operation", draft-ietf-imapext-condstore-06 (work in
November 2003. progress), October 2005.
Appendix A. Acknowledgments
Many thanks to Chris Newman for his detailed comments on the first
draft of this document, and to the participants at the ACAP working
dinner in Pittsburgh. The participants of the IMAPext working group
made significant contributions to this work.
Authors' Addresses Authors' Addresses
Cyrus Daboo Cyrus Daboo
ISAMET, Inc.
5001 Baum Blvd.
Suite 650
Pittsburgh, PA 15213
US
EMail: daboo@isamet.com Email: cyrus@daboo.name
Randall Gellens Randall Gellens
QUALCOMM Incorporated QUALCOMM Incorporated
5775 Morehouse Dr. 5775 Morehouse Dr.
San Diego, CA 92121-2779 San Diego, CA 92121-2779
US US
EMail: randy@qualcomm.com Email: randy@qualcomm.com
Appendix A. Acknowledgments
Many thanks to Chris Newman for his detailed comments on the first
draft of this document, and to the participants at the ACAP working
dinner in Pittsburgh. The participants of the IMAPext working group
made significant contributions to this work.
Intellectual Property Statement Intellectual Property Statement
The IETF takes no position regarding the validity or scope of any The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be on the procedures with respect to rights in RFC documents can be
 End of changes. 154 change blocks. 
603 lines changed or deleted 441 lines changed or added

This html diff was produced by rfcdiff 1.27, available from http://www.levkowetz.com/ietf/tools/rfcdiff/