mirror of
https://github.com/uw-imap/imap.git
synced 2024-11-16 10:28:23 +01:00
956 lines
33 KiB
Plaintext
956 lines
33 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Network Working Group A. Melnikov
|
|||
|
Request for Comments: 4466 Isode Ltd.
|
|||
|
Updates: 2088, 2342, 3501, 3502, 3516 C. Daboo
|
|||
|
Category: Standards Track April 2006
|
|||
|
|
|||
|
|
|||
|
Collected Extensions to IMAP4 ABNF
|
|||
|
|
|||
|
Status of This Memo
|
|||
|
|
|||
|
This document specifies an Internet standards track protocol for the
|
|||
|
Internet community, and requests discussion and suggestions for
|
|||
|
improvements. Please refer to the current edition of the "Internet
|
|||
|
Official Protocol Standards" (STD 1) for the standardization state
|
|||
|
and status of this protocol. Distribution of this memo is unlimited.
|
|||
|
|
|||
|
Copyright Notice
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2006).
|
|||
|
|
|||
|
Abstract
|
|||
|
|
|||
|
Over the years, many documents from IMAPEXT and LEMONADE working
|
|||
|
groups, as well as many individual documents, have added syntactic
|
|||
|
extensions to many base IMAP commands described in RFC 3501. For
|
|||
|
ease of reference, this document collects most of such ABNF changes
|
|||
|
in one place.
|
|||
|
|
|||
|
This document also suggests a set of standard patterns for adding
|
|||
|
options and extensions to several existing IMAP commands defined in
|
|||
|
RFC 3501. The patterns provide for compatibility between existing
|
|||
|
and future extensions.
|
|||
|
|
|||
|
This document updates ABNF in RFCs 2088, 2342, 3501, 3502, and 3516.
|
|||
|
It also includes part of the errata to RFC 3501. This document
|
|||
|
doesn't specify any semantic changes to the listed RFCs.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 1]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
Table of Contents
|
|||
|
|
|||
|
1. Introduction ....................................................2
|
|||
|
1.1. Purpose of This Document ...................................2
|
|||
|
1.2. Conventions Used in This Document ..........................3
|
|||
|
2. IMAP ABNF Extensions ............................................3
|
|||
|
2.1. Optional Parameters with the SELECT/EXAMINE Commands .......3
|
|||
|
2.2. Extended CREATE Command ....................................4
|
|||
|
2.3. Extended RENAME Command ....................................5
|
|||
|
2.4. Extensions to FETCH and UID FETCH Commands .................6
|
|||
|
2.5. Extensions to STORE and UID STORE Commands .................6
|
|||
|
2.6. Extensions to SEARCH Command ...............................7
|
|||
|
2.6.1. Extended SEARCH Command .............................7
|
|||
|
2.6.2. ESEARCH untagged response ...........................8
|
|||
|
2.7. Extensions to APPEND Command ...............................8
|
|||
|
3. Formal Syntax ...................................................9
|
|||
|
4. Security Considerations ........................................14
|
|||
|
5. Normative References ...........................................15
|
|||
|
6. Acknowledgements ...............................................15
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
1.1. Purpose of This Document
|
|||
|
|
|||
|
This document serves several purposes:
|
|||
|
|
|||
|
1. rationalize and generalize ABNF for some existing IMAP
|
|||
|
extensions;
|
|||
|
2. collect the ABNF in one place in order to minimize cross
|
|||
|
references between documents;
|
|||
|
3. define building blocks for future extensions so that they can
|
|||
|
be used together in a compatible way.
|
|||
|
|
|||
|
It is expected that a future revision of this document will be
|
|||
|
incorporated into a revision of RFC 3501.
|
|||
|
|
|||
|
This document updates ABNF in RFCs 2088, 2342, 3501, 3502, and 3516.
|
|||
|
It also includes part of the errata to RFC 3501. This document
|
|||
|
doesn't specify any semantic changes to the listed RFCs.
|
|||
|
|
|||
|
The ABNF in section 6 of RFC 2342 got rewritten to conform to the
|
|||
|
ABNF syntax as defined in RFC 4234 and to reference new non-terminals
|
|||
|
from RFC 3501. It was also restructured to allow for better
|
|||
|
readability. There were no changes "on the wire".
|
|||
|
|
|||
|
Section 2 extends ABNF for SELECT, EXAMINE, CREATE, RENAME, FETCH/UID
|
|||
|
FETCH, STORE/UID STORE, SEARCH, and APPEND commands in a consistent
|
|||
|
manner. Extensions to all the commands but APPEND have the same
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 2]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
structure. Extensibility for the APPEND command was done slightly
|
|||
|
differently in order to preserve backward compatibility with existing
|
|||
|
extensions.
|
|||
|
|
|||
|
Section 2 also defines a new ESEARCH response, whose purpose is to
|
|||
|
define a better version of the SEARCH response defined in RFC 3501.
|
|||
|
|
|||
|
Section 3 defines the collected ABNF that replaces pieces of ABNF in
|
|||
|
the aforementioned RFCs. The collected ABNF got generalized to allow
|
|||
|
for easier future extensibility.
|
|||
|
|
|||
|
1.2. Conventions Used in This Document
|
|||
|
|
|||
|
In examples, "C:" and "S:" indicate lines sent by the client and
|
|||
|
server, respectively.
|
|||
|
|
|||
|
The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY"
|
|||
|
in this document are to be interpreted as defined in "Key words for
|
|||
|
use in RFCs to Indicate Requirement Levels" [KEYWORDS].
|
|||
|
|
|||
|
2. IMAP ABNF Extensions
|
|||
|
|
|||
|
This section is not normative. It provides some background on the
|
|||
|
intended use of different extensions and it gives some guidance about
|
|||
|
how future extensions should extend the described commands.
|
|||
|
|
|||
|
2.1. Optional Parameters with the SELECT/EXAMINE Commands
|
|||
|
|
|||
|
This document adds the ability to include one or more parameters with
|
|||
|
the IMAP SELECT (section 6.3.1 of [IMAP4]) or EXAMINE (section 6.3.2
|
|||
|
of [IMAP4]) commands, to turn on or off certain standard behaviors,
|
|||
|
or to add new optional behaviors required for a particular extension.
|
|||
|
|
|||
|
There are two possible modes of operation:
|
|||
|
|
|||
|
o A global state change where a single use of the optional parameter
|
|||
|
will affect the session state from that time on, irrespective of
|
|||
|
subsequent SELECT/EXAMINE commands.
|
|||
|
|
|||
|
o A per-mailbox state change that will affect the session only for
|
|||
|
the duration of the new selected state. A subsequent
|
|||
|
SELECT/EXAMINE without the optional parameter will cancel its
|
|||
|
effect for the newly selected mailbox.
|
|||
|
|
|||
|
Optional parameters to the SELECT or EXAMINE commands are added as a
|
|||
|
parenthesized list of attribute/value pairs, and appear after the
|
|||
|
mailbox name in the standard SELECT or EXAMINE command. The order of
|
|||
|
individual parameters is arbitrary. A parameter value is optional
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 3]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
and may consist of atoms, strings, or lists in a specific order. If
|
|||
|
the parameter value is present, it always appears in parentheses (*).
|
|||
|
Any parameter not defined by extensions that the server supports must
|
|||
|
be rejected with a BAD response.
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
C: a SELECT INBOX (ANNOTATE)
|
|||
|
S: ...
|
|||
|
S: a OK SELECT complete
|
|||
|
|
|||
|
In the above example, a single parameter is used with the SELECT
|
|||
|
command.
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
C: a EXAMINE INBOX (ANNOTATE RESPONSES ("UID Responses")
|
|||
|
CONDSTORE)
|
|||
|
S: ...
|
|||
|
S: a OK EXAMINE complete
|
|||
|
|
|||
|
In the above example, three parameters are used with the EXAMINE
|
|||
|
command. The second parameter consists of two items: an atom
|
|||
|
"RESPONSES" followed by a quoted string.
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
C: a SELECT INBOX (BLURDYBLOOP)
|
|||
|
S: a BAD Unknown parameter in SELECT command
|
|||
|
|
|||
|
In the above example, a parameter not supported by the server is
|
|||
|
used. This results in the BAD response from the server.
|
|||
|
|
|||
|
(*) - if a parameter has a mandatory value, which can always be
|
|||
|
represented as a number or a sequence-set, the parameter value does
|
|||
|
not need the enclosing (). See ABNF for more details.
|
|||
|
|
|||
|
2.2. Extended CREATE Command
|
|||
|
|
|||
|
Arguments: mailbox name
|
|||
|
OPTIONAL list of CREATE parameters
|
|||
|
|
|||
|
Responses: no specific responses for this command
|
|||
|
|
|||
|
Result: OK - create completed
|
|||
|
NO - create failure: cannot create mailbox with
|
|||
|
that name
|
|||
|
BAD - argument(s) invalid
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 4]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
This document adds the ability to include one or more parameters with
|
|||
|
the IMAP CREATE command (see section 6.3.3 of [IMAP4]), to turn on or
|
|||
|
off certain standard behaviors, or to add new optional behaviors
|
|||
|
required for a particular extension. No CREATE parameters are
|
|||
|
defined in this document.
|
|||
|
|
|||
|
Optional parameters to the CREATE command are added as a
|
|||
|
parenthesized list of attribute/value pairs after the mailbox name.
|
|||
|
The order of individual parameters is arbitrary. A parameter value
|
|||
|
is optional and may consist of atoms, strings, or lists in a specific
|
|||
|
order. If the parameter value is present, it always appears in
|
|||
|
parentheses (*). Any parameter not defined by extensions that the
|
|||
|
server supports must be rejected with a BAD response.
|
|||
|
|
|||
|
(*) - if a parameter has a mandatory value, which can always be
|
|||
|
represented as a number or a sequence-set, the parameter value does
|
|||
|
not need the enclosing (). See ABNF for more details.
|
|||
|
|
|||
|
2.3. Extended RENAME Command
|
|||
|
|
|||
|
Arguments: existing mailbox name
|
|||
|
new mailbox name
|
|||
|
OPTIONAL list of RENAME parameters
|
|||
|
|
|||
|
Responses: no specific responses for this command
|
|||
|
|
|||
|
Result: OK - rename completed
|
|||
|
NO - rename failure: cannot rename mailbox with
|
|||
|
that name, cannot rename to mailbox with
|
|||
|
that name, etc.
|
|||
|
BAD - argument(s) invalid
|
|||
|
|
|||
|
This document adds the ability to include one or more parameters with
|
|||
|
the IMAP RENAME command (see section 6.3.5 of [IMAP4]), to turn on or
|
|||
|
off certain standard behaviors, or to add new optional behaviors
|
|||
|
required for a particular extension. No RENAME parameters are
|
|||
|
defined in this document.
|
|||
|
|
|||
|
Optional parameters to the RENAME command are added as a
|
|||
|
parenthesized list of attribute/value pairs after the new mailbox
|
|||
|
name. The order of individual parameters is arbitrary. A parameter
|
|||
|
value is optional and may consist of atoms, strings, or lists in a
|
|||
|
specific order. If the parameter value is present, it always appears
|
|||
|
in parentheses (*). Any parameter not defined by extensions that the
|
|||
|
server supports must be rejected with a BAD response.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 5]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
(*) - if a parameter has a mandatory value, which can always be
|
|||
|
represented as a number or a sequence-set, the parameter value does
|
|||
|
not need the enclosing (). See ABNF for more details.
|
|||
|
|
|||
|
2.4. Extensions to FETCH and UID FETCH Commands
|
|||
|
|
|||
|
Arguments: sequence set
|
|||
|
message data item names or macro
|
|||
|
OPTIONAL fetch modifiers
|
|||
|
|
|||
|
Responses: untagged responses: FETCH
|
|||
|
|
|||
|
Result: OK - fetch completed
|
|||
|
NO - fetch error: cannot fetch that data
|
|||
|
BAD - command unknown or arguments invalid
|
|||
|
|
|||
|
This document extends the syntax of the FETCH and UID FETCH commands
|
|||
|
(see section 6.4.5 of [IMAP4]) to include optional FETCH modifiers.
|
|||
|
No fetch modifiers are defined in this document.
|
|||
|
|
|||
|
The order of individual modifiers is arbitrary. Each modifier is an
|
|||
|
attribute/value pair. A modifier value is optional and may consist
|
|||
|
of atoms and/or strings and/or lists in a specific order. If the
|
|||
|
modifier value is present, it always appears in parentheses (*). Any
|
|||
|
modifiers not defined by extensions that the server supports must be
|
|||
|
rejected with a BAD response.
|
|||
|
|
|||
|
(*) - if a modifier has a mandatory value, which can always be
|
|||
|
represented as a number or a sequence-set, the modifier value does
|
|||
|
not need the enclosing (). See ABNF for more details.
|
|||
|
|
|||
|
2.5. Extensions to STORE and UID STORE Commands
|
|||
|
|
|||
|
Arguments: message set
|
|||
|
OPTIONAL store modifiers
|
|||
|
message data item name
|
|||
|
value for message data item
|
|||
|
|
|||
|
Responses: untagged responses: FETCH
|
|||
|
|
|||
|
Result: OK - store completed
|
|||
|
NO - store error: cannot store that data
|
|||
|
BAD - command unknown or arguments invalid
|
|||
|
|
|||
|
This document extends the syntax of the STORE and UID STORE commands
|
|||
|
(see section 6.4.6 of [IMAP4]) to include optional STORE modifiers.
|
|||
|
No store modifiers are defined in this document.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 6]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
The order of individual modifiers is arbitrary. Each modifier is an
|
|||
|
attribute/value pair. A modifier value is optional and may consist
|
|||
|
of atoms and/or strings and/or lists in a specific order. If the
|
|||
|
modifier value is present, it always appears in parentheses (*). Any
|
|||
|
modifiers not defined by extensions that the server supports must be
|
|||
|
rejected with a BAD response.
|
|||
|
|
|||
|
(*) - if a modifier has a mandatory value, which can always be
|
|||
|
represented as a number or a sequence-set, the modifier value does
|
|||
|
not need the enclosing (). See ABNF for more details.
|
|||
|
|
|||
|
2.6. Extensions to SEARCH Command
|
|||
|
|
|||
|
2.6.1. Extended SEARCH Command
|
|||
|
|
|||
|
Arguments: OPTIONAL result specifier
|
|||
|
OPTIONAL [CHARSET] specification
|
|||
|
searching criteria (one or more)
|
|||
|
|
|||
|
Responses: REQUIRED untagged response: SEARCH (*)
|
|||
|
|
|||
|
Result: OK - search completed
|
|||
|
NO - search error: cannot search that [CHARSET] or
|
|||
|
criteria
|
|||
|
BAD - command unknown or arguments invalid
|
|||
|
|
|||
|
This section updates definition of the SEARCH command described in
|
|||
|
section 6.4.4 of [IMAP4].
|
|||
|
|
|||
|
The SEARCH command is extended to allow for result options. This
|
|||
|
document does not define any result options.
|
|||
|
|
|||
|
The order of individual options is arbitrary. Individual options may
|
|||
|
contain parameters enclosed in parentheses (**). If an option has
|
|||
|
parameters, they consist of atoms and/or strings and/or lists in a
|
|||
|
specific order. Any options not defined by extensions that the
|
|||
|
server supports must be rejected with a BAD response.
|
|||
|
|
|||
|
(*) - An extension to the SEARCH command may require another untagged
|
|||
|
response, or no untagged response to be returned. Section 2.6.2
|
|||
|
defines a new ESEARCH untagged response that replaces the SEARCH
|
|||
|
untagged response. Note that for a given extended SEARCH command the
|
|||
|
SEARCH and ESEARCH responses SHOULD be mutually exclusive, i.e., only
|
|||
|
one of them should be returned.
|
|||
|
|
|||
|
(**) - if an option has a mandatory parameter, which can always be
|
|||
|
represented as a number or a sequence-set, the option parameter does
|
|||
|
not need the enclosing (). See ABNF for more details.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 7]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
2.6.2. ESEARCH untagged response
|
|||
|
|
|||
|
Contents: one or more search-return-data pairs
|
|||
|
|
|||
|
The ESEARCH response SHOULD be sent as a result of an extended SEARCH
|
|||
|
or UID SEARCH command specified in section 2.6.1.
|
|||
|
|
|||
|
The ESEARCH response starts with an optional search correlator. If
|
|||
|
it is missing, then the response was not caused by a particular IMAP
|
|||
|
command, whereas if it is present, it contains the tag of the command
|
|||
|
that caused the response to be returned.
|
|||
|
|
|||
|
The search correlator is followed by an optional UID indicator. If
|
|||
|
this indicator is present, all data in the ESEARCH response refers to
|
|||
|
UIDs, otherwise all returned data refers to message numbers.
|
|||
|
|
|||
|
The rest of the ESEARCH response contains one or more search data
|
|||
|
pairs. Each pair starts with unique return item name, followed by a
|
|||
|
space and the corresponding data. Search data pairs may be returned
|
|||
|
in any order. Unless specified otherwise by an extension, any return
|
|||
|
item name SHOULD appear only once in an ESEARCH response.
|
|||
|
|
|||
|
Example: S: * ESEARCH UID COUNT 5 ALL 4:19,21,28
|
|||
|
|
|||
|
Example: S: * ESEARCH (TAG "a567") UID COUNT 5 ALL 4:19,21,28
|
|||
|
|
|||
|
Example: S: * ESEARCH COUNT 5 ALL 1:17,21
|
|||
|
|
|||
|
2.7. Extensions to APPEND Command
|
|||
|
|
|||
|
The IMAP BINARY extension [BINARY] extends the APPEND command to
|
|||
|
allow a client to append data containing NULs by using the <literal8>
|
|||
|
syntax. The ABNF was rewritten to allow for easier extensibility by
|
|||
|
IMAP extensions. This document hasn't specified any semantical
|
|||
|
changes to the [BINARY] extension.
|
|||
|
|
|||
|
In addition, the non-terminal "literal8" defined in [BINARY] got
|
|||
|
extended to allow for non-synchronizing literals if both [BINARY] and
|
|||
|
[LITERAL+] extensions are supported by the server.
|
|||
|
|
|||
|
The IMAP MULTIAPPEND extension [MULTIAPPEND] extends the APPEND
|
|||
|
command to allow a client to append multiple messages atomically.
|
|||
|
This document defines a common syntax for the APPEND command that
|
|||
|
takes into consideration syntactic extensions defined by both
|
|||
|
[BINARY] and [MULTIAPPEND] extensions.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 8]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
3. Formal Syntax
|
|||
|
|
|||
|
The following syntax specification uses the Augmented Backus-Naur
|
|||
|
Form (ABNF) notation as specified in [ABNF].
|
|||
|
|
|||
|
Non-terminals referenced but not defined below are as defined by
|
|||
|
[IMAP4].
|
|||
|
|
|||
|
Except as noted otherwise, all alphabetic characters are case-
|
|||
|
insensitive. The use of uppercase or lowercase characters to define
|
|||
|
token strings is for editorial clarity only. Implementations MUST
|
|||
|
accept these strings in a case-insensitive fashion.
|
|||
|
|
|||
|
append = "APPEND" SP mailbox 1*append-message
|
|||
|
;; only a single append-message may appear
|
|||
|
;; if MULTIAPPEND [MULTIAPPEND] capability
|
|||
|
;; is not present
|
|||
|
|
|||
|
append-message = append-opts SP append-data
|
|||
|
|
|||
|
append-ext = append-ext-name SP append-ext-value
|
|||
|
;; This non-terminal define extensions to
|
|||
|
;; to message metadata.
|
|||
|
|
|||
|
append-ext-name = tagged-ext-label
|
|||
|
|
|||
|
append-ext-value= tagged-ext-val
|
|||
|
;; This non-terminal shows recommended syntax
|
|||
|
;; for future extensions.
|
|||
|
|
|||
|
|
|||
|
append-data = literal / literal8 / append-data-ext
|
|||
|
|
|||
|
append-data-ext = tagged-ext
|
|||
|
;; This non-terminal shows recommended syntax
|
|||
|
;; for future extensions,
|
|||
|
;; i.e., a mandatory label followed
|
|||
|
;; by parameters.
|
|||
|
|
|||
|
append-opts = [SP flag-list] [SP date-time] *(SP append-ext)
|
|||
|
;; message metadata
|
|||
|
|
|||
|
charset = atom / quoted
|
|||
|
;; Exact syntax is defined in [CHARSET].
|
|||
|
|
|||
|
create = "CREATE" SP mailbox
|
|||
|
[create-params]
|
|||
|
;; Use of INBOX gives a NO error.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 9]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
create-params = SP "(" create-param *( SP create-param) ")"
|
|||
|
|
|||
|
create-param-name = tagged-ext-label
|
|||
|
|
|||
|
create-param = create-param-name [SP create-param-value]
|
|||
|
|
|||
|
create-param-value= tagged-ext-val
|
|||
|
;; This non-terminal shows recommended syntax
|
|||
|
;; for future extensions.
|
|||
|
|
|||
|
|
|||
|
esearch-response = "ESEARCH" [search-correlator] [SP "UID"]
|
|||
|
*(SP search-return-data)
|
|||
|
;; Note that SEARCH and ESEARCH responses
|
|||
|
;; SHOULD be mutually exclusive,
|
|||
|
;; i.e., only one of the response types
|
|||
|
;; should be
|
|||
|
;; returned as a result of a command.
|
|||
|
|
|||
|
|
|||
|
examine = "EXAMINE" SP mailbox [select-params]
|
|||
|
;; modifies the original IMAP EXAMINE command
|
|||
|
;; to accept optional parameters
|
|||
|
|
|||
|
fetch = "FETCH" SP sequence-set SP ("ALL" / "FULL" /
|
|||
|
"FAST" / fetch-att /
|
|||
|
"(" fetch-att *(SP fetch-att) ")")
|
|||
|
[fetch-modifiers]
|
|||
|
;; modifies the original IMAP4 FETCH command to
|
|||
|
;; accept optional modifiers
|
|||
|
|
|||
|
fetch-modifiers = SP "(" fetch-modifier *(SP fetch-modifier) ")"
|
|||
|
|
|||
|
fetch-modifier = fetch-modifier-name [ SP fetch-modif-params ]
|
|||
|
|
|||
|
fetch-modif-params = tagged-ext-val
|
|||
|
;; This non-terminal shows recommended syntax
|
|||
|
;; for future extensions.
|
|||
|
|
|||
|
fetch-modifier-name = tagged-ext-label
|
|||
|
|
|||
|
literal8 = "~{" number ["+"] "}" CRLF *OCTET
|
|||
|
;; A string that might contain NULs.
|
|||
|
;; <number> represents the number of OCTETs
|
|||
|
;; in the response string.
|
|||
|
;; The "+" is only allowed when both LITERAL+ and
|
|||
|
;; BINARY extensions are supported by the server.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 10]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
mailbox-data =/ Namespace-Response /
|
|||
|
esearch-response
|
|||
|
|
|||
|
Namespace = nil / "(" 1*Namespace-Descr ")"
|
|||
|
|
|||
|
Namespace-Command = "NAMESPACE"
|
|||
|
|
|||
|
Namespace-Descr = "(" string SP
|
|||
|
(DQUOTE QUOTED-CHAR DQUOTE / nil)
|
|||
|
*(Namespace-Response-Extension) ")"
|
|||
|
|
|||
|
Namespace-Response-Extension = SP string SP
|
|||
|
"(" string *(SP string) ")"
|
|||
|
|
|||
|
Namespace-Response = "NAMESPACE" SP Namespace
|
|||
|
SP Namespace SP Namespace
|
|||
|
;; This response is currently only allowed
|
|||
|
;; if the IMAP server supports [NAMESPACE].
|
|||
|
;; The first Namespace is the Personal Namespace(s)
|
|||
|
;; The second Namespace is the Other Users' Namespace(s)
|
|||
|
;; The third Namespace is the Shared Namespace(s)
|
|||
|
|
|||
|
rename = "RENAME" SP mailbox SP mailbox
|
|||
|
[rename-params]
|
|||
|
;; Use of INBOX as a destination gives
|
|||
|
;; a NO error, unless rename-params
|
|||
|
;; is not empty.
|
|||
|
|
|||
|
rename-params = SP "(" rename-param *( SP rename-param) ")"
|
|||
|
|
|||
|
rename-param = rename-param-name [SP rename-param-value]
|
|||
|
|
|||
|
rename-param-name = tagged-ext-label
|
|||
|
|
|||
|
rename-param-value= tagged-ext-val
|
|||
|
;; This non-terminal shows recommended syntax
|
|||
|
;; for future extensions.
|
|||
|
|
|||
|
|
|||
|
response-data = "*" SP response-payload CRLF
|
|||
|
|
|||
|
response-payload= resp-cond-state / resp-cond-bye /
|
|||
|
mailbox-data / message-data / capability-data
|
|||
|
|
|||
|
search = "SEARCH" [search-return-opts]
|
|||
|
SP search-program
|
|||
|
|
|||
|
search-correlator = SP "(" "TAG" SP tag-string ")"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 11]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
search-program = ["CHARSET" SP charset SP]
|
|||
|
search-key *(SP search-key)
|
|||
|
;; CHARSET argument to SEARCH MUST be
|
|||
|
;; registered with IANA.
|
|||
|
|
|||
|
search-return-data = search-modifier-name SP search-return-value
|
|||
|
;; Note that not every SEARCH return option
|
|||
|
;; is required to have the corresponding
|
|||
|
;; ESEARCH return data.
|
|||
|
|
|||
|
search-return-opts = SP "RETURN" SP "(" [search-return-opt
|
|||
|
*(SP search-return-opt)] ")"
|
|||
|
|
|||
|
search-return-opt = search-modifier-name [SP search-mod-params]
|
|||
|
|
|||
|
search-return-value = tagged-ext-val
|
|||
|
;; Data for the returned search option.
|
|||
|
;; A single "nz-number"/"number" value
|
|||
|
;; can be returned as an atom (i.e., without
|
|||
|
;; quoting). A sequence-set can be returned
|
|||
|
;; as an atom as well.
|
|||
|
|
|||
|
search-modifier-name = tagged-ext-label
|
|||
|
|
|||
|
search-mod-params = tagged-ext-val
|
|||
|
;; This non-terminal shows recommended syntax
|
|||
|
;; for future extensions.
|
|||
|
|
|||
|
|
|||
|
select = "SELECT" SP mailbox [select-params]
|
|||
|
;; modifies the original IMAP SELECT command to
|
|||
|
;; accept optional parameters
|
|||
|
|
|||
|
select-params = SP "(" select-param *(SP select-param) ")"
|
|||
|
|
|||
|
select-param = select-param-name [SP select-param-value]
|
|||
|
;; a parameter to SELECT may contain one or
|
|||
|
;; more atoms and/or strings and/or lists.
|
|||
|
|
|||
|
select-param-name= tagged-ext-label
|
|||
|
|
|||
|
select-param-value= tagged-ext-val
|
|||
|
;; This non-terminal shows recommended syntax
|
|||
|
;; for future extensions.
|
|||
|
|
|||
|
|
|||
|
status-att-list = status-att-val *(SP status-att-val)
|
|||
|
;; Redefines status-att-list from RFC 3501.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 12]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
;; status-att-val is defined in RFC 3501 errata
|
|||
|
|
|||
|
status-att-val = ("MESSAGES" SP number) /
|
|||
|
("RECENT" SP number) /
|
|||
|
("UIDNEXT" SP nz-number) /
|
|||
|
("UIDVALIDITY" SP nz-number) /
|
|||
|
("UNSEEN" SP number)
|
|||
|
;; Extensions to the STATUS responses
|
|||
|
;; should extend this production.
|
|||
|
;; Extensions should use the generic
|
|||
|
;; syntax defined by tagged-ext.
|
|||
|
|
|||
|
store = "STORE" SP sequence-set [store-modifiers]
|
|||
|
SP store-att-flags
|
|||
|
;; extend [IMAP4] STORE command syntax
|
|||
|
;; to allow for optional store-modifiers
|
|||
|
|
|||
|
store-modifiers = SP "(" store-modifier *(SP store-modifier)
|
|||
|
")"
|
|||
|
|
|||
|
store-modifier = store-modifier-name [SP store-modif-params]
|
|||
|
|
|||
|
store-modif-params = tagged-ext-val
|
|||
|
;; This non-terminal shows recommended syntax
|
|||
|
;; for future extensions.
|
|||
|
|
|||
|
store-modifier-name = tagged-ext-label
|
|||
|
|
|||
|
tag-string = string
|
|||
|
;; tag of the command that caused
|
|||
|
;; the ESEARCH response, sent as
|
|||
|
;; a string.
|
|||
|
|
|||
|
tagged-ext = tagged-ext-label SP tagged-ext-val
|
|||
|
;; recommended overarching syntax for
|
|||
|
;; extensions
|
|||
|
|
|||
|
tagged-ext-label = tagged-label-fchar *tagged-label-char
|
|||
|
;; Is a valid RFC 3501 "atom".
|
|||
|
|
|||
|
tagged-label-fchar = ALPHA / "-" / "_" / "."
|
|||
|
|
|||
|
tagged-label-char = tagged-label-fchar / DIGIT / ":"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 13]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
tagged-ext-comp = astring /
|
|||
|
tagged-ext-comp *(SP tagged-ext-comp) /
|
|||
|
"(" tagged-ext-comp ")"
|
|||
|
;; Extensions that follow this general
|
|||
|
;; syntax should use nstring instead of
|
|||
|
;; astring when appropriate in the context
|
|||
|
;; of the extension.
|
|||
|
;; Note that a message set or a "number"
|
|||
|
;; can always be represented as an "atom".
|
|||
|
;; An URL should be represented as
|
|||
|
;; a "quoted" string.
|
|||
|
|
|||
|
tagged-ext-simple = sequence-set / number
|
|||
|
|
|||
|
tagged-ext-val = tagged-ext-simple /
|
|||
|
"(" [tagged-ext-comp] ")"
|
|||
|
|
|||
|
4. Security Considerations
|
|||
|
|
|||
|
This document updates ABNF in RFCs 2088, 2342, 3501, 3502, and 3516.
|
|||
|
The updated documents must be consulted for security considerations
|
|||
|
for the extensions that they define.
|
|||
|
|
|||
|
As a protocol gets more complex, parser bugs become more common
|
|||
|
including buffer overflow, denial of service, and other common
|
|||
|
security coding errors. To the extent that this document makes the
|
|||
|
parser more complex, it makes this situation worse. To the extent
|
|||
|
that this document makes the parser more consistent and thus simpler,
|
|||
|
the situation is improved. The impact will depend on how many
|
|||
|
deployed IMAP extensions are consistent with this document.
|
|||
|
Implementers are encouraged to take care of these issues when
|
|||
|
extending existing implementations. Future IMAP extensions should
|
|||
|
strive for consistency and simplicity to the greatest extent
|
|||
|
possible.
|
|||
|
|
|||
|
Extensions to IMAP commands that are permitted in NOT AUTHENTICATED
|
|||
|
state are more sensitive to these security issues due to the larger
|
|||
|
possible attacker community prior to authentication, and the fact
|
|||
|
that some IMAP servers run with elevated privileges in that state.
|
|||
|
This document does not extend any commands permitted in NOT
|
|||
|
AUTHENTICATED state. Future IMAP extensions to commands permitted in
|
|||
|
NOT AUTHENTICATED state should favor simplicity over consistency or
|
|||
|
extensibility.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 14]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
5. Normative References
|
|||
|
|
|||
|
[KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate
|
|||
|
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
|||
|
|
|||
|
[IMAP4] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL -
|
|||
|
VERSION 4rev1", RFC 3501, March 2003.
|
|||
|
|
|||
|
[ABNF] Crocker, D., Ed., and P. Overell, "Augmented BNF for
|
|||
|
Syntax Specifications: ABNF", RFC 4234, October 2005.
|
|||
|
|
|||
|
[CHARSET] Freed, N. and J. Postel, "IANA Charset Registration
|
|||
|
Procedures", BCP 19, RFC 2978, October 2000.
|
|||
|
|
|||
|
[MULTIAPPEND] Crispin, M., "Internet Message Access Protocol (IMAP) -
|
|||
|
MULTIAPPEND Extension", RFC 3502, March 2003.
|
|||
|
|
|||
|
[NAMESPACE] Gahrns, M. and C. Newman, "IMAP4 Namespace", RFC 2342,
|
|||
|
May 1998.
|
|||
|
|
|||
|
[LITERAL+] Myers, J., "IMAP4 non-synchronizing literals", RFC
|
|||
|
2088, January 1997.
|
|||
|
|
|||
|
[BINARY] Nerenberg, L., "IMAP4 Binary Content Extension", RFC
|
|||
|
3516, April 2003.
|
|||
|
|
|||
|
6. Acknowledgements
|
|||
|
|
|||
|
This documents is based on ideas proposed by Pete Resnick, Mark
|
|||
|
Crispin, Ken Murchison, Philip Guenther, Randall Gellens, and Lyndon
|
|||
|
Nerenberg.
|
|||
|
|
|||
|
However, all errors and omissions must be attributed to the authors
|
|||
|
of the document.
|
|||
|
|
|||
|
Thanks to Philip Guenther, Dave Cridland, Mark Crispin, Chris Newman,
|
|||
|
Elwyn Davies, and Barry Leiba for comments and corrections.
|
|||
|
|
|||
|
literal8 syntax was taken from RFC 3516.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 15]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
Authors' Addresses
|
|||
|
|
|||
|
Alexey Melnikov
|
|||
|
Isode Limited
|
|||
|
5 Castle Business Village
|
|||
|
36 Station Road
|
|||
|
Hampton, Middlesex, TW12 2BX
|
|||
|
UK
|
|||
|
|
|||
|
EMail: Alexey.Melnikov@isode.com
|
|||
|
|
|||
|
|
|||
|
Cyrus Daboo
|
|||
|
|
|||
|
EMail: cyrus@daboo.name
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 16]
|
|||
|
|
|||
|
RFC 4466 Collected Extensions to IMAP4 ABNF April 2006
|
|||
|
|
|||
|
|
|||
|
Full Copyright Statement
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2006).
|
|||
|
|
|||
|
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 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.
|
|||
|
|
|||
|
Acknowledgement
|
|||
|
|
|||
|
Funding for the RFC Editor function is provided by the IETF
|
|||
|
Administrative Support Activity (IASA).
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Melnikov & Daboo Standards Track [Page 17]
|
|||
|
|