2377353cae
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
1740 lines
57 KiB
Plaintext
1740 lines
57 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group C. Daboo
|
||
Request for Comments: 5257 Apple Inc.
|
||
Category: Experimental R. Gellens
|
||
QUALCOMM Incorporated
|
||
June 2008
|
||
|
||
|
||
Internet Message Access Protocol - ANNOTATE Extension
|
||
|
||
Status of This Memo
|
||
|
||
This memo defines an Experimental Protocol for the Internet
|
||
community. It does not specify an Internet standard of any kind.
|
||
Discussion and suggestions for improvement are requested.
|
||
Distribution of this memo is unlimited.
|
||
|
||
Abstract
|
||
|
||
The ANNOTATE extension to the Internet Message Access Protocol
|
||
permits clients and servers to maintain "meta data" for messages, or
|
||
individual message parts, stored in a mailbox on the server. For
|
||
example, this can be used to attach comments and other useful
|
||
information to a message. It is also possible to attach annotations
|
||
to specific parts of a message, so that, for example, they could be
|
||
marked as seen, or important, or a comment added.
|
||
|
||
Note that this document was the product of a WG that had good
|
||
consensus on how to approach the problem. Nevertheless, the WG felt
|
||
it did not have enough information on implementation and deployment
|
||
hurdles to meet all of the requirements of a Proposed Standard. The
|
||
IETF solicits implementations and implementation reports in order to
|
||
make further progress.
|
||
|
||
Implementers should be aware that this specification may change in an
|
||
incompatible manner when going to Proposed Standard status. However,
|
||
any incompatible changes will result in a new capability name being
|
||
used to prevent problems with any deployments of the experimental
|
||
extension.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 1]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction and Overview .......................................3
|
||
2. Conventions Used in This Document ...............................4
|
||
3. Data Model ......................................................4
|
||
3.1. Overview ...................................................4
|
||
3.2. Namespace of Entries and Attributes ........................4
|
||
3.2.1. Entry Names .........................................5
|
||
3.2.2. Attribute Names .....................................7
|
||
3.3. Private Versus Shared ......................................7
|
||
3.4. Access Control .............................................8
|
||
3.5. Access to Standard IMAP Flags and Keywords ................11
|
||
4. IMAP Protocol Changes ..........................................11
|
||
4.1. General Considerations ....................................11
|
||
4.2. ANNOTATE Parameter with the SELECT/EXAMINE Commands .......12
|
||
4.3. ANNOTATION Message Data Item in FETCH Command .............12
|
||
4.4. ANNOTATION Message Data Item in FETCH Response ............14
|
||
4.5. ANNOTATION Message Data Item in STORE .....................16
|
||
4.6. ANNOTATION Interaction with COPY ..........................18
|
||
4.7. ANNOTATION Message Data Item in APPEND ....................18
|
||
4.8. ANNOTATION Criterion in SEARCH ............................19
|
||
4.9. ANNOTATION Key in SORT ....................................20
|
||
4.10. New ACL Rights ...........................................21
|
||
5. Formal Syntax ..................................................21
|
||
6. IANA Considerations ............................................23
|
||
6.1. Entry and Attribute Registration Template .................23
|
||
6.2. Entry Registrations .......................................24
|
||
6.2.1. /comment ...........................................24
|
||
6.2.2. /flags .............................................24
|
||
6.2.3. /altsubject ........................................25
|
||
6.2.4. /<section-part>/comment ............................25
|
||
6.2.5. /<section-part>/flags/seen .........................26
|
||
6.2.6. /<section-part>/flags/answered .....................26
|
||
6.2.7. /<section-part>/flags/flagged ......................27
|
||
6.2.8. /<section-part>/flags/forwarded ....................27
|
||
6.3. Attribute Registrations ...................................28
|
||
6.3.1. value ..............................................28
|
||
6.3.2. size ...............................................28
|
||
6.4. Capability Registration ...................................28
|
||
7. Internationalization Considerations ............................29
|
||
8. Security Considerations ........................................29
|
||
9. References .....................................................29
|
||
9.1. Normative References ......................................29
|
||
9.2. Informative References ....................................30
|
||
10. Acknowledgments ...............................................30
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 2]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
1. Introduction and Overview
|
||
|
||
The ANNOTATE extension is present in any IMAP [RFC3501]
|
||
implementation that returns "ANNOTATE-EXPERIMENT-1" as one of the
|
||
supported capabilities in the CAPABILITY response.
|
||
|
||
This extension makes the following changes to the IMAP protocol:
|
||
|
||
a. adds a new ANNOTATION message data item for use in FETCH.
|
||
|
||
b. adds a new ANNOTATION message data item for use in STORE.
|
||
|
||
c. adds a new ANNOTATION search criterion for use in SEARCH.
|
||
|
||
d. adds a new ANNOTATION sort key for use in the SORT extension.
|
||
|
||
e. adds a new ANNOTATION data item for use in APPEND.
|
||
|
||
f. adds a new requirement on the COPY command.
|
||
|
||
g. adds a new ANNOTATE parameter for use with the SELECT/EXAMINE
|
||
commands.
|
||
|
||
h. adds two new response codes to indicate store failures of
|
||
annotations.
|
||
|
||
i. adds a new untagged response code for the SELECT or EXAMINE
|
||
commands to indicate the maximum sized annotation that can be
|
||
stored.
|
||
|
||
j. adds a new Access Control List (ACL) "bit" for use with the ACL
|
||
extensions [RFC2086] and [RFC4314].
|
||
|
||
The data model used for the storage of annotations is based on the
|
||
Application Configuration Access Protocol [RFC2244]. Note that there
|
||
is no inheritance in annotations.
|
||
|
||
If a server supports annotations, then it MUST store all annotation
|
||
data permanently, i.e., there is no concept of "session only"
|
||
annotations that would correspond to the behavior of "session" flags
|
||
as defined in the IMAP base specification.
|
||
|
||
In order to provide optimum support for a disconnected client (one
|
||
that needs to synchronize annotations for use when offline), servers
|
||
SHOULD also support the Conditional STORE [RFC4551] extension.
|
||
|
||
The rest of this document describes the data model and protocol
|
||
changes more rigorously.
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 3]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
2. Conventions Used in This Document
|
||
|
||
The examples in this document use "C:" and "S:" to indicate lines
|
||
sent by the client and server, respectively.
|
||
|
||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
||
document are to be interpreted as described in [RFC2119].
|
||
|
||
3. Data Model
|
||
|
||
3.1. Overview
|
||
|
||
The data model for annotations in ANNOTATE uses a uniquely named
|
||
entry that contains a set of standard attributes. Thus, a single
|
||
coherent unit of "meta data" for a message is stored as a single
|
||
entry, made up of several attributes.
|
||
|
||
For example, a comment annotation added to a message has an entry
|
||
name of "/comment". This entry is composed of several attributes
|
||
such as "value", "size", etc., that contain the properties and data
|
||
of the entry.
|
||
|
||
The protocol changes to IMAP, described below, allow a client to
|
||
access or change the values of any attribute in any entry in a
|
||
message annotation, assuming it has sufficient access rights to do so
|
||
(see Section 3.4 for specifics).
|
||
|
||
3.2. Namespace of Entries and Attributes
|
||
|
||
A message may contain zero or more annotations, each of which is a
|
||
single uniquely named entry. Each entry has a hierarchical name,
|
||
with each component of the name separated by a slash ("/"). An entry
|
||
name MUST NOT contain two consecutive "/" characters and MUST NOT end
|
||
with a "/" character.
|
||
|
||
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
|
||
period ("."). An attribute name MUST NOT contain two consecutive "."
|
||
characters and MUST NOT end with a "." character.
|
||
|
||
The value of an attribute is "NIL" (has no value), or is a string of
|
||
zero or more octets.
|
||
|
||
Entry and attribute names MUST NOT contain asterisk ("*") or percent
|
||
("%") characters, and MUST NOT contain non-ASCII characters or the
|
||
NULL octet. Invalid entry or attribute names result in a BAD
|
||
response in any IMAP commands where they are used.
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 4]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Attribute names MUST NOT contain any hierarchical components with the
|
||
names "priv" or "shared", as those have special meaning (see Section
|
||
3.3).
|
||
|
||
Entry and attribute names are case-sensitive.
|
||
|
||
Use of control or punctuation characters in entry and attribute names
|
||
is strongly discouraged.
|
||
|
||
This specification defines an initial set of entry and attribute
|
||
names available for use in message annotations. In addition, an
|
||
extension mechanism is described to allow additional names to be
|
||
added as needed.
|
||
|
||
3.2.1. Entry Names
|
||
|
||
Entry names MUST be specified in a standards track or IESG approved
|
||
experimental RFC, or fall under the vendor namespace. See Section
|
||
6.1 for the registration template.
|
||
|
||
/
|
||
Defines the top-level of entries associated with an entire
|
||
message. This entry itself does not contain any attributes. All
|
||
entries that start with a numeric character ("0" - "9") refer to
|
||
an annotation on a specific body part. All other entries are for
|
||
annotations on the entire message.
|
||
|
||
/comment
|
||
Defines a comment or note associated with an entire message.
|
||
|
||
/flags
|
||
This entry hierarchy is reserved for future use.
|
||
|
||
/altsubject
|
||
Contains text supplied by the message recipient to be used by the
|
||
client, instead of the original message Subject.
|
||
|
||
/vendor/<vendor-token>
|
||
Defines the top-level of entries associated with an entire message
|
||
as created by a particular product of some vendor. These sub-
|
||
entries can be used by vendors to provide client-specific
|
||
annotations. The vendor-token MUST be registered with IANA, using
|
||
the [RFC2244] vendor subtree registry.
|
||
|
||
/<section-part>
|
||
Defines the top-level of entries associated with a specific body
|
||
part of a message. This entry itself does not contain any
|
||
attributes. The section-part is a numeric part specifier. Its
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 5]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
syntax is the same as the section-part ABNF element defined in
|
||
[RFC3501]. The server MUST return a BAD response if the client
|
||
uses an incorrect part specifier (either incorrect syntax or a
|
||
specifier referring to a non-existent part). The server MUST
|
||
return a BAD response if the client uses an empty part specifier
|
||
(which is used in IMAP to represent the entire message).
|
||
|
||
/<section-part>/comment
|
||
Defines a comment or note associated with a specific body part of
|
||
a message.
|
||
|
||
/<section-part>/flags
|
||
Defines the top-level of entries associated with the flag state
|
||
for a specific body part of a message. All sub-entries are
|
||
maintained entirely by the client. There is no implicit change to
|
||
any flag by the server.
|
||
|
||
/<section-part>/flags/seen
|
||
This is similar to the IMAP \Seen flag, except it applies
|
||
to only the body part referenced by the entry.
|
||
|
||
/<section-part>/flags/answered
|
||
This is similar to the IMAP \Answered flag, except it
|
||
applies to only the body part referenced by the entry.
|
||
|
||
/<section-part>/flags/flagged
|
||
This is similar to the IMAP \Flagged flag, except it
|
||
applies to only the body part referenced by the entry.
|
||
|
||
/<section-part>/flags/forwarded
|
||
This is similar to the IMAP $Forwarded keyword, except it
|
||
applies to only the body part referenced by the entry.
|
||
|
||
Defines flags for a specific body part of a message. The "value"
|
||
attribute of each of the entries described above must be either
|
||
"1", "0", or "NIL". "1" corresponds to the flag being set.
|
||
|
||
/<section-part>/vendor/<vendor-token>
|
||
Defines the top-level of entries associated with a specific body
|
||
part of a message as created by a particular product of some
|
||
vendor. This entry can be used by vendors to provide client
|
||
specific annotations. The vendor-token MUST be registered with
|
||
IANA.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 6]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
3.2.2. Attribute Names
|
||
|
||
Attribute names MUST be specified in a standards track or IESG
|
||
approved experimental RFC. See Section 6.1 for the registration
|
||
template.
|
||
|
||
All attribute names implicitly have a ".priv" and a ".shared" suffix
|
||
that maps to private and shared versions of the entry. Searching or
|
||
fetching without using either suffix will include both. The client
|
||
MUST specify either a ".priv" or ".shared" suffix when storing an
|
||
annotation or sorting on annotations.
|
||
|
||
value
|
||
A string or binary data representing the value of the annotation.
|
||
To delete an annotation, the client can store "NIL" into the
|
||
value. If the client requests the value attribute for a non-
|
||
existent entry, then the server MUST return "NIL" for the value.
|
||
The content represented by the string is determined by the
|
||
content-type used to register the entry (see Section 6.1 for entry
|
||
registration templates). Where applicable, the registered
|
||
content-type MUST include a charset parameter. Text values SHOULD
|
||
use the utf-8 [RFC3629] character set. Note that binary data
|
||
(data which may contain the NULL octet) is allowed (e.g., for
|
||
storing images), and this extension uses the "literal8" syntax
|
||
element [RFC4466] to allow such data to be written to or read from
|
||
the server.
|
||
|
||
size
|
||
The size of the value, in octets. Set automatically by the
|
||
server, read-only to clients. If the client requests the size
|
||
attribute for a non-existent entry, then the server MUST return
|
||
"0" (zero) for the size.
|
||
|
||
3.3. Private Versus Shared
|
||
|
||
Some IMAP mailboxes are private, accessible only to the owning user.
|
||
Other mailboxes are not, either because the owner has set an ACL
|
||
[RFC4314] that permits access by other users, or because it is a
|
||
shared mailbox.
|
||
|
||
This raises the issue of shared versus private annotations.
|
||
|
||
If all annotations are private, it is then impossible to have
|
||
annotations in a shared or otherwise non-private mailbox be visible
|
||
to other users. This eliminates what could be a useful aspect of
|
||
annotations in a shared environment. An example of such use is a
|
||
shared IMAP folder containing bug reports. Engineers may want to use
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 7]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
annotations to add information to existing messages, indicate
|
||
assignments, status, etc. This use requires shared annotations.
|
||
|
||
If all annotations are shared, it is impossible to use annotations
|
||
for private notes on messages in shared mailboxes. Also, modifying
|
||
an ACL to permit access to a mailbox by other users may
|
||
unintentionally expose private information.
|
||
|
||
There are also situations in which both shared and private
|
||
annotations are useful. For example, an administrator may want to
|
||
set shared annotations on messages in a shared folder, which
|
||
individual users may wish to supplement with additional notes.
|
||
|
||
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
|
||
client to access both and not overlook either. There is also a
|
||
danger in allowing a client to store an annotation without knowing if
|
||
it is shared or private.
|
||
|
||
This document proposes two standard suffixes for all attributes:
|
||
".shared" and ".priv". A SEARCH or FETCH command that specifies
|
||
neither, uses both. STORE, APPEND, and SORT commands MUST explicitly
|
||
use ".priv" or ".shared" suffixes.
|
||
|
||
If the ANNOTATE extension is present, support for shared annotations
|
||
in servers is REQUIRED, while support for private annotations in
|
||
servers is OPTIONAL. This recognizes the fact that support for
|
||
private annotations may introduce a significant increase in
|
||
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
|
||
".priv" or ".shared" annotation values. How those rights are
|
||
calculated depends on whether or not the ACL [RFC2086] extension or
|
||
its update [RFC4314] is present. If a client attempts to store or
|
||
fetch an annotation to which they do not have the appropriate rights,
|
||
the server MUST respond with a NO response.
|
||
|
||
When the ACL extension is not present, access to annotation values is
|
||
governed by the nature of the selected state, in particular whether
|
||
the mailbox was SELECTED or EXAMINED in READ-ONLY or READ-WRITE mode.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 8]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
When the ACL extension is present, the server MUST recognize the new
|
||
ACL "n" right, in addition to the ones defined by the ACL extension
|
||
itself.
|
||
|
||
For ".priv" annotation values, the "r" right controls both read and
|
||
write access. When it is on, access to ".priv" annotations is
|
||
allowed; when it is off, access to ".priv" annotations is disallowed.
|
||
|
||
For ".shared" annotation values, the "r" right controls read access.
|
||
When it is on, ".shared" annotations can be read; when it is off,
|
||
".shared" annotations cannot be read.
|
||
|
||
For ".shared" annotation values, the "n" right controls write access.
|
||
When it is on, ".shared" annotations can be changed or created
|
||
through either a STORE or APPEND command; when it is off, ".shared"
|
||
annotations cannot be changed or created. The "n" right constitutes
|
||
a "shared flag right" as defined in Section 6.2 of [RFC4314].
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 9]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
A summary of all the access control restrictions is tabulated below
|
||
|
||
+---------------+---------------+-----------------------------------+
|
||
| Server Type | Action on | Type of mailbox |
|
||
| | annotation | |
|
||
+===============+===============+===================================+
|
||
| | | |
|
||
| | read .priv | Any mailbox that can be SELECTED |
|
||
| | values | or EXAMINED. |
|
||
| | | |
|
||
| +---------------+-----------------------------------+
|
||
| | | |
|
||
| | write .priv | Any SELECTED [READ-WRITE] mailbox.|
|
||
| | values | SELECTED [READ-ONLY] mailboxes MAY|
|
||
| Server | | also permit writes. |
|
||
| without | | |
|
||
| ACL Extension +---------------+-----------------------------------+
|
||
| | | |
|
||
| | read .shared | Any mailbox that can be SELECTED |
|
||
| | values | or EXAMINED. |
|
||
| | | |
|
||
| +---------------+-----------------------------------+
|
||
| | | |
|
||
| | write .shared | Any mailbox that can be SELECTED |
|
||
| | values | or EXAMINED and is [READ-WRITE]. |
|
||
| | | |
|
||
+---------------+---------------+-----------------------------------+
|
||
| | | |
|
||
| | read .priv | Any mailbox with the "r" |
|
||
| | values | ACL right. |
|
||
| | | |
|
||
| +---------------+-----------------------------------+
|
||
| | | |
|
||
| | write .priv | Any mailbox with the "r" |
|
||
| Server | values | ACL right. |
|
||
| with | | |
|
||
| ACL Extension +---------------+-----------------------------------+
|
||
| | | |
|
||
| | read .shared | Any mailbox with the "r" |
|
||
| | values | ACL right. |
|
||
| | | |
|
||
| +---------------+-----------------------------------+
|
||
| | | |
|
||
| | write .shared | Any mailbox with the "n" |
|
||
| | values | ACL right. |
|
||
| | | |
|
||
+---------------+---------------+-----------------------------------+
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 10]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
3.5. Access to Standard IMAP Flags and Keywords
|
||
|
||
Due to the ambiguity of how private and shared values would map to
|
||
the base IMAP flag and keyword values, the ANNOTATE extension does
|
||
not expose IMAP flags or keywords as entries. However, the /flags
|
||
annotation entry is reserved for future use and MUST NOT be used by
|
||
clients or servers supporting this extension.
|
||
|
||
Clients that need to implement shared and private "flags" can create
|
||
their own annotation entries for those, completely bypassing the base
|
||
IMAP flag/keyword behavior.
|
||
|
||
4. IMAP Protocol Changes
|
||
|
||
4.1. General Considerations
|
||
|
||
Servers may be able to offer only a limited level of support for
|
||
annotations in mailboxes, and it is useful for clients to be able to
|
||
know what level of support is available. Servers MUST return an
|
||
ANNOTATIONS response code during the SELECT or EXAMINE command for a
|
||
mailbox to indicate the level of support. Possible data items used
|
||
with the ANNOTATIONS response code are:
|
||
|
||
"NONE" - this indicates that the mailbox being selected does not
|
||
support annotations at all. Clients MUST NOT attempt to use
|
||
annotation extensions in commands for this mailbox.
|
||
|
||
"READ-ONLY" - this indicates that the annotations supported by the
|
||
mailbox cannot be changed by the client. Clients MUST NOT attempt
|
||
to store annotations on any messages in a mailbox with this
|
||
response code.
|
||
|
||
"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 targeted 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 in octets 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
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 11]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
annotation data size of at least 1024 octets 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
|
||
[RFC4466] "ANNOTATE", which is used to turn on unsolicited responses
|
||
for annotations as described in Section 4.4. This optional parameter
|
||
results in a per-mailbox state change, i.e., it must be used in each
|
||
SELECT/EXAMINE command in order to be effective, irrespective of
|
||
whether it was used in a previous SELECT/EXAMINE during the same
|
||
session.
|
||
|
||
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 octets, 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
|
||
command. This allows clients to retrieve annotations for a range of
|
||
messages in the currently selected mailbox.
|
||
|
||
ANNOTATION <entry-specifier> <attribute-specifier>
|
||
|
||
The ANNOTATION message data item, when used by the client in the
|
||
FETCH command, takes an entry specifier and an attribute
|
||
specifier.
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 12]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Example:
|
||
|
||
C: a FETCH 1 (ANNOTATION (/comment value))
|
||
S: * 1 FETCH (ANNOTATION (/comment
|
||
(value.priv "My comment"
|
||
value.shared "Group note")))
|
||
S: a OK Fetch complete
|
||
|
||
In the above example, the content of the "value" attribute for the
|
||
"/comment" entry is requested by the client and returned by the
|
||
server. Since neither ".shared" nor ".priv" was specified, both
|
||
are returned.
|
||
|
||
"*" and "%" wild card characters can be used in entry specifiers to
|
||
match one or more characters at that position, with the exception
|
||
that "%" does not match the "/" hierarchy delimiter. Thus, an entry
|
||
specifier of "/%" matches entries such as "/comment" and
|
||
"/altsubject", but not "/1/comment".
|
||
|
||
Example:
|
||
|
||
C: a UID FETCH 1123 (UID ANNOTATION
|
||
(/* (value.priv size.priv)))
|
||
S: * 12 FETCH (UID 1123 ANNOTATION
|
||
(/comment (value.priv "My comment"
|
||
size.priv "10")
|
||
/altsubject (value.priv "Rhinoceroses!"
|
||
size.priv "13")
|
||
/vendor/foobar/label.priv
|
||
(value.priv "label43"
|
||
size.priv "7")
|
||
/vendor/foobar/personality
|
||
(value.priv "Tallulah Bankhead"
|
||
size.priv "17")))
|
||
S: a OK Fetch complete
|
||
|
||
In the above example, the contents of the private "value" and
|
||
"size" attributes for any entries in the "/" hierarchy are
|
||
requested by the client and returned by the server.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 13]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Example:
|
||
|
||
C: a FETCH 1 (ANNOTATION (/% value.shared))
|
||
S: * 1 FETCH (ANNOTATION
|
||
(/comment (value.shared "Patch Mangler")
|
||
/altsubject (value.shared "Patches? We don't
|
||
need no steenkin patches!")))
|
||
S: a OK Fetch complete
|
||
|
||
In the above example, the contents of the shared "value"
|
||
attributes for entries at the top level only of the "/" hierarchy
|
||
are requested by the client and returned by the server.
|
||
|
||
Entry and attribute specifiers can be lists of atomic specifiers, so
|
||
that multiple items of each type may be returned in a single FETCH
|
||
command.
|
||
|
||
Example:
|
||
|
||
C: a FETCH 1 (ANNOTATION
|
||
((/comment /altsubject) value.priv))
|
||
S: * 1 FETCH (ANNOTATION
|
||
(/comment (value.priv "What a chowder-head")
|
||
/altsubject (value.priv "How to crush beer cans")))
|
||
S: a OK Fetch complete
|
||
|
||
In the above example, the contents of the private "value"
|
||
attributes for the two entries "/comment" and "/altsubject" are
|
||
requested by the client and returned by the server.
|
||
|
||
4.4. ANNOTATION Message Data Item in FETCH Response
|
||
|
||
The ANNOTATION message data item in the FETCH response displays
|
||
information about annotations in a message.
|
||
|
||
ANNOTATION parenthesized list
|
||
|
||
The response consists of a list of entries, each of which have a
|
||
list of attribute-value pairs.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 14]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Example:
|
||
|
||
C: a FETCH 1 (ANNOTATION (/comment value))
|
||
S: * 1 FETCH (ANNOTATION (/comment
|
||
(value.priv "My comment"
|
||
value.shared NIL)))
|
||
S: a OK Fetch complete
|
||
|
||
In the above example, a single entry with a single attribute-value
|
||
pair is returned by the server. Since the client did not specify
|
||
a ".shared" or ".priv" suffix, both are returned. Only the
|
||
private attribute has a value (the shared value is "NIL").
|
||
|
||
Example:
|
||
|
||
C: a FETCH 1 (ANNOTATION
|
||
((/comment /altsubject) value))
|
||
S: * 1 FETCH (ANNOTATION
|
||
(/comment (value.priv "My comment"
|
||
value.shared NIL)
|
||
/altsubject (value.priv "My subject"
|
||
value.shared NIL)))
|
||
S: a OK Fetch complete
|
||
|
||
In the above example, two entries, each with a single attribute-
|
||
value pair, are returned by the server. Since the client did not
|
||
specify a ".shared" or ".priv" suffix, both are returned. Only
|
||
the private attributes have values; the shared attributes are
|
||
"NIL".
|
||
|
||
Example:
|
||
|
||
C: a FETCH 1 (ANNOTATION
|
||
(/comment (value size)))
|
||
S: * 1 FETCH (ANNOTATION
|
||
(/comment
|
||
(value.priv "My comment"
|
||
value.shared NIL
|
||
size.priv "10"
|
||
size.shared "0")))
|
||
S: a OK Fetch complete
|
||
|
||
In the above example, a single entry with two attribute-value
|
||
pairs is returned by the server. Since the client did not specify
|
||
a ".shared" or ".priv" suffix, both are returned. Only the
|
||
private attributes have values; the shared attributes are "NIL".
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 15]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Servers SHOULD send ANNOTATION message data items in unsolicited
|
||
FETCH responses if an annotation entry is changed by a third-party,
|
||
and the ANNOTATE select parameter was used. This allows servers to
|
||
keep clients updated with changes to annotations by other clients.
|
||
|
||
Unsolicited ANNOTATION responses MUST NOT include ANNOTATION data
|
||
values -- only the entry name of the ANNOTATION that has changed.
|
||
This restriction avoids sending ANNOTATION data values (which may be
|
||
large) to a client unless the client explicitly asks for the value.
|
||
|
||
Example:
|
||
|
||
C: a STORE 1 +FLAGS (\Seen)
|
||
S: * 1 FETCH (FLAGS (\Seen))
|
||
ANNOTATION (/comment))
|
||
S: a OK STORE complete
|
||
|
||
In the above example, an unsolicited ANNOTATION response is
|
||
returned during a STORE command. The unsolicited response
|
||
contains only the entry name of the annotation that changed, and
|
||
not its value.
|
||
|
||
4.5. ANNOTATION Message Data Item in STORE
|
||
|
||
ANNOTATION <parenthesized entry-attribute-value list>
|
||
|
||
Sets the specified list of entries by adding or replacing the
|
||
specified attributes with the values provided. Clients can use
|
||
"NIL" for values of attributes it wants to remove from entries.
|
||
|
||
The ANNOTATION message data item used with the STORE command has an
|
||
implicit ".SILENT" behavior. This means the server does not generate
|
||
an untagged FETCH in response to the STORE command and assumes that
|
||
the client updates its own cache if the command succeeds. Though
|
||
note, that if the Conditional STORE extension [RFC4551] is present,
|
||
then an untagged FETCH response with a MODSEQ data item will be
|
||
returned by the server as required by [RFC4551].
|
||
|
||
If the server is unable to store an annotation because the size of
|
||
its value is too large, the server MUST return a tagged NO response
|
||
with a "[ANNOTATE TOOBIG]" response code.
|
||
|
||
If the server is unable to store a new annotation because the maximum
|
||
number of allowed annotations has already been reached, the server
|
||
MUST return a tagged NO response with a "[ANNOTATE TOOMANY]" response
|
||
code.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 16]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Example:
|
||
|
||
C: a STORE 1 ANNOTATION (/comment
|
||
(value.priv "My new comment"))
|
||
S: a OK Store complete
|
||
|
||
In the above example, the entry "/comment" is created (if not
|
||
already present). Its private attribute "value" is created if not
|
||
already present, or replaced if it exists. "value.priv" is set to
|
||
"My new comment".
|
||
|
||
Example:
|
||
|
||
C: a STORE 1 ANNOTATION (/comment
|
||
(value.shared NIL))
|
||
S: a OK Store complete
|
||
|
||
In the above example, the shared "value" attribute of the entry
|
||
"/comment" is removed by storing "NIL" into the attribute.
|
||
|
||
Multiple entries can be set in a single STORE command by listing
|
||
entry-attribute-value pairs in the list.
|
||
|
||
Example:
|
||
|
||
C: a STORE 1 ANNOTATION (/comment
|
||
(value.priv "Get tix Tuesday")
|
||
/altsubject
|
||
(value.priv "Wots On"))
|
||
S: a OK Store complete
|
||
|
||
In the above example, the entries "/comment" and "/altsubject" are
|
||
created (if not already present) and the private attribute "value"
|
||
is created or replaced for each entry.
|
||
|
||
Multiple attributes can be set in a single STORE command by listing
|
||
multiple attribute-value pairs in the entry list.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 17]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Example:
|
||
|
||
C: a STORE 1 ANNOTATION (/comment
|
||
(value.priv "My new comment"
|
||
value.shared "foo's bar"))
|
||
S: a OK Store complete
|
||
|
||
In the above example, the entry "/comment" is created (if not
|
||
already present) and the private and shared "value" attributes are
|
||
created if not already present, or replaced if they exist.
|
||
|
||
4.6. ANNOTATION Interaction with COPY
|
||
|
||
The COPY command can be used to move messages from one mailbox to
|
||
another on the same server. Servers that support the ANNOTATION
|
||
extension MUST, for each message being copied, copy all ".priv"
|
||
annotation data for the current user only, and all ".shared"
|
||
annotation data along with the message to the new mailbox. The only
|
||
exceptions to this are if the destination mailbox permissions are
|
||
such that either the ".priv" or ".shared" annotations are not
|
||
allowed, or if the destination mailbox is of a type that does not
|
||
support annotations or does not support storing of annotations (a
|
||
mailbox that returns a "NONE" or "READ-ONLY" response code in its
|
||
ANNOTATIONS response), or if the destination mailbox cannot support
|
||
the size of an annotation because it exceeds the ANNOTATIONS value.
|
||
Servers MUST NOT copy ".priv" annotation data for users other than
|
||
the current user.
|
||
|
||
4.7. ANNOTATION Message Data Item in APPEND
|
||
|
||
ANNOTATION <parenthesized entry-attribute-value list>
|
||
|
||
Sets the specified list of entries and attributes in the resulting
|
||
message.
|
||
|
||
The APPEND command can include annotations for the message being
|
||
appended via the addition of a new append data item [RFC4466]. The
|
||
new data item can also be used with the multi-append [RFC3502]
|
||
extension that allows multiple messages to be appended via a single
|
||
APPEND command.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 18]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Example:
|
||
|
||
C: a APPEND drafts ANNOTATION (/comment
|
||
(value.priv "Don't send until I say so")) {310}
|
||
S: + Ready for literal data
|
||
C: MIME-Version: 1.0
|
||
...
|
||
C:
|
||
S: a OK APPEND completed
|
||
|
||
In the above example, a comment with a private value is added to a
|
||
new message appended to the mailbox. The ellipsis represents the
|
||
bulk of the message.
|
||
|
||
4.8. ANNOTATION Criterion in SEARCH
|
||
|
||
ANNOTATION <entry-name> <attribute-name> <value>
|
||
|
||
The ANNOTATION criterion for the SEARCH command allows a client to
|
||
search for a specified string in the value of an annotation entry of
|
||
a message.
|
||
|
||
Messages that have annotations with entries matching <entry-name>,
|
||
attributes matching <attribute-name>, and the specified string
|
||
<value> in their values are returned in the SEARCH results. The "*"
|
||
character can be used in the entry name field to match any content in
|
||
those items. The "%" character can be used in the entry name field
|
||
to match a single level of hierarchy 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:
|
||
|
||
C: a SEARCH ANNOTATION /comment value "IMAP4"
|
||
S: * SEARCH 2 3 5 7 11 13 17 19 23
|
||
S: a OK Search complete
|
||
|
||
In the above example, the message numbers of any messages
|
||
containing the string "IMAP4" in the shared or private "value"
|
||
attribute of the "/comment" entry are returned in the search
|
||
results.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 19]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Example:
|
||
|
||
C: a SEARCH ANNOTATION * value.priv "IMAP4"
|
||
S: * SEARCH 1 2 3 5 8 13 21 34
|
||
S: a OK Search complete
|
||
|
||
In the above example, the message numbers of any messages
|
||
containing the string "IMAP4" in the private "value" attribute of
|
||
any entry are returned in the search results.
|
||
|
||
4.9. ANNOTATION Key in SORT
|
||
|
||
ANNOTATION <entry-name> <attribute-name>
|
||
|
||
The ANNOTATION criterion for the SORT command [RFC5256] instructs the
|
||
server to return the sequence numbers or Unique Identifiers (UIDs) of
|
||
messages in a mailbox, sorted using the values of the specified
|
||
annotations. The ANNOTATION criterion is available if the server
|
||
returns both ANNOTATE-EXPERIMENT-1 and SORT as supported capabilities
|
||
in the CAPABILITY command response.
|
||
|
||
Messages are sorted using the values of the <attribute-name>
|
||
attributes in the <entry-name> entries.
|
||
|
||
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" and "value.shared" attributes can be used for
|
||
sorting. Clients MUST NOT specify an attribute other than either
|
||
"value.priv" or "value.shared". Servers MUST return a BAD response
|
||
if the client tries to sort on 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.
|
||
|
||
Example:
|
||
|
||
C: a SORT (ANNOTATION /altsubject value.shared) UTF-8 ALL
|
||
S: * SORT 2 3 4 5 1 11 10 6 7 9 8
|
||
S: a OK Sort complete
|
||
|
||
In the above example, the message numbers of all messages are
|
||
returned, sorted according to the shared "value" attribute of the
|
||
"/altsubject" entry.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 20]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Note that the ANNOTATION sort key must include a fully specified
|
||
entry -- wild cards are not allowed.
|
||
|
||
4.10. New ACL Rights
|
||
|
||
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
|
||
[RFC4314].
|
||
|
||
5. Formal Syntax
|
||
|
||
The following syntax specification uses the Augmented Backus-Naur
|
||
Form (ABNF) notation as specified in [RFC5234].
|
||
|
||
Non-terminals referenced but not defined below are as defined by
|
||
[RFC3501] with the new definitions in [RFC4466] superseding those in
|
||
[RFC3501].
|
||
|
||
Except as noted otherwise, all alphabetic characters are case-
|
||
insensitive. The use of upper or lower case characters to define
|
||
token strings is for editorial clarity only. Implementations MUST
|
||
accept these strings in a case-insensitive fashion.
|
||
|
||
ann-size = "NONE" /
|
||
(("READ-ONLY" / nz-number)
|
||
[SP "NOPRIVATE"])
|
||
; response codes indicating the level of
|
||
; support for annotations in a mailbox
|
||
|
||
append-ext =/ att-annotate
|
||
; modifies [RFC3501] extension behaviour
|
||
|
||
att-annotate = "ANNOTATION" SP
|
||
"(" entry-att *(SP entry-att) ")"
|
||
|
||
att-search = "value" / "value.priv" / "value.shared"
|
||
; the only attributes that can be searched
|
||
|
||
att-sort = "value.priv" / "value.shared"
|
||
; the only attributes that can be sorted
|
||
|
||
att-value = attrib SP value
|
||
|
||
attrib = astring
|
||
; dot-separated attribute name
|
||
; MUST NOT contain "*" or "%"
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 21]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
attribs = attrib / "(" attrib *(SP attrib) ")"
|
||
; one or more attribute specifiers
|
||
|
||
capability =/ "ANNOTATE-EXPERIMENT-1"
|
||
; defines the capability for this extension
|
||
|
||
entries = entry-match /
|
||
"(" entry-match *(SP entry-match) ")"
|
||
|
||
entry = astring
|
||
; slash-separated path to entry
|
||
; MUST NOT contain "*" or "%"
|
||
|
||
entry-att = entry SP "(" att-value *(SP att-value) ")"
|
||
|
||
entry-match = list-mailbox
|
||
; slash-separated path to entry
|
||
; MAY contain "*" or "%" for use as wild cards
|
||
|
||
fetch-att =/ "ANNOTATION" SP "(" entries SP attribs ")"
|
||
; modifies original IMAP fetch-att
|
||
|
||
msg-att-dynamic =/ "ANNOTATION" SP
|
||
( "(" entry-att *(SP entry-att) ")" /
|
||
"(" entry *(SP entry) ")" )
|
||
; extends FETCH response with annotation data
|
||
|
||
resp-text-code =/ "ANNOTATE" SP "TOOBIG" /
|
||
"ANNOTATE" SP "TOOMANY" /
|
||
"ANNOTATIONS" SP ann-size
|
||
; new response codes
|
||
|
||
search-key =/ "ANNOTATION" SP entry-match SP att-search
|
||
SP value
|
||
; modifies original IMAP search-key
|
||
|
||
select-param =/ "ANNOTATE"
|
||
; defines the select parameter used with
|
||
; ANNOTATE extension
|
||
|
||
sort-key =/ "ANNOTATION" SP entry SP att-sort
|
||
; modifies original sort-key
|
||
|
||
store-att-flags =/ att-annotate
|
||
; modifies original IMAP STORE command
|
||
|
||
value = nstring / literal8
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 22]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
6. IANA Considerations
|
||
|
||
Entry names MUST be specified in a standards track or IESG approved
|
||
experimental RFC, or fall under the vendor namespace. Vendor names
|
||
MUST be registered.
|
||
|
||
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
|
||
Subject: IMAP Annotate Registration
|
||
|
||
Please register the following IMAP Annotate item:
|
||
|
||
[] Entry [] Attribute
|
||
|
||
Name: ______________________________
|
||
|
||
Description: _______________________
|
||
|
||
____________________________________
|
||
|
||
____________________________________
|
||
|
||
Content-Type:_______________________
|
||
|
||
Contact person: ____________________
|
||
|
||
email: ____________________
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 23]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
6.2. Entry Registrations
|
||
|
||
The following templates specify the IANA registrations of annotation
|
||
entries specified in this document.
|
||
|
||
6.2.1. /comment
|
||
|
||
To: iana@iana.org
|
||
Subject: IMAP Annotate Registration
|
||
|
||
Please register the following IMAP Annotate item:
|
||
|
||
[X] Entry [] Attribute
|
||
|
||
Name: /comment
|
||
|
||
Description: Defined in IMAP ANNOTATE extension document.
|
||
|
||
Content-Type: text/plain; charset=utf-8
|
||
|
||
Contact person: Cyrus Daboo
|
||
|
||
email: cyrus@daboo.name
|
||
|
||
6.2.2. /flags
|
||
|
||
To: iana@iana.org
|
||
Subject: IMAP Annotate Registration
|
||
|
||
Please register the following IMAP Annotate item:
|
||
|
||
[X] Entry [] Attribute
|
||
|
||
Name: /flags
|
||
|
||
Description: Reserved entry hierarchy.
|
||
|
||
Content-Type: -
|
||
|
||
Contact person: Cyrus Daboo
|
||
|
||
email: cyrus@daboo.name
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 24]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
6.2.3. /altsubject
|
||
|
||
To: iana@iana.org
|
||
Subject: IMAP Annotate Registration
|
||
|
||
Please register the following IMAP Annotate item:
|
||
|
||
[X] Entry [] Attribute
|
||
|
||
Name: /altsubject
|
||
|
||
Description: Defined in IMAP ANNOTATE extension document.
|
||
|
||
Content-Type: text/plain; charset=utf-8
|
||
|
||
Contact person: Cyrus Daboo
|
||
|
||
email: cyrus@daboo.name
|
||
|
||
6.2.4. /<section-part>/comment
|
||
|
||
To: iana@iana.org
|
||
Subject: IMAP Annotate Registration
|
||
|
||
Please register the following IMAP Annotate item:
|
||
|
||
[X] Entry [] Attribute
|
||
|
||
Name: /<section-part>/comment
|
||
|
||
Description: Defined in IMAP ANNOTATE extension document.
|
||
|
||
Content-Type: text/plain; charset=utf-8
|
||
|
||
Contact person: Cyrus Daboo
|
||
|
||
email: cyrus@daboo.name
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 25]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
6.2.5. /<section-part>/flags/seen
|
||
|
||
To: iana@iana.org
|
||
Subject: IMAP Annotate Registration
|
||
|
||
Please register the following IMAP Annotate item:
|
||
|
||
[X] Entry [] Attribute
|
||
|
||
Name: /<section-part>/flags/seen
|
||
|
||
Description: Defined in IMAP ANNOTATE extension document.
|
||
|
||
Content-Type: text/plain; charset=utf-8
|
||
|
||
Contact person: Cyrus Daboo
|
||
|
||
email: cyrus@daboo.name
|
||
|
||
6.2.6. /<section-part>/flags/answered
|
||
|
||
To: iana@iana.org
|
||
Subject: IMAP Annotate Registration
|
||
|
||
Please register the following IMAP Annotate item:
|
||
|
||
[X] Entry [] Attribute
|
||
|
||
Name: /<section-part>/flags/answered
|
||
|
||
Description: Defined in IMAP ANNOTATE extension document.
|
||
|
||
Content-Type: text/plain; charset=utf-8
|
||
|
||
Contact person: Cyrus Daboo
|
||
|
||
email: cyrus@daboo.name
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 26]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
6.2.7. /<section-part>/flags/flagged
|
||
|
||
To: iana@iana.org
|
||
Subject: IMAP Annotate Registration
|
||
|
||
Please register the following IMAP Annotate item:
|
||
|
||
[X] Entry [] Attribute
|
||
|
||
Name: /<section-part>/flags/flagged
|
||
|
||
Description: Defined in IMAP ANNOTATE extension document.
|
||
|
||
Content-Type: text/plain; charset=utf-8
|
||
|
||
Contact person: Cyrus Daboo
|
||
|
||
email: cyrus@daboo.name
|
||
|
||
6.2.8. /<section-part>/flags/forwarded
|
||
|
||
To: iana@iana.org
|
||
Subject: IMAP Annotate Registration
|
||
|
||
Please register the following IMAP Annotate item:
|
||
|
||
[X] Entry [] Attribute
|
||
|
||
Name: /<section-part>/flags/forwarded
|
||
|
||
Description: Defined in IMAP ANNOTATE extension document.
|
||
|
||
Content-Type: text/plain; charset=utf-8
|
||
|
||
Contact person: Cyrus Daboo
|
||
|
||
email: cyrus@daboo.name
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 27]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
6.3. Attribute Registrations
|
||
|
||
The following templates specify the IANA registrations of annotation
|
||
attributes specified in this document.
|
||
|
||
6.3.1. value
|
||
|
||
To: iana@iana.org
|
||
Subject: IMAP Annotate Registration
|
||
|
||
Please register the following IMAP Annotate item:
|
||
|
||
[] Entry [X] Attribute
|
||
|
||
Name: value
|
||
|
||
Description: Defined in IMAP ANNOTATE extension document.
|
||
|
||
Contact person: Cyrus Daboo
|
||
|
||
email: cyrus@daboo.name
|
||
|
||
6.3.2. size
|
||
|
||
To: iana@iana.org
|
||
Subject: IMAP Annotate Registration
|
||
|
||
Please register the following IMAP Annotate item:
|
||
|
||
[] Entry [X] Attribute
|
||
|
||
Name: size
|
||
|
||
Description: Defined in IMAP ANNOTATE extension document.
|
||
|
||
Contact person: Cyrus Daboo
|
||
|
||
email: cyrus@daboo.name
|
||
|
||
6.4. Capability Registration
|
||
|
||
This document registers "ANNOTATE-EXPERIMENT-1" as an IMAPEXT
|
||
capability.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 28]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
7. Internationalization Considerations
|
||
|
||
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 carried out, as would be
|
||
done for other textual fields being searched or sorted on.
|
||
|
||
8. Security Considerations
|
||
|
||
Annotations whose values are intended to remain private MUST be
|
||
stored in ".priv" values instead of ".shared" values, which may be
|
||
accessible to other users.
|
||
|
||
Excluding the above issues, the ANNOTATE extension does not raise any
|
||
security considerations that are not present in the base IMAP
|
||
protocol; these issues are discussed in [RFC3501].
|
||
|
||
9. References
|
||
|
||
9.1. Normative References
|
||
|
||
[RFC2086] Myers, J., "IMAP4 ACL extension", RFC 2086, January 1997.
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||
|
||
[RFC2244] Newman, C. and J. Myers, "ACAP -- Application
|
||
Configuration Access Protocol", RFC 2244, November 1997.
|
||
|
||
[RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION
|
||
4rev1", RFC 3501, March 2003.
|
||
|
||
[RFC3502] Crispin, M., "Internet Message Access Protocol (IMAP) -
|
||
MULTIAPPEND Extension", RFC 3502, March 2003.
|
||
|
||
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
|
||
10646", STD 63, RFC 3629, November 2003.
|
||
|
||
[RFC4314] Melnikov, A., "IMAP4 Access Control List (ACL) Extension",
|
||
RFC 4314, December 2005.
|
||
|
||
[RFC4466] Melnikov, A. and C. Daboo, "Collected Extensions to IMAP4
|
||
ABNF", RFC 4466, April 2006.
|
||
|
||
[RFC5234] Crocker, D., Ed., and P. Overell, "Augmented BNF for
|
||
Syntax Specifications: ABNF", STD 68, RFC 5234, January
|
||
2008.
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 29]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
[RFC5256] Crispin, M. and K. Murchison, "Internet Message Access
|
||
Protocol - SORT and THREAD Extensions", RFC 5256, June
|
||
2008.
|
||
|
||
9.2. Informative References
|
||
|
||
[RFC4551] Melnikov, A. and S. Hole, "IMAP Extension for Conditional
|
||
STORE Operation or Quick Flag Changes Resynchronization",
|
||
RFC 4551, June 2006.
|
||
|
||
10. 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
|
||
|
||
Cyrus Daboo
|
||
Apple Inc.
|
||
1 Infinite Loop
|
||
Cupertino, CA 95014
|
||
USA
|
||
|
||
EMail: cyrus@daboo.name
|
||
URI: http://www.apple.com/
|
||
|
||
|
||
Randall Gellens
|
||
QUALCOMM Incorporated
|
||
5775 Morehouse Dr.
|
||
San Diego, CA 92121-2779
|
||
USA
|
||
|
||
EMail: randy@qualcomm.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 30]
|
||
|
||
RFC 5257 IMAP ANNOTATE Extension June 2008
|
||
|
||
|
||
Full Copyright Statement
|
||
|
||
Copyright (C) The IETF Trust (2008).
|
||
|
||
This document is subject to the rights, licenses and restrictions
|
||
contained in BCP 78, and except as set forth therein, the authors
|
||
retain all their rights.
|
||
|
||
This document and the information contained herein are provided on an
|
||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
|
||
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
|
||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
|
||
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
Intellectual Property
|
||
|
||
The IETF takes no position regarding the validity or scope of any
|
||
Intellectual Property Rights or other rights that might be claimed to
|
||
pertain to the implementation or use of the technology described in
|
||
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
|
||
made any independent effort to identify any such rights. Information
|
||
on the procedures with respect to rights in RFC documents can be
|
||
found in BCP 78 and BCP 79.
|
||
|
||
Copies of IPR disclosures made to the IETF Secretariat and any
|
||
assurances of licenses to be made available, or the result of an
|
||
attempt made to obtain a general license or permission for the use of
|
||
such proprietary rights by implementers or users of this
|
||
specification can be obtained from the IETF on-line IPR repository at
|
||
http://www.ietf.org/ipr.
|
||
|
||
The IETF invites any interested party to bring to its attention any
|
||
copyrights, patents or patent applications, or other proprietary
|
||
rights that may cover technology that may be required to implement
|
||
this standard. Please address the information to the IETF at
|
||
ietf-ipr@ietf.org.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Gellens Experimental [Page 31]
|
||
|