| < draft-ietf-imapext-annotate-06.txt | draft-ietf-imapext-annotate-07.txt > | |||
|---|---|---|---|---|
| IMAP Extensions Working Group R. Gellens | IMAP Extensions Working Group R. Gellens | |||
| Internet Draft: IMAP ANNOTATE Extension C. Daboo | Internet Draft: IMAP ANNOTATE Extension C. Daboo | |||
| Document: draft-ietf-imapext-annotate-06.txt March 2003 | Document: draft-ietf-imapext-annotate-07.txt May 2003 | |||
| IMAP ANNOTATE Extension | IMAP ANNOTATE Extension | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with | |||
| all provisions of Section 10 of RFC2026. | all provisions of Section 10 of RFC2026. | |||
| 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 | |||
| skipping to change at page 2, line 9 ¶ | skipping to change at page 2, line 9 ¶ | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society 2003. All Rights Reserved. | Copyright (C) The Internet Society 2003. All Rights Reserved. | |||
| Table of Contents | Table of Contents | |||
| 1 Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1 Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 2 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 3 Conventions Used in This Document . . . . . . . . . . . . . . 2 | 3 Conventions Used in This Document . . . . . . . . . . . . . . 2 | |||
| 4 Open Issues . . . . . . . . . . . . . . . . . . . . . . . . 3 | 4 Change History . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 5 Change History . . . . . . . . . . . . . . . . . . . . . . . 3 | 5 Introduction and Overview . . . . . . . . . . . . . . . . . . 4 | |||
| 6 Introduction and Overview . . . . . . . . . . . . . . . . . 4 | 6 Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 7 Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 6.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 7.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . 5 | 6.2 Namespace of Entries and Attributes . . . . . . . . . . 6 | |||
| 7.2 Namespace of Entries and Attributes . . . . . . . . . . . 6 | 6.2.1 Entry Names . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 7.2.1 Entry Names . . . . . . . . . . . . . . . . . . . . 6 | 6.2.2 Attribute Names . . . . . . . . . . . . . . . . . . 8 | |||
| 7.2.2 Attribute Names . . . . . . . . . . . . . . . . . . . 8 | 7 Private versus Shared and Access Control . . . . . . . . . . 9 | |||
| 8 Private versus Shared and Access Control . . . . . . . . . . 9 | 8 IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . 10 | |||
| 9 IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . . 10 | 8.1 General considerations . . . . . . . . . . . . . . . . . 10 | |||
| 9.1 Optional parameters with the SELECT/EXAMINE commands . . 10 | 8.2 Optional parameters with the SELECT/EXAMINE commands . . 10 | |||
| 9.2 ANNOTATION Message Data Item in FETCH Command . . . . . . 11 | 8.3 ANNOTATION Message Data Item in FETCH Command . . . . . . 11 | |||
| 9.3 ANNOTATION Message Data Item in FETCH Response . . . . . 12 | 8.4 ANNOTATION Message Data Item in FETCH Response . . . . . 13 | |||
| 9.4 ANNOTATION Message Data Item in STORE . . . . . . . . . . 13 | 8.5 ANNOTATION Message Data Item in STORE . . . . . . . . . . 14 | |||
| 9.5 ANNOTATION interaction with COPY . . . . . . . . . . . . 15 | 8.6 ANNOTATION interaction with COPY . . . . . . . . . . . . 15 | |||
| 9.6 ANNOTATION Message Data Item in APPEND . . . . . . . . . 15 | 8.7 ANNOTATION Message Data Item in APPEND . . . . . . . . . 16 | |||
| 9.7 ANNOTATION Criterion in SEARCH . . . . . . . . . . . . . 15 | 8.8 ANNOTATION Criterion in SEARCH . . . . . . . . . . . . . 16 | |||
| 9.8 ANNOTATION Key in SORT . . . . . . . . . . . . . . . . . 16 | 8.9 ANNOTATION Key in SORT . . . . . . . . . . . . . . . . . 17 | |||
| 10 Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . 16 | 9 Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 11 IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 | 10 IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 11.1 Entry and Attribute Registration Template . . . . . . . 18 | 10.1 Entry and Attribute Registration Template . . . . . . . 19 | |||
| 12 Security Considerations . . . . . . . . . . . . . . . . . . . 18 | 11 Security Considerations . . . . . . . . . . . . . . . . . . . 20 | |||
| 13 Normative References . . . . . . . . . . . . . . . . . . . . 19 | 12 Normative References . . . . . . . . . . . . . . . . . . . . 20 | |||
| 14 Informative References . . . . . . . . . . . . . . . . . . . 19 | 13 Informative References . . . . . . . . . . . . . . . . . . . 21 | |||
| 15 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 19 | 14 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 16 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 19 | 15 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 17 Full Copyright Statement . . . . . . . . . . . . . . . . . . 20 | 16 Full Copyright Statement . . . . . . . . . . . . . . . . . . 21 | |||
| 1 Abstract | 1 Abstract | |||
| The ANNOTATE extension to the Internet Message Access Protocol | The ANNOTATE extension to the Internet Message Access Protocol | |||
| [IMAP4] permits clients and servers to maintain "metadata" for | [IMAP4] permits clients and servers to maintain "metadata" for | |||
| messages stored in an IMAP4 mailbox. | messages stored in an IMAP4 mailbox. | |||
| 2 Discussion | 2 Discussion | |||
| Public comments can be sent to the IETF IMAP Extensions mailing | Public comments can be sent to the IETF IMAP Extensions mailing | |||
| skipping to change at page 3, line 11 ¶ | skipping to change at page 3, line 11 ¶ | |||
| 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 RFC 2119 [KEYWORDS]. | document are to be interpreted as described in RFC 2119 [KEYWORDS]. | |||
| Formal syntax is defined using ABNF [ABNF] as modified by [IMAP4]. | Formal syntax is defined using ABNF [ABNF] as modified by [IMAP4]. | |||
| 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. Line breaks not preceded by a "C:" or "S:" are | server respectively. Line breaks not preceded by a "C:" or "S:" are | |||
| for editorial clarity only. | for editorial clarity only. | |||
| 4 Open Issues | 4 Change History | |||
| 1. Use of utf8 for entry/attributes and values? | ||||
| 5 Change History | Changes from -06 to -07: | |||
| 1. Added text to state entry and attribute names are always | ||||
| case-insensitive. | ||||
| 2. Removed top-level entry namespace. | ||||
| 3. Added server accept minima for annotation size and count. | ||||
| 4. Added [ANNOTATE TOOBIG] & [ANNOTATE TOOMANY] response codes. | ||||
| 5. Added [ANNOTATESIZE <<n>>] response code. | ||||
| 6. Added comment on suggested CONDSTORE support. | ||||
| 7. Modified append behaviour to account for MULTIAPPEND. | ||||
| 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. | |||
| 2. Reworked flags to allow IMAP4 flag prefix to appear in annotation name. | 2. Reworked flags to allow IMAP4 flag prefix to appear in annotation name. | |||
| 3. Removed smtp-envelope annotation - a future extension can add this. | 3. Removed smtp-envelope annotation - a future extension can add this. | |||
| 4. Changed subject to altsubject. | 4. Changed subject to altsubject. | |||
| 5. Added $MDNSent flag and reference to document. | 5. Added $MDNSent flag and reference to document. | |||
| 6. Cleaned up formal syntax to use IMAP string type for entry | 6. Cleaned up formal syntax to use IMAP string type for entry | |||
| and attributes, with requirements on how the string is formatted. | and attributes, with requirements on how the string is formatted. | |||
| 7. Use of ACAP vendor subtree registry for vendor tokens. | 7. Use of ACAP vendor subtree registry for vendor tokens. | |||
| skipping to change at page 4, line 43 ¶ | skipping to change at page 4, line 50 ¶ | |||
| 11. Open issue: Conditional annotation STORE. | 11. Open issue: Conditional annotation STORE. | |||
| 12. ANNOTATION criterion available if both "ANNOTATE" and "SORT" | 12. ANNOTATION criterion available if both "ANNOTATE" and "SORT" | |||
| in CAPABILITY command response. | in 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. | |||
| 6 Introduction and Overview | 5 Introduction and Overview | |||
| The ANNOTATE extension is present in any IMAP4 implementation which | The ANNOTATE extension is present in any IMAP4 implementation which | |||
| returns "ANNOTATE" as one of the supported capabilities in the | returns "ANNOTATE" as one of the supported capabilities in the | |||
| CAPABILITY response. | CAPABILITY response. | |||
| The ANNOTATE extension adds a new message data item to the FETCH and | The ANNOTATE extension adds a new message data item to the FETCH and | |||
| STORE commands, as well as adding SEARCH and SORT keys and an APPEND | STORE commands, as well as adding SEARCH and SORT keys and an APPEND | |||
| modifier. | modifier. | |||
| This extension makes the following changes to the IMAP4 protocol: | This extension makes the following changes to the IMAP4 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 | |||
| b) adds a new ANNOTATION message data item for use in STORE | b) adds a new ANNOTATION message data item for use in STORE | |||
| c) adds a new ANNOTATION search criterion for use in SEARCH | c) adds a new ANNOTATION search criterion for use in SEARCH | |||
| 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 extension mechanism for adding parameters to the | g) adds a extension mechanism for adding parameters to the | |||
| SELECT/EXAMINE commands and defines the ANNOTATE parameter | SELECT/EXAMINE commands and defines the ANNOTATE parameter | |||
| h) adds two new response codes to indicate store failures of | ||||
| annotations. | ||||
| i) adds a new untagged response codes for the SELECT or EXAMINE | ||||
| commands to indicate the maximum size. | ||||
| 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 [ACAP]. Note that | of the Application Configuration Access Protocol [ACAP]. Note that | |||
| there is no inheritance in annotations. | there is no inheritance in annotations. | |||
| Clients MUST NOT use annotations in lieu of equivalent IMAP base | Clients MUST NOT use annotations in lieu of equivalent IMAP base | |||
| specification facilities. For example, use of a "seen" flag in the | specification facilities. For example, use of a "seen" flag in the | |||
| vendor namespace together with ".PEEK" in fetches. Such behaviour | vendor namespace together with ".PEEK" in fetches. Such behaviour | |||
| would significantly reduce IMAP interoperability. | would significantly reduce IMAP interoperability. | |||
| skipping to change at page 5, line 36 ¶ | skipping to change at page 5, line 46 ¶ | |||
| flags as defined in the IMAP base specification. The exception to | flags as defined in the IMAP base specification. The exception to | |||
| this is IMAP flags (which are accessible directly through | this is IMAP flags (which are accessible directly through | |||
| annotations) which may be 'session only' as determined by the FLAGS | annotations) which may be 'session only' as determined by the FLAGS | |||
| and PERMANENTFLAGS responses to a SELECT or EXAMINE command. | and PERMANENTFLAGS responses to a SELECT or EXAMINE command. | |||
| This extension also introduces a generalised mechanism for adding | This extension also introduces a generalised mechanism for adding | |||
| parameters to the SELECT or EXAMINE commands. It is anticipated | parameters to the SELECT or EXAMINE commands. It is anticipated | |||
| that other extensions may want to utilise this, so it is not | that other extensions may want to utilise this, so it is not | |||
| strictly dependent on the ANNOTATE extension being present. | strictly dependent on the ANNOTATE extension being present. | |||
| In order to provide optimum support for a disconnected client (one | ||||
| that needs to synchronise annotations for use when offline), servers | ||||
| SHOULD also support the Conditional STORE [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. | |||
| 7 Data Model | 6 Data Model | |||
| 6.1 Overview | ||||
| 7.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 added to a message has an entry name of | For example, a comment added to a message has an entry name of | |||
| "/message/comment". This entry is composed of several attributes | "/comment". This entry is composed of several attributes such as | |||
| such as "value", "size", etc. which contain the properties and data | "value", "size", etc. which contain the properties and data of the | |||
| of the entry. | entry. | |||
| The protocol changes to IMAP described below allow a client to | The protocol changes to IMAP described below allow a client to | |||
| access or change the values of any attributes in any entries in a | access or change the values of any attributes in any entries in a | |||
| message annotation, assuming it has sufficient access rights to do | message annotation, assuming it has sufficient access rights to do | |||
| so (see Section 8 for specifics). | so (see Section 7 for specifics). | |||
| 7.2 Namespace of Entries and Attributes | 6.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 in UTF-8, with each component of the name | has a hierarchical name in UTF-8, with each component of the name | |||
| separated by a slash ("/"). | separated by a slash ("/"). | |||
| 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 in UTF-8, with each component of the name | hierarchical name in UTF-8, with each component of the name | |||
| separated by a period ("."). | separated by a period ("."). | |||
| 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 be valid UTF-8 strings which do not | ("%") characters and MUST be valid UTF-8 strings which do not | |||
| contain the NULL octet. Invalid entry or attribute names result in | contain the NULL octet. Invalid entry or attribute names result in | |||
| a BAD response in any IMAP commands where they are used. | a BAD response in any IMAP commands where they are used. | |||
| Entry and attribute names are case-insensitive. | ||||
| Use of non-visible UTF-8 characters in entry and attribute names is | Use of non-visible UTF-8 characters in entry and attribute names is | |||
| strongly discouraged. | 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 for extensibility. | added for extensibility. | |||
| 7.2.1 Entry Names | 6.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 Section | |||
| 11.1 for the registration template. | 10.1 for the registration template. | |||
| /message | / | |||
| 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. | 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. | ||||
| /message/comment | /comment | |||
| Defines a comment or note associated with an entire message. | Defines a comment or note associated with an entire message. | |||
| /message/flags | /flags | |||
| Defines the top-level of entries for flags associated with an | Defines the top-level of entries for flags associated with an | |||
| entire message. The "value" attribute of each of the entries | entire message. The "value" attribute of each of the entries | |||
| described below must be either "1", "0" or NIL. "1" corresponds | described below must be either "1", "0" or NIL. "1" corresponds | |||
| to the flag being set. | to the flag being set. | |||
| Standard [IMAP4] flags always have a '\' prefix character. | Standard [IMAP4] flags always have a '\' prefix character. | |||
| Other standard flags have a '$' prefix. The annotation names | Other standard flags have a '$' prefix. The annotation names | |||
| used for all flags uses the complete name for that flag, | used for all flags uses the complete name for that flag, | |||
| including the prefix character. | including the prefix character. | |||
| The set of standard IMAP flags annotations are: | The set of standard IMAP flags annotations are: | |||
| /message/flags/\answered | /flags/\answered | |||
| /message/flags/\flagged | /flags/\flagged | |||
| /message/flags/\deleted | /flags/\deleted | |||
| /message/flags/\seen | /flags/\seen | |||
| /message/flags/\draft | /flags/\draft | |||
| /message/flags/\recent | /flags/\recent | |||
| Changes to these annotations are reflected in the standard IMAP | Changes to these annotations are reflected in the standard IMAP | |||
| flags. The \recent attribute is read only, clients MUST NOT | flags. The \recent attribute is read only, clients MUST NOT | |||
| attempt to change it. | attempt to change it. | |||
| Note that entry names are sent as [IMAP4] string elements which | Note that entry names are sent as [IMAP4] string elements which | |||
| requires that '\' characters be escaped in the string. | requires that '\' characters be escaped if sent as a quoted | |||
| string as opposed to a literal. | ||||
| Additional standard flags are: | Additional standard flags are: | |||
| /message/flags/$mdnsent | /flags/$mdnsent | |||
| /message/flags/$redirected | /flags/$redirected | |||
| /message/flags/$forwarded | /flags/$forwarded | |||
| The '$mdnsent' flag is used to indicate message disposition | The '$mdnsent' flag is used to indicate message disposition | |||
| notification processing state [MDNSENT]. | notification processing state [MDNSENT]. | |||
| The '$redirected' flag indicates that a message has been handed | The '$redirected' flag indicates that a message has been handed | |||
| off to someone else, by resending the message with minimal | off to someone else, by resending the message with minimal | |||
| alterations, and in such a way that a reply by the new recipient | alterations, and in such a way that a reply by the new recipient | |||
| is addressed to the original author, not the user who performed | is addressed to the original author, not the user who performed | |||
| the redirection. | the redirection. | |||
| The '$forwarded' flag indicates the message was resent to | The '$forwarded' flag indicates the message was resent to | |||
| another user, embedded within or attached to a new message. | another user, embedded within or attached to a new message. | |||
| /message/altsubject | /altsubject | |||
| Contains text supplied by the message recipient, to be used by | Contains text supplied by the message recipient, to be used by | |||
| the client instead of the original message Subject. | the client instead of the original message Subject. | |||
| /message/vendor/<vendor-token> | /vendor/<vendor-token> | |||
| Defines the top-level of entries associated with an entire | Defines the top-level of entries associated with an entire | |||
| message as created by a particular product of some vendor. | message as created by a particular product of some vendor. | |||
| These sub-entries can be used by vendors to provide | These sub-entries can be used by vendors to provide | |||
| client-specific attributes. The vendor-token MUST be registered | client-specific attributes. The vendor-token MUST be registered | |||
| with IANA, using the [ACAP] vendor subtree registry. | with IANA, using the [ACAP] vendor subtree registry. | |||
| /body/<part-specifier> | /<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 part-specifier uses the same part specifier | attributes. The section-part uses the same numeric part | |||
| syntax as the BODY message data item in the FETCH command | specifier syntax as the BODY message data item in the FETCH | |||
| command [IMAP4]. The server MUST return a BAD response if the | ||||
| [IMAP4]. The server MUST return a BAD response if the client | client uses an incorrect part specifier (either incorrect syntax | |||
| uses an incorrect part specifier (either incorrect syntax or a | or a specifier referring to a non-existent part). The server | |||
| specifier referring to a non-existent part). The server MUST | MUST return a BAD response if the client uses an empty part | |||
| return a BAD response if the client uses an empty part specifier | specifier (which is used in [IMAP4] to represent the entire | |||
| (which is used in [IMAP4] to represent the entire message). | message). | |||
| /body/<part-specifier>/comment | /<section-part>/comment | |||
| Defines a comment or note associated with a specific body part | Defines a comment or note associated with a specific body part | |||
| of a message. | of a message. | |||
| /body/<part-specifier>/flags | /<section-part>/flags | |||
| Defines the top-level of entries associated with flag state for | Defines the top-level of entries associated with flag state for | |||
| a specific body part of a message. All sub-entries are | a specific body part of a message. All sub-entries are | |||
| maintained entirely by the client. There is no implicit change | maintained entirely by the client. There is no implicit change | |||
| to any flag by the server. | to any flag by the server. | |||
| /body/<part-specifier>/flags/seen | /<section-part>/flags/seen | |||
| /body/<part-specifier>/flags/answered | /<section-part>/flags/answered | |||
| /body/<part-specifier>/flags/flagged | /<section-part>/flags/flagged | |||
| /body/<part-specifier>/flags/forwarded | /<section-part>/flags/forwarded | |||
| Defines flags for a specific body part of a message. The | Defines flags for a specific body part of a message. The | |||
| "value" attribute of these entries must be either "1", "0" or | "value" attribute of these entries must be either "1", "0" or | |||
| NIL. | NIL. | |||
| /body/<part-specifier>/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 attributes. The vendor-token MUST be registered with | |||
| IANA. | IANA. | |||
| 7.2.2 Attribute Names | 6.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, or fall under the vendor namespace. See | |||
| Section 11.1 for the registration template. | Section 10.1 for the registration 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 | which maps to private and shared versions of the entry. Searching | |||
| or fetching without using either suffix includes both. The client | or fetching without using either suffix includes both. The client | |||
| MUST specify either a ".priv" or ".shared" suffix when storing an | MUST specify either a ".priv" or ".shared" suffix when storing an | |||
| annotation. | annotation. | |||
| value | value | |||
| A UTF8 string representing the data value of the attribute. To | A UTF8 string representing the data value of the attribute. To | |||
| delete an annotation, the client can store NIL into the value. | delete an annotation, the client can store NIL into the value. | |||
| skipping to change at page 9, line 16 ¶ | skipping to change at page 9, line 36 ¶ | |||
| A MIME [MIME] content type and subtype that describes the nature | A MIME [MIME] content type and subtype that describes the nature | |||
| of the content of the "value" attribute. If not present, a | of the content of the "value" attribute. If not present, a | |||
| value of "text/plain; charset=utf8" is assumed. | value of "text/plain; charset=utf8" is assumed. | |||
| vendor.<vendor-token> | vendor.<vendor-token> | |||
| Defines an attribute associated with a particular product of | Defines an attribute associated with a particular product of | |||
| some vendor. This attribute can be used by vendors to provide | some vendor. This attribute can be used by vendors to provide | |||
| client specific attributes. The vendor-token MUST be registered | client specific attributes. The vendor-token MUST be registered | |||
| with IANA, using the [ACAP] vendor subtree registry. | with IANA, using the [ACAP] vendor subtree registry. | |||
| 8 Private versus Shared and Access Control | 7 Private versus Shared and Access Control | |||
| 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 | |||
| [ACL-EXT] which permits access by other users, or because it is a | [ACL] which permits access by other users, or because it is a shared | |||
| shared mailbox. | 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 | shared IMAP folder containing bug reports. Engineers may want to | |||
| use annotations to add information to existing messages, indicate | use 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 10, line 10 ¶ | skipping to change at page 10, line 30 ¶ | |||
| .shared suffixes. | .shared suffixes. | |||
| A user can only store and fetch private annotations on messages in | A user can only store and fetch private annotations on messages in | |||
| any mailbox which they can SELECT or EXAMINE, including ones which | any mailbox which they can SELECT or EXAMINE, including ones which | |||
| only open READ-ONLY. A user can only store and fetch shared | only open READ-ONLY. A user can only store and fetch shared | |||
| annotations on messages in any mailbox that they can SELECT and | annotations on messages in any mailbox that they can SELECT and | |||
| which opens READ-WRITE. If a client attempts to store or fetch a | which opens READ-WRITE. If a client attempts to store or fetch a | |||
| shared annotation on a READ-ONLY mailbox, the server MUST respond | shared annotation on a READ-ONLY mailbox, the server MUST respond | |||
| with a NO response. | with a NO response. | |||
| 9 IMAP Protocol Changes | 8 IMAP Protocol Changes | |||
| 9.1 Optional parameters with the SELECT/EXAMINE commands | 8.1 General considerations | |||
| The server is allowed to impose limitations on the size of any one | ||||
| annotation or the total number of annotations for a single message. | ||||
| However, the server MUST accept a minimum annotation data size of at | ||||
| least 1024 bytes, and a minimum annotation count per message of at | ||||
| least 10. | ||||
| The server SHOULD indicate the maximum size for an annotation value | ||||
| by sending an untagged "ANNOTATESIZE" response during a SELECT or | ||||
| EXAMINE command. Clients MUST NOT store 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 | ||||
| mailboxes and not others. For mailboxes that cannot have | ||||
| 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 | ||||
| fetch or store annotations on any messages in a mailbox for which | ||||
| the "ANNOTATESIZE" response was zero. | ||||
| 8.2 Optional parameters with the SELECT/EXAMINE commands | ||||
| This extension adds the ability to include one or more parameters | This extension adds the ability to include one or more parameters | |||
| with the IMAP SELECT or EXAMINE commands, to turn on or off certain | with the IMAP SELECT or EXAMINE commands, to turn on or off certain | |||
| standard behaviour, or to add new optional behaviours required for a | standard behaviour, or to add new optional behaviours required for a | |||
| particular extension. It is anticipated that other extensions may | particular extension. It is anticipated that other extensions may | |||
| want to use this facility, so a generalised approach is given here. | want to use this facility, so a generalised approach is given here. | |||
| This facility is not dependent on the presence of the ANNOTATE | This facility is not dependent on the presence of the ANNOTATE | |||
| extension - other extensions can use it with a server that does not | extension - other extensions can use it with a server that does not | |||
| implement ANNOTATE. | implement ANNOTATE. | |||
| skipping to change at page 11, line 7 ¶ | skipping to change at page 11, line 50 ¶ | |||
| items: an atom followed by a quoted string. | items: an atom followed by a quoted string. | |||
| C: a SELECT INBOX (BLURDYBLOOP) | C: a SELECT INBOX (BLURDYBLOOP) | |||
| S: a NO Unknown parameter in SELECT command | S: a NO Unknown parameter in SELECT command | |||
| In the above example, a parameter not supported by the | In the above example, a parameter not supported by the | |||
| server is incorrectly used. | server is incorrectly used. | |||
| The ANNOTATE extension defines a single optional select parameter | The ANNOTATE extension defines a single optional select parameter | |||
| "ANNOTATE", which is used to turn on unsolicited responses for | "ANNOTATE", which is used to turn on unsolicited responses for | |||
| annotations as described in Section 9.3. | annotations as described in Section 8.4. | |||
| 9.2 ANNOTATION Message Data Item in FETCH Command | 8.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 ("/message/comment" "value")) | C: a FETCH 1 (ANNOTATION ("/comment" "value")) | |||
| S: * 1 FETCH (ANNOTATION ("/message/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 | In the above example, the content of the "value" attribute | |||
| for the "/message/comment" entry is requested by the client | for the "/comment" entry is requested by the client and | |||
| and returned by the server. Since neither ".shared" nor | returned by the server. Since neither ".shared" nor ".priv" | |||
| ".priv" was specified, both are returned. | was specified, both are returned. | |||
| "*" and "%" wildcard characters can be used in either specifier to | "*" and "%" wildcard characters can be used in either specifier 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 for the specifier it | |||
| appears in (that is, "/" for an entry specifier or "." for an | appears in (that is, "/" for an entry specifier or "." for an | |||
| attribute specifier). Thus an entry specifier of "/message/%" | attribute specifier). Thus an entry specifier of "/%" matches | |||
| matches entries such as "/message/comment" and "/message/subject", | entries such as "/comment" and "/subject", but not | |||
| but not "/message/flags/$redirected". | "/flags/$redirected". | |||
| Examples: | Examples: | |||
| C: a FETCH 1 (ANNOTATION ("/message/*" ("value.priv" | C: a FETCH 1 (ANNOTATION ("/*" ("value.priv" "size.priv"))) | |||
| "size.priv"))) | ||||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| ("/message/comment" ("value.priv" "My comment" | ("/comment" ("value.priv" "My comment" | |||
| "size.priv" "10") | "size.priv" "10") | |||
| "/message/subject" ("value.priv" "Rhinoceroses!" | "/subject" ("value.priv" "Rhinoceroses!" | |||
| "size.priv" "13") | "size.priv" "13") | |||
| "/message/vendor/foobar/label.priv" | "/vendor/foobar/label.priv" | |||
| ("value.priv" "label43" | ("value.priv" "label43" | |||
| "size.priv" "7") | "size.priv" "7") | |||
| "/message/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 "size" | In the above example, the contents of the private "value" and "size" | |||
| attributes for any entries in the "/message" hierarchy are requested | attributes for any entries in the "" hierarchy are requested by the | |||
| by the client and returned by the server. | client and returned by the server. | |||
| C: a FETCH 1 (ANNOTATION ("/message/%" "value.shared")) | C: a FETCH 1 (ANNOTATION ("/%" "value.shared")) | |||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| ("/message/comment" ("value.shared" "Patch Mangler") | ("/comment" ("value.shared" "Patch Mangler") | |||
| "/message/subject" ("value.shared" "Patches? We don't | "/subject" ("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 | attributes for entries at the top level only of the "" | |||
| "/message" hierarchy are requested by the client and | hierarchy are requested by the client and returned by the | |||
| returned by the server. | 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. | |||
| Examples: | Examples: | |||
| C: a FETCH 1 (ANNOTATION | C: a FETCH 1 (ANNOTATION | |||
| (("/message/comment" "/message/subject") "value.priv")) | (("/comment" "/subject") "value.priv")) | |||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| ("/message/comment" ("value.priv" "What a chowder-head") | ("/comment" ("value.priv" "What a chowder-head") | |||
| "/message/subject" ("value.priv" "How to crush beer cans"))) | "/subject" ("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" attributes | In the above example, the contents of the private "value" attributes | |||
| for the two entries "/message/comment" and "/message/subject" are | for the two entries "/comment" and "/subject" are requested by the | |||
| requested by the client and returned by the server. | client and returned by the server. | |||
| 9.3 ANNOTATION Message Data Item in FETCH Response | 8.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. | |||
| Examples: | Examples: | |||
| C: a FETCH 1 (ANNOTATION ("/message/comment" "value")) | C: a FETCH 1 (ANNOTATION ("/comment" "value")) | |||
| S: * 1 FETCH (ANNOTATION ("/message/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 a | pair is returned by the server. Since the client did not specify a | |||
| ".shared" or ".priv" suffix, both are returned. Only the private | ".shared" or ".priv" suffix, both are returned. Only the private | |||
| attribute has a value (the shared value is NIL). | attribute has a value (the shared value is NIL). | |||
| C: a FETCH 1 (ANNOTATION | C: a FETCH 1 (ANNOTATION | |||
| (("/message/comment" "/message/subject") "value")) | (("/comment" "/subject") "value")) | |||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| ("/message/comment" ("value.priv" "My comment" | ("/comment" ("value.priv" "My comment" | |||
| "value.shared" NIL) | "value.shared" NIL) | |||
| "/message/subject" ("value.priv" "My subject" | "/subject" ("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 attribute-value | 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 | pair are returned by the server. Since the client did not specify a | |||
| ".shared" or ".priv" suffix, both are returned. Only the private | ".shared" or ".priv" suffix, both are returned. Only the private | |||
| attributes have values; the shared attributes are NIL. | attributes have values; the shared attributes are NIL. | |||
| C: a FETCH 1 (ANNOTATION | C: a FETCH 1 (ANNOTATION | |||
| ("/message/comment" ("value" "size"))) | ("/comment" ("value" "size"))) | |||
| S: * 1 FETCH (ANNOTATION | S: * 1 FETCH (ANNOTATION | |||
| ("/message/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 pairs | In the above example, a single entry with two attribute-value pairs | |||
| is returned by the server. Since the client did not specify a | is returned by the server. Since the client did not specify a | |||
| ".shared" or ".priv" suffix, both are returned. Only the private | ".shared" or ".priv" suffix, both are returned. Only the private | |||
| attributes have values; the shared attributes are NIL. | attributes have values; the shared attributes are NIL. | |||
| skipping to change at page 13, line 47 ¶ | skipping to change at page 14, line 35 ¶ | |||
| unless the client used the ANNOTATE select parameter when it issued | unless the client used the ANNOTATE select parameter when it issued | |||
| the last SELECT or EXAMINE command. This restriction avoids sending | the last SELECT or EXAMINE command. This restriction avoids sending | |||
| ANNOTATION data to a client unless the client explicitly asks for | ANNOTATION data to a client unless the client explicitly asks for | |||
| it. | it. | |||
| 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 | |||
| keep clients updated with changes to annotations by other clients. | keep clients updated with changes to annotations by other clients. | |||
| 9.4 ANNOTATION Message Data Item in STORE | 8.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 | |||
| assumes that the client updates its own cache if the command | assumes that the client updates its own cache if the command | |||
| succeeds. | succeeds. | |||
| 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. | ||||
| Examples: | Examples: | |||
| C: a STORE 1 ANNOTATION ("/message/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 "/message/comment" is created (if | In the above example, the entry "/comment" is created (if not | |||
| not already present) and the private attribute "value" with data set | already present) and the private attribute "value" with data set to | |||
| to "My new comment" is created if not already present, or replaced | "My new comment" is created if not already present, or replaced if | |||
| if it exists. | it exists. | |||
| C: a STORE 1 ANNOTATION ("/message/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 | |||
| "/message/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 ("/message/comment" | C: a STORE 1 ANNOTATION ("/comment" | |||
| ("value.priv" "Get tix Tuesday") | ("value.priv" "Get tix Tuesday") | |||
| "/message/subject" | "/subject" | |||
| ("value.priv" "Wots On")) | ("value.priv" "Wots On")) | |||
| S: a OK Store complete | S: a OK Store complete | |||
| In the above example, the entries "/message/comment" and | In the above example, the entries "/comment" and "/subject" are | |||
| "/message/subject" are created (if not already present) and the | created (if not already present) and the private attribute "value" | |||
| private attribute "value" is created for each entry if not already | is created for each entry if not already present, or replaced if | |||
| 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 ("/message/comment" | C: a STORE 1 ANNOTATION ("/comment" | |||
| ("value.priv" "My new comment" | ("value.priv" "My new comment" | |||
| "vendor.foobar.priv" "foo's bar")) | "vendor.foobar.priv" "foo's bar")) | |||
| S: a OK Store complete | S: a OK Store complete | |||
| In the above example, the entry "/message/comment" is created (if | In the above example, the entry "/comment" is created (if not | |||
| not already present) and the private attributes "value" and | already present) and the private attributes "value" and | |||
| "vendor.foobar" are created if not already present, or replaced if | "vendor.foobar" are created if not already present, or replaced if | |||
| they exist. | they exist. | |||
| 9.5 ANNOTATION interaction with COPY | 8.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 copy all the annotation data associated with any | extension MUST copy all the annotation data associated with any | |||
| messages being copied via the COPY command. The only exception to | messages being copied via the COPY command. The only exceptions to | |||
| this is if the destination mailbox permissions are such that either | this are if the destination mailbox permissions are such that either | |||
| the '.priv' or '.shared' annotations are not allowed. | the '.priv' or '.shared' annotations are not allowed, or if the | |||
| destination mailbox is of a type that does not support annotations | ||||
| (and returns a zero value for its ANNOTATESIZE response code). | ||||
| 9.6 ANNOTATION Message Data Item in APPEND | 8.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 | Sets the specified list of entries and attributes in the | |||
| resulting message. | resulting message. | |||
| Example: | The APPEND command can include annotations for the message being | |||
| C: a APPEND drafts ANNOTATION ("/message/comment" | appended via the addition of a new append data item. The new data | |||
| item can also be used with the multi-append [MULTIAPPEND] extension | ||||
| that allows multiple messages to be appended via a single APPEND | ||||
| command. | ||||
| Examples: | ||||
| C: a APPEND drafts ANNOTATION ("/comment" | ||||
| ("value.priv" "Don't send until we hear from Sally")) {310} | ("value.priv" "Don't send until we hear from Sally")) {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. | |||
| 9.7 ANNOTATION Criterion in SEARCH | 8.8 ANNOTATION Criterion in SEARCH | |||
| 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. | |||
| ANNOTATION <entry-name> <attribute-name> <value> | ||||
| Messages that have annotations with entries matching <entry-name> | Messages that have annotations with entries matching <entry-name> | |||
| and attributes matching <attribute-name> and the specified string | and attributes matching <attribute-name> and the specified string | |||
| <value> in their values are returned in the SEARCH results. The "*" | <value> 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 or attribute name fields to match | |||
| any content in those items. The "%" character can be used in the | any content in those items. The "%" character can be used in the | |||
| entry or attribute name fields to match a single level of hierarchy | entry or attribute name fields to match a single level of hierarchy | |||
| only. | only. | |||
| Examples: | Examples: | |||
| C: a SEARCH ANNOTATION "/message/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 containing | In the above example, the message numbers of any messages containing | |||
| the string "IMAP4" in the shared or private "value" attribute of the | the string "IMAP4" in the shared or private "value" attribute of the | |||
| "/message/comment" entry are returned in the search results. | "/comment" entry are returned in the search results. | |||
| C: a SEARCH ANNOTATION "*" "*" "IMAP4" | C: a SEARCH ANNOTATION "*" "*" "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 containing | In the above example, the message numbers of any messages containing | |||
| the string "IMAP4" in any attribute (public or private) of any entry | the string "IMAP4" in any attribute (public or private) of any entry | |||
| are returned in the search results. | are returned in the search results. | |||
| 9.8 ANNOTATION Key in SORT | 8.9 ANNOTATION Key in SORT | |||
| The ANNOTATION criterion for the SORT command [SORT-EXT] instructs | ||||
| the server to return the message numbers or UIDs of a mailbox, | ||||
| sorted using the values of the specified annotations. The | ||||
| ANNOTATION criterion is available if the server returns both | ||||
| "ANNOTATE" and "SORT" as supported capabilities in the CAPABILITY | ||||
| command response. | ||||
| ANNOTATION <entry-name> <attribute-name> | ANNOTATION <entry-name> <attribute-name> | |||
| The ANNOTATION criterion for the SORT command [SORT] instructs the | ||||
| server to return the message numbers or UIDs of a mailbox, sorted | ||||
| using the values of the specified annotations. The ANNOTATION | ||||
| criterion is available if the server returns both "ANNOTATE" 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. (The charset argument | |||
| determines sort order, as specified in the SORT extension | determines sort order, as specified in the SORT extension | |||
| description.) | description.) | |||
| Examples: | Examples: | |||
| C: a SORT (ANNOTATION "/message/subject" "value.shared") UTF-8 | C: a SORT (ANNOTATION "/subject" "value.shared") UTF-8 ALL | |||
| 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 | |||
| "/message/subject" entry. | "/subject" 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 and attribute -- wildcards are not allowed. | |||
| 10 Formal Syntax | 9 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 [ABNF]. | Form (ABNF) notation as specified in [ABNF]. | |||
| Non-terminals referenced but not defined below are as defined by | Non-terminals referenced but not defined below are as defined by | |||
| [IMAP4]. | [IMAP4]. | |||
| Except as noted otherwise, all alphabetic characters are case- | Except as noted otherwise, all alphabetic characters are case- | |||
| insensitive. The use of upper or lower case characters to define | insensitive. The use of upper or lower case characters to define | |||
| token strings is for editorial clarity only. Implementations MUST | token strings is for editorial clarity only. Implementations MUST | |||
| accept these strings in a case-insensitive fashion. | accept these strings in a case-insensitive fashion. | |||
| append = "APPEND" SP mailbox [SP flag-list] [SP date-time] | annotate-param = "ANNOTATE" | |||
| ; defines the select parameter used with | ||||
| ; ANNOTATE extension | ||||
| [SP "ANNOTATION" SP att-annotate] | append = "APPEND" SP mailbox [SP flag-list] [SP date-time] | |||
| SP literal | [SP "ANNOTATION" SP att-annotate] SP literal | |||
| ; modifies original IMAP4 APPEND command | ; modifies original IMAP4 APPEND command | |||
| att-annotate = "ANNOTATION" SP "(" entry-att *(SP entry-att) ")" | append-message = [SP flag-list] [SP date-time] | |||
| [SP "ANNOTATION" SP att-annotate] SP literal | ||||
| fetch-att =/ fetch-annotate | ; modifies [MULTIAPPEND] extension behaviour | |||
| ; modifies original IMAP4 fetch-att | ||||
| fetch-annotate = "ANNOTATION" SP "(" entries SP attribs ")" | ||||
| fetch-ann-resp = "ANNOTATION" SP "(" entry-att *(SP entry-att) ")" | ||||
| store-att-flags =/ att-annotate | att-annotate = "ANNOTATION" SP "(" entry-att *(SP entry-att) ")" | |||
| ; modifies original IMAP4 STORE command | ||||
| search-key =/ search-annotate | att-match = string | |||
| ; modifies original IMAP4 search-key | ; dot-separated attribute name | |||
| ; MAY contain "*" or "%" for use as wildcards | ||||
| search-annotate = "ANNOTATION" SP entry-match SP attrib-match | att-value = attrib SP value | |||
| SP value | ||||
| sort-key =/ sort-annotate | attrib = string | |||
| ; modifies original | ; dot-separated attribute name | |||
| ; draft-crispin-imapext-sort-xx.txt sort-key | ; MUST NOT contain "*" or "%" | |||
| sort-annotate = "ANNOTATION" SP entry SP attrib | attribs = att-match / | |||
| "(" att-match *(SP att-match) ")" | ||||
| entries = entry-match / | entries = entry-match / | |||
| "(" entry-match *(SP entry-match) ")" | "(" entry-match *(SP entry-match) ")" | |||
| attribs = attrib-match / | ||||
| "(" attrib-match *(SP attrib-match) ")" | ||||
| entry-att = entry SP "(" att-value *(SP att-value) ")" | ||||
| att-value = attrib SP value | ||||
| entry = string | entry = string | |||
| ; 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-match = string | entry-match = string | |||
| ; slash-separated path to entry | ; slash-separated path to entry | |||
| ; MAY contain "*" or "%" for use as wildcards | ; MAY contain "*" or "%" for use as wildcards | |||
| attrib = string | examine =/ *(SP "(" select-param *(SP select-param) ")" | |||
| ; dot-separated attribute name | ; modifies the original IMAP4 examine command to | |||
| ; MUST NOT contain "*" or "%" | ; accept optional parameters | |||
| attrib-match = string | fetch-ann-resp = "ANNOTATION" SP "(" entry-att *(SP entry-att) ")" | |||
| ; dot-separated attribute name | ||||
| ; MAY contain "*" or "%" for use as wildcards | ||||
| value = nstring | fetch-att =/ "ANNOTATION" SP "(" entries SP attribs ")" | |||
| ; modifies original IMAP4 fetch-att | ||||
| resp-text-code =/ "ANNOTATE" SP "TOOBIG" / | ||||
| "ANNOTATE" SP "TOOMANY" / | ||||
| "ANNOTATESIZE" SP number | ||||
| ; new response codes for STORE failures | ||||
| search-key =/ "ANNOTATION" SP entry-match SP att-match | ||||
| SP value | ||||
| ; modifies original IMAP4 search-key | ||||
| select =/ *(SP "(" select-param *(SP select-param) ")" | select =/ *(SP "(" select-param *(SP select-param) ")" | |||
| ; modifies the original IMAP4 select command to | ; modifies the original IMAP4 select command to | |||
| ; accept optional parameters | ; accept optional parameters | |||
| examine =/ *(SP "(" select-param *(SP select-param) ")" | ||||
| ; modifies the original IMAP4 examine command to | ||||
| ; accept optional parameters | ||||
| select-param = astring / "(" astring SP astring *(SP astring) ")" | select-param = astring / "(" astring SP astring *(SP astring) ")" | |||
| ; parameters to SELECT may contain one or | ; parameters to SELECT may contain one or | |||
| ; more atoms or strings - multiple items | ; more atoms or strings - multiple items | |||
| ; are always parenthesised | ; are always parenthesised | |||
| annotate-param = "ANNOTATE" | sort-key =/ "ANNOTATION" SP entry SP attrib | |||
| ; defines the select parameter used with | ; modifies original sort-key [SORT] | |||
| ; ANNOTATE extension | ||||
| 11 IANA Considerations | store-att-flags =/ att-annotate | |||
| ; modifies original IMAP4 STORE command | ||||
| value = nstring | ||||
| 10 IANA Considerations | ||||
| Both entry names and attribute names MUST be specified in a | Both entry names and attribute names MUST be specified in a | |||
| standards track or IESG approved experimental RFC, or fall under the | standards track or IESG approved experimental RFC, or fall under the | |||
| vendor namespace. Vendor names MUST be registered. | vendor namespace. Vendor names MUST be registered. | |||
| 11.1 Entry and Attribute Registration Template | 10.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: ______________________________ | |||
| skipping to change at page 18, line 37 ¶ | skipping to change at page 20, line 4 ¶ | |||
| 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: _______________________ | |||
| ____________________________________ | ____________________________________ | |||
| ____________________________________ | ____________________________________ | |||
| Contact person: ____________________ | Contact person: ____________________ | |||
| email: ____________________ | email: ____________________ | |||
| 12 Security Considerations | 11 Security Considerations | |||
| The ANNOTATE extension does not raise any security considerations | The ANNOTATE extension does not raise any security considerations | |||
| that are not present in the base [IMAP4] protocol, and these issues | that are not present in the base [IMAP4] protocol, and these issues | |||
| are discussed in [IMAP4]. | are discussed in [IMAP4]. | |||
| Care must be taken to ensure that annotations whose values are | Care must be taken to ensure that annotations whose values are | |||
| intended to remain private are not stored in mailboxes which are | intended to remain private are not stored in mailboxes which are | |||
| accessible to other users. This includes mailboxes owned by the | accessible to other users. This includes mailboxes owned by the | |||
| user by whose ACLs permit access by others as well as any shared | user by whose ACLs permit access by others as well as any shared | |||
| mailboxes. | mailboxes. | |||
| 13 Normative References | 12 Normative References | |||
| [ABNF] Crocker, Overell, "Augmented BNF for Syntax Specifications: | [ABNF] Crocker, Overell, "Augmented BNF for Syntax Specifications: | |||
| ABNF", RFC 2234, Internet Mail Consortium, Demon Internet Ltd, | ABNF", RFC 2234, November 1997. | |||
| November 1997. | ||||
| [ACAP] Newman, Myers, "ACAP -- Application Configuration Access | [ACAP] Newman, Myers, "ACAP -- Application Configuration Access | |||
| Protocol", RFC 2244, Innosoft, Netscape, November 1997. | Protocol", RFC 2244, November 1997. | |||
| [CONDSTORE] Melnikov, Hole, "IMAP Extension for Conditional STORE | ||||
| operation", | ||||
| <http://www.ietf.org/internet-drafts/draft-ietf-imapext-condstore-01.txt, | ||||
| April 2003. | ||||
| [IMAP4] Crispin, "Internet Message Access Protocol - Version 4rev1", | [IMAP4] Crispin, "Internet Message Access Protocol - Version 4rev1", | |||
| RFC 2060, University of Washington, December 1996. | RFC 3501, March 2003. | |||
| [KEYWORDS] Bradner, "Key words for use in RFCs to Indicate | [KEYWORDS] Bradner, "Key words for use in RFCs to Indicate | |||
| Requirement Levels", RFC 2119, Harvard University, March 1997. | Requirement Levels", RFC 2119, March 1997. | |||
| [MDNSENT] Melnikov, "MDN profile for IMAP", work in progress. | [MDNSENT] Melnikov, "Message Disposition Notification (MDN) profile | |||
| <http://www.ietf.org/internet-drafts/draft-melnikov-imap-mdn-05.txt>. | for Internet Message Access Protocol (IMAP)", RFC 3503, March 2003. | |||
| [SMTP-DSN] Moore, "SMTP Service Extension for Delivery Status | [MULTIAPPEND] Crispin, "Internet Message Access Protocol (IMAP) - | |||
| Notifications", RFC 1891, University of Tennessee, January 1996. | MULTIAPPEND Extension", RFC 3502, March 2003. | |||
| [SORT-EXT] Crispin, "Internet Message Access Protocol -- SORT | [SMTP-DSN] Moore, "SMTP Service Extension for Delivery Status | |||
| Extension", work in progress. | Notifications", RFC 1891, January 1996. | |||
| <http://www.ietf.org/internet-drafts/draft-ietf-imapext-sort-10.txt> | ||||
| 14 Informative References | [SORT] Crispin, Murchison, "Internet Message Access Protocol - Sort | |||
| and Thread Extension", work in progress. | ||||
| <http://www.ietf.org/internet-drafts/draft-ietf-imapext-sort-13.txt> | ||||
| 13 Informative References | ||||
| [ACL-EXT] Myers, "IMAP4 ACL extension", RFC 2086, Carnegie Mellon, | [ACL] Myers, "IMAP4 ACL extension", RFC 2086, January 1997. | |||
| January 1997. | ||||
| 15 Acknowledgments | 14 Acknowledgments | |||
| Many thanks to Chris Newman for his detailed comments on the first | Many thanks to Chris Newman for his detailed comments on the first | |||
| draft of this document, and to the participants at the ACAP working | draft of this document, and to the participants at the ACAP working | |||
| dinner in Pittsburgh. | dinner in Pittsburgh. | |||
| 16 Authors' Addresses | 15 Authors' Addresses | |||
| Randall Gellens | Randall Gellens | |||
| QUALCOMM Incorporated | QUALCOMM Incorporated | |||
| 5775 Morehouse Dr. | 5775 Morehouse Dr. | |||
| San Diego, CA 92121-2779 | San Diego, CA 92121-2779 | |||
| U.S.A. | U.S.A. | |||
| Email: randy@qualcomm.com | Email: randy@qualcomm.com | |||
| Cyrus Daboo | Cyrus Daboo | |||
| Cyrusoft International, Inc. | Cyrusoft International, Inc. | |||
| Suite 780, 5001 Baum Blvd. | Suite 780, 5001 Baum Blvd. | |||
| Pittsburgh, PA 15213 | Pittsburgh, PA 15213 | |||
| U.S.A. | U.S.A. | |||
| Email: daboo@cyrusoft.com | Email: daboo@cyrusoft.com | |||
| 17 Full Copyright Statement | 16 Full Copyright Statement | |||
| Copyright (C) The Internet Society 2003. All Rights Reserved. | Copyright (C) The Internet Society 2003. All Rights Reserved. | |||
| This document and translations of it may be copied and furnished to | This document and translations of it may be copied and furnished to | |||
| others, and derivative works that comment on or otherwise explain it | others, and derivative works that comment on or otherwise explain it | |||
| or assist in its implementation may be prepared, copied, published | or assist in its implementation may be prepared, copied, published | |||
| and distributed, in whole or in part, without restriction of any | and distributed, in whole or in part, without restriction of any | |||
| kind, provided that the above copyright notice and this paragraph | kind, provided that the above copyright notice and this paragraph | |||
| are included on all such copies and derivative works. However, this | are included on all such copies and derivative works. However, this | |||
| document itself may not be modified in any way, such as by removing | document itself may not be modified in any way, such as by removing | |||
| End of changes. 119 change blocks. | ||||
| 223 lines changed or deleted | 289 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||