draft-ietf-extra-imap4rev2-14.txt   draft-ietf-extra-imap4rev2-15.txt 
Network Working Group A. Melnikov, Ed. Network Working Group A. Melnikov, Ed.
Internet-Draft Isode Ltd Internet-Draft Isode Ltd
Obsoletes: 3501 (if approved) B. Leiba, Ed. Obsoletes: 3501 (if approved) B. Leiba, Ed.
Intended status: Standards Track Futurewei Technologies Intended status: Standards Track Futurewei Technologies
Expires: November 9, 2020 May 8, 2020 Expires: December 19, 2020 June 17, 2020
Internet Message Access Protocol (IMAP) - Version 4rev2 Internet Message Access Protocol (IMAP) - Version 4rev2
draft-ietf-extra-imap4rev2-14 draft-ietf-extra-imap4rev2-15
Abstract Abstract
The Internet Message Access Protocol, Version 4rev2 (IMAP4rev2) The Internet Message Access Protocol, Version 4rev2 (IMAP4rev2)
allows a client to access and manipulate electronic mail messages on allows a client to access and manipulate electronic mail messages on
a server. IMAP4rev2 permits manipulation of mailboxes (remote a server. IMAP4rev2 permits manipulation of mailboxes (remote
message folders) in a way that is functionally equivalent to local message folders) in a way that is functionally equivalent to local
folders. IMAP4rev2 also provides the capability for an offline folders. IMAP4rev2 also provides the capability for an offline
client to resynchronize with the server. client to resynchronize with the server.
skipping to change at page 1, line 47 skipping to change at page 1, line 47
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on November 9, 2020. This Internet-Draft will expire on December 19, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the Copyright (c) 2020 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 3, line 43 skipping to change at page 3, line 43
6.3.1. ENABLE Command . . . . . . . . . . . . . . . . . . . 33 6.3.1. ENABLE Command . . . . . . . . . . . . . . . . . . . 33
6.3.2. SELECT Command . . . . . . . . . . . . . . . . . . . 35 6.3.2. SELECT Command . . . . . . . . . . . . . . . . . . . 35
6.3.3. EXAMINE Command . . . . . . . . . . . . . . . . . . . 37 6.3.3. EXAMINE Command . . . . . . . . . . . . . . . . . . . 37
6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 38 6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 38
6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 39 6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 39
6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 40 6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 40
6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 42 6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 42
6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 43 6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 43
6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 43 6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 43
6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 61 6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 61
6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 66 6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 65
6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 67 6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 66
6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 70 6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 69
6.4. Client Commands - Selected State . . . . . . . . . . . . 72 6.4. Client Commands - Selected State . . . . . . . . . . . . 71
6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 72 6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 71
6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 73 6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 72
6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 73 6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 72
6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 74 6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 73
6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 86 6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 85
6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 90 6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 89
6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 91 6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 90
6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 92 6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 91
6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 94 6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 93
6.5. Client Commands - Experimental/Expansion . . . . . . . . 96 6.5. Client Commands - Experimental/Expansion . . . . . . . . 95
6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 96 6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 95
7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 97 7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 96
7.1. Server Responses - Status Responses . . . . . . . . . . . 98 7.1. Server Responses - Status Responses . . . . . . . . . . . 97
7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 106 7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 105
7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 106 7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 105
7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 107 7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 106
7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 107 7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 106
7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 107 7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 106
7.2. Server Responses - Server and Mailbox Status . . . . . . 108 7.2. Server Responses - Server and Mailbox Status . . . . . . 107
7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 108 7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 107
7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 108 7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 107
7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 109 7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 108
7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 113 7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 112
7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 113 7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 113
7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 114 7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 113
7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 114 7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 113
7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 115 7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 114
7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 115 7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 114
7.4. Server Responses - Message Status . . . . . . . . . . . . 115 7.4. Server Responses - Message Status . . . . . . . . . . . . 114
7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 115 7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 114
7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 116 7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 115
7.5. Server Responses - Command Continuation Request . . . . . 122 7.5. Server Responses - Command Continuation Request . . . . . 121
8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 122 8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 122
9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 123 9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 123
10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 140 10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 140
11. Security Considerations . . . . . . . . . . . . . . . . . . . 140 11. Security Considerations . . . . . . . . . . . . . . . . . . . 140
11.1. STARTTLS Security Considerations . . . . . . . . . . . . 141 11.1. STARTTLS Security Considerations . . . . . . . . . . . . 140
11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 141 11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 140
11.3. LIST command and Other Users' namespace . . . . . . . . 141 11.3. LIST command and Other Users' namespace . . . . . . . . 141
11.4. Other Security Considerations . . . . . . . . . . . . . 142 11.4. Other Security Considerations . . . . . . . . . . . . . 141
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 142 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 142
12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 143 12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 142
12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 143 12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 142
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 143 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 142
13.1. Normative References . . . . . . . . . . . . . . . . . . 143 13.1. Normative References . . . . . . . . . . . . . . . . . . 142
13.2. Informative References (related protocols) . . . . . . . 146 13.2. Informative References (related protocols) . . . . . . . 145
13.3. Informative References (historical aspects of IMAP and 13.3. Informative References (historical aspects of IMAP and
related protocols) . . . . . . . . . . . . . . . . . . . 148 related protocols) . . . . . . . . . . . . . . . . . . . 147
Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 149 Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 148
A.1. Mailbox International Naming Convention for compatibility A.1. Mailbox International Naming Convention for compatibility
with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 149 with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 148
Appendix B. Backward compatibility with BINARY extension . . . . 151 Appendix B. Backward compatibility with BINARY extension . . . . 150
Appendix C. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 151 Appendix C. Backward compatibility with LIST-EXTENDED extension 150
Appendix D. Acknowledgement . . . . . . . . . . . . . . . . . . 153 Appendix D. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 150
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Appendix E. Acknowledgement . . . . . . . . . . . . . . . . . . 153
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 159 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 158
1. How to Read This Document 1. How to Read This Document
1.1. Organization of This Document 1.1. Organization of This Document
This document is written from the point of view of the implementor of This document is written from the point of view of the implementor of
an IMAP4rev2 client or server. Beyond the protocol overview in an IMAP4rev2 client or server. Beyond the protocol overview in
section 2, it is not optimized for someone trying to understand the section 2, it is not optimized for someone trying to understand the
operation of the protocol. The material in sections 3 through 5 operation of the protocol. The material in sections 3 through 5
provides the general context and definitions with which IMAP4rev2 provides the general context and definitions with which IMAP4rev2
skipping to change at page 6, line 38 skipping to change at page 6, line 41
IMAP4rev2 is designed to be upwards compatible from the [IMAP2] and IMAP4rev2 is designed to be upwards compatible from the [IMAP2] and
unpublished IMAP2bis protocols. IMAP4rev2 is largely compatible with unpublished IMAP2bis protocols. IMAP4rev2 is largely compatible with
the IMAP4rev1 protocol described in RFC 3501 and the IMAP4 protocol the IMAP4rev1 protocol described in RFC 3501 and the IMAP4 protocol
described in RFC 1730; the exception being in certain facilities described in RFC 1730; the exception being in certain facilities
added in RFC 1730 that proved problematic and were subsequently added in RFC 1730 that proved problematic and were subsequently
removed. In the course of the evolution of IMAP4rev2, some aspects removed. In the course of the evolution of IMAP4rev2, some aspects
in the earlier protocols have become obsolete. Obsolete commands, in the earlier protocols have become obsolete. Obsolete commands,
responses, and data formats which an IMAP4rev2 implementation can responses, and data formats which an IMAP4rev2 implementation can
encounter when used with an earlier implementation are described in encounter when used with an earlier implementation are described in
Appendix C and [IMAP-OBSOLETE]. Appendix D and [IMAP-OBSOLETE].
Other compatibility issues with IMAP2bis, the most common variant of Other compatibility issues with IMAP2bis, the most common variant of
the earlier protocol, are discussed in [IMAP-COMPAT]. A full the earlier protocol, are discussed in [IMAP-COMPAT]. A full
discussion of compatibility issues with rare (and presumed extinct) discussion of compatibility issues with rare (and presumed extinct)
variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is
primarily of historical interest. primarily of historical interest.
IMAP was originally developed for the older [RFC-822] standard, and IMAP was originally developed for the older [RFC-822] standard, and
as a consequence several fetch items in IMAP incorporate "RFC822" in as a consequence several fetch items in IMAP incorporate "RFC822" in
their name. In all cases, "RFC822" should be interpreted as a their name. In all cases, "RFC822" should be interpreted as a
skipping to change at page 9, line 36 skipping to change at page 9, line 36
mailbox; as each message is added to the mailbox it is assigned a mailbox; as each message is added to the mailbox it is assigned a
higher UID than the message(s) which were added previously. Unlike higher UID than the message(s) which were added previously. Unlike
message sequence numbers, unique identifiers are not necessarily message sequence numbers, unique identifiers are not necessarily
contiguous. contiguous.
The unique identifier of a message MUST NOT change during the The unique identifier of a message MUST NOT change during the
session, and SHOULD NOT change between sessions. Any change of session, and SHOULD NOT change between sessions. Any change of
unique identifiers between sessions MUST be detectable using the unique identifiers between sessions MUST be detectable using the
UIDVALIDITY mechanism discussed below. Persistent unique identifiers UIDVALIDITY mechanism discussed below. Persistent unique identifiers
are required for a client to resynchronize its state from a previous are required for a client to resynchronize its state from a previous
session with the server (e.g., disconnected or offline access session with the server (e.g., disconnected or offline access clients
clients); this is discussed further in [IMAP-DISC]. [IMAP-MODEL]); this is discussed further in [IMAP-DISC].
Associated with every mailbox are two 32-bit unsigned non-zero values Associated with every mailbox are two 32-bit unsigned non-zero values
which aid in unique identifier handling: the next unique identifier which aid in unique identifier handling: the next unique identifier
value (UIDNEXT) and the unique identifier validity value value (UIDNEXT) and the unique identifier validity value
(UIDVALIDITY). (UIDVALIDITY).
The next unique identifier value is the predicted value that will be The next unique identifier value is the predicted value that will be
assigned to a new message in the mailbox. Unless the unique assigned to a new message in the mailbox. Unless the unique
identifier validity also changes (see below), the next unique identifier validity also changes (see below), the next unique
identifier value MUST have the following two characteristics. First, identifier value MUST have the following two characteristics. First,
skipping to change at page 39, line 49 skipping to change at page 39, line 49
is the hierarchy delimiter character), removing "foo" MUST NOT remove is the hierarchy delimiter character), removing "foo" MUST NOT remove
"foo.bar". It is an error to attempt to delete a name that has "foo.bar". It is an error to attempt to delete a name that has
inferior hierarchical names and also has the \Noselect mailbox name inferior hierarchical names and also has the \Noselect mailbox name
attribute (see the description of the LIST response for more attribute (see the description of the LIST response for more
details). details).
It is permitted to delete a name that has inferior hierarchical names It is permitted to delete a name that has inferior hierarchical names
and does not have the \Noselect mailbox name attribute. If the and does not have the \Noselect mailbox name attribute. If the
server implementation does not permit deleting the name while server implementation does not permit deleting the name while
inferior hierarchical names exists then it SHOULD disallow the DELETE inferior hierarchical names exists then it SHOULD disallow the DELETE
command by returning tagged NO response or it MAY allow the DELETE command by returning a tagged NO response. The NO response SHOULD
command, but sets the \Noselect mailbox name attribute for that name. include the HASCHILDREN response code. Alternatively the server MAY
In any case, all messages in that mailbox are removed by the DELETE allow the DELETE command, but sets the \Noselect mailbox name
command. attribute for that name.
If the server returns OK response, all messages in that mailbox are
removed by the DELETE command.
The value of the highest-used unique identifier of the deleted The value of the highest-used unique identifier of the deleted
mailbox MUST be preserved so that a new mailbox created with the same mailbox MUST be preserved so that a new mailbox created with the same
name will not reuse the identifiers of the former incarnation, UNLESS name will not reuse the identifiers of the former incarnation, UNLESS
the new incarnation has a different unique identifier validity value. the new incarnation has a different unique identifier validity value.
See the description of the UID command for more detail. See the description of the UID command for more detail.
Examples: C: A682 LIST "" * Examples: C: A682 LIST "" *
S: * LIST () "/" blurdybloop S: * LIST () "/" blurdybloop
S: * LIST (\Noselect) "/" foo S: * LIST (\Noselect) "/" foo
skipping to change at page 41, line 31 skipping to change at page 41, line 34
server in which "/" is the hierarchy separator character SHOULD server in which "/" is the hierarchy separator character SHOULD
create baz/ and baz/rag/ if they do not already exist. create baz/ and baz/rag/ if they do not already exist.
The value of the highest-used unique identifier of the old mailbox The value of the highest-used unique identifier of the old mailbox
name MUST be preserved so that a new mailbox created with the same name MUST be preserved so that a new mailbox created with the same
name will not reuse the identifiers of the former incarnation, UNLESS name will not reuse the identifiers of the former incarnation, UNLESS
the new incarnation has a different unique identifier validity value. the new incarnation has a different unique identifier validity value.
See the description of the UID command for more detail. See the description of the UID command for more detail.
Renaming INBOX is permitted, and has special behavior. (Note that Renaming INBOX is permitted, and has special behavior. (Note that
some servers refuse renaming INBOX). It moves all messages in INBOX some servers disallow renaming INBOX, so clients need to be able to
to a new mailbox with the given name, leaving INBOX empty. If the handle such RENAME failing). It moves all messages in INBOX to a new
server implementation supports inferior hierarchical names of INBOX, mailbox with the given name, leaving INBOX empty. If the server
these are unaffected by a rename of INBOX. implementation supports inferior hierarchical names of INBOX, these
are unaffected by a rename of INBOX.
Examples: C: A682 LIST "" * Examples: C: A682 LIST "" *
S: * LIST () "/" blurdybloop S: * LIST () "/" blurdybloop
S: * LIST (\Noselect) "/" foo S: * LIST (\Noselect) "/" foo
S: * LIST () "/" foo/bar S: * LIST () "/" foo/bar
S: A682 OK LIST completed S: A682 OK LIST completed
C: A683 RENAME blurdybloop sarasoop C: A683 RENAME blurdybloop sarasoop
S: A683 OK RENAME completed S: A683 OK RENAME completed
C: A684 RENAME foo zowie C: A684 RENAME foo zowie
S: A684 OK RENAME Completed S: A684 OK RENAME Completed
skipping to change at page 44, line 29 skipping to change at page 44, line 29
\Marked or \Unmarked status or perform other processing; if each name \Marked or \Unmarked status or perform other processing; if each name
requires 1 second of processing, then a list of 1200 names would take requires 1 second of processing, then a list of 1200 names would take
20 minutes! 20 minutes!
The extended LIST command, originally introduced in [RFC5258], The extended LIST command, originally introduced in [RFC5258],
provides capabilities beyond that of the original IMAP LIST command. provides capabilities beyond that of the original IMAP LIST command.
The extended syntax is being used if one or more of the following The extended syntax is being used if one or more of the following
conditions is true: conditions is true:
1. if the first word after the command name begins with a 1. if the first word after the command name begins with a
parenthesis ("LIST selection options") parenthesis ("LIST selection options");
2. if the second word after the command name begins with a 2. if the second word after the command name begins with a
parenthesis ("multiple mailbox patterns") parenthesis;
3. if the LIST command has more than 2 parameters ("LIST return 3. if the LIST command has more than 2 parameters ("LIST return
options") options")
An empty ("" string) reference name argument indicates that the An empty ("" string) reference name argument indicates that the
mailbox name is interpreted as by SELECT. The returned mailbox names mailbox name is interpreted as by SELECT. The returned mailbox names
MUST match the supplied mailbox name pattern(s). A non-empty MUST match the supplied mailbox name pattern(s). A non-empty
reference name argument is the name of a mailbox or a level of reference name argument is the name of a mailbox or a level of
mailbox hierarchy, and indicates the context in which the mailbox mailbox hierarchy, and indicates the context in which the mailbox
name is interpreted. Clients SHOULD use the empty reference name is interpreted. Clients SHOULD use the empty reference
skipping to change at page 46, line 35 skipping to change at page 46, line 35
The character "*" is a wildcard, and matches zero or more characters The character "*" is a wildcard, and matches zero or more characters
at this position. The character "%" is similar to "*", but it does at this position. The character "%" is similar to "*", but it does
not match a hierarchy delimiter. If the "%" wildcard is the last not match a hierarchy delimiter. If the "%" wildcard is the last
character of a mailbox name argument, matching levels of hierarchy character of a mailbox name argument, matching levels of hierarchy
are also returned. If these levels of hierarchy are not also are also returned. If these levels of hierarchy are not also
selectable mailboxes, they are returned with the \Noselect mailbox selectable mailboxes, they are returned with the \Noselect mailbox
name attribute (see the description of the LIST response for more name attribute (see the description of the LIST response for more
details). details).
If multiple mailbox patterns are used (in the extended syntax), a Any syntactically valid pattern that is not accepted by a server for
mailbox matches if it matches at least one mailbox pattern. If a any reason MUST be silently ignored. I.e. it results in no LIST
mailbox matches more than one pattern, it is still only returned responses and the LIST command still returns tagged OK response.
once. Any syntactically valid pattern that is not accepted by a
server for any reason MUST be silently ignored.
Selection options tell the server to limit the mailbox names that are Selection options tell the server to limit the mailbox names that are
selected by the LIST operation. If selection options are used, the selected by the LIST operation. If selection options are used, the
mailboxes returned are those that match both the list of canonical mailboxes returned are those that match both the list of canonical
LIST patterns and the selection options. Unless a particular LIST patterns and the selection options. Unless a particular
selection option provides special rules, the selection options are selection option provides special rules, the selection options are
cumulative: a mailbox that matches the mailbox patterns is selected cumulative: a mailbox that matches the mailbox patterns is selected
only if it also matches all of the selection options. (An example of only if it also matches all of the selection options. (An example of
a selection option with special rules is the RECURSIVEMATCH option.) a selection option with special rules is the RECURSIVEMATCH option.)
skipping to change at page 54, line 36 skipping to change at page 54, line 20
S: * LIST () "/" "Fruit" S: * LIST () "/" "Fruit"
S: * LIST () "/" "Fruit/Apple" S: * LIST () "/" "Fruit/Apple"
S: * LIST () "/" "Fruit/Banana" S: * LIST () "/" "Fruit/Banana"
S: * LIST () "/" "Tofu" S: * LIST () "/" "Tofu"
S: * LIST () "/" "Vegetable" S: * LIST () "/" "Vegetable"
S: * LIST () "/" "Vegetable/Broccoli" S: * LIST () "/" "Vegetable/Broccoli"
S: * LIST () "/" "Vegetable/Corn" S: * LIST () "/" "Vegetable/Corn"
S: A01 OK done S: A01 OK done
2: In the next example, we will see the subscribed mailboxes. This 2: In the next example, we will see the subscribed mailboxes. This
is similar to, but not equivalent with, <LSUB "" "*">. Note is similar to, but not equivalent with now deprecated, <LSUB ""
"*"> (see [RFC3501] for more details on LSUB command). Note
that the mailbox called "Fruit/Peach" is subscribed to, but does that the mailbox called "Fruit/Peach" is subscribed to, but does
not actually exist (perhaps it was deleted while still not actually exist (perhaps it was deleted while still
subscribed). The "Fruit" mailbox is not subscribed to, but it subscribed). The "Fruit" mailbox is not subscribed to, but it
has two subscribed children. The "Vegetable" mailbox is has two subscribed children. The "Vegetable" mailbox is
subscribed and has two children; one of them is subscribed as subscribed and has two children; one of them is subscribed as
well. well.
C: A02 LIST (SUBSCRIBED) "" "*" C: A02 LIST (SUBSCRIBED) "" "*"
S: * LIST (\Marked \NoInferiors \Subscribed) "/" "inbox" S: * LIST (\Marked \NoInferiors \Subscribed) "/" "inbox"
S: * LIST (\Subscribed) "/" "Fruit/Banana" S: * LIST (\Subscribed) "/" "Fruit/Banana"
skipping to change at page 55, line 35 skipping to change at page 55, line 20
S: * LIST (\HasChildren) "/" "Fruit" S: * LIST (\HasChildren) "/" "Fruit"
S: * LIST (\HasNoChildren) "/" "Tofu" S: * LIST (\HasNoChildren) "/" "Tofu"
S: * LIST (\HasChildren) "/" "Vegetable" S: * LIST (\HasChildren) "/" "Vegetable"
S: * LIST (\Remote) "/" "Bread" S: * LIST (\Remote) "/" "Bread"
S: * LIST (\HasChildren \Remote) "/" "Meat" S: * LIST (\HasChildren \Remote) "/" "Meat"
S: A04 OK done S: A04 OK done
5: The following example also requests the server to include 5: The following example also requests the server to include
mailboxes that reside on another server. The server returns mailboxes that reside on another server. The server returns
information about all mailboxes that are subscribed. This is information about all mailboxes that are subscribed. This is
similar to the command <RLSUB "" "*">. We also see the use of similar to the command <RLSUB "" "*"> (see [RFC2193] for more
two selection options. details on RLSUB). We also see the use of two selection
options.
C: A05 LIST (REMOTE SUBSCRIBED) "" "*" C: A05 LIST (REMOTE SUBSCRIBED) "" "*"
S: * LIST (\Marked \NoInferiors \Subscribed) "/" "inbox" S: * LIST (\Marked \NoInferiors \Subscribed) "/" "inbox"
S: * LIST (\Subscribed) "/" "Fruit/Banana" S: * LIST (\Subscribed) "/" "Fruit/Banana"
S: * LIST (\Subscribed \NonExistent) "/" "Fruit/Peach" S: * LIST (\Subscribed \NonExistent) "/" "Fruit/Peach"
S: * LIST (\Subscribed) "/" "Vegetable" S: * LIST (\Subscribed) "/" "Vegetable"
S: * LIST (\Subscribed) "/" "Vegetable/Broccoli" S: * LIST (\Subscribed) "/" "Vegetable/Broccoli"
S: * LIST (\Remote \Subscribed) "/" "Bread" S: * LIST (\Remote \Subscribed) "/" "Bread"
S: A05 OK done S: A05 OK done
skipping to change at page 56, line 22 skipping to change at page 56, line 18
S: * LIST () "/" "Fruit/Apple" S: * LIST () "/" "Fruit/Apple"
S: * LIST (\Subscribed) "/" "Fruit/Banana" S: * LIST (\Subscribed) "/" "Fruit/Banana"
S: * LIST () "/" "Tofu" S: * LIST () "/" "Tofu"
S: * LIST (\Subscribed) "/" "Vegetable" S: * LIST (\Subscribed) "/" "Vegetable"
S: * LIST (\Subscribed) "/" "Vegetable/Broccoli" S: * LIST (\Subscribed) "/" "Vegetable/Broccoli"
S: * LIST () "/" "Vegetable/Corn" S: * LIST () "/" "Vegetable/Corn"
S: * LIST (\Remote \Subscribed) "/" "Bread" S: * LIST (\Remote \Subscribed) "/" "Bread"
S: * LIST (\Remote) "/" "Meat" S: * LIST (\Remote) "/" "Meat"
S: A06 OK done S: A06 OK done
7: In the following example, the client has specified multiple 7: The following example demonstrates the difference between the
mailbox patterns. Note that this example does not use the
mailbox hierarchy used in the previous examples.
C: BBB LIST "" ("INBOX" "Drafts" "Sent/%")
S: * LIST () "/" "INBOX"
S: * LIST (\NoInferiors) "/" "Drafts"
S: * LIST () "/" "Sent/March2004"
S: * LIST (\Marked) "/" "Sent/December2003"
S: * LIST () "/" "Sent/August2004"
S: BBB OK done
8: The following example demonstrates the difference between the
\HasChildren attribute and the CHILDINFO extended data item. \HasChildren attribute and the CHILDINFO extended data item.
Let's assume there is the following hierarchy: Let's assume there is the following hierarchy:
C: C01 LIST "" "*" C: C01 LIST "" "*"
S: * LIST (\Marked \NoInferiors) "/" "inbox" S: * LIST (\Marked \NoInferiors) "/" "inbox"
S: * LIST () "/" "Foo" S: * LIST () "/" "Foo"
S: * LIST () "/" "Foo/Bar" S: * LIST () "/" "Foo/Bar"
S: * LIST () "/" "Foo/Baz" S: * LIST () "/" "Foo/Baz"
S: * LIST () "/" "Moo" S: * LIST () "/" "Moo"
skipping to change at page 58, line 20 skipping to change at page 57, line 50
are subscribed. In that case, we see this result: are subscribed. In that case, we see this result:
C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) "" "%" RETURN (CHILDREN) C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) "" "%" RETURN (CHILDREN)
S: * LIST (\HasChildren \Subscribed) "/" "Foo" S: * LIST (\HasChildren \Subscribed) "/" "Foo"
S: * LIST (\HasNoChildren \Subscribed) "/" "Moo" S: * LIST (\HasNoChildren \Subscribed) "/" "Moo"
S: C04 OK done S: C04 OK done
(which means that the mailbox "Foo" has children, but none of (which means that the mailbox "Foo" has children, but none of
them is subscribed). them is subscribed).
9: The following example demonstrates that the CHILDINFO extended 8: The following example demonstrates that the CHILDINFO extended
data item is returned whether or not children mailboxes match data item is returned whether or not children mailboxes match
the canonical LIST pattern. the canonical LIST pattern.
Let's assume there is the following hierarchy: Let's assume there is the following hierarchy:
C: D01 LIST "" "*" C: D01 LIST "" "*"
S: * LIST (\Marked \NoInferiors) "/" "inbox" S: * LIST (\Marked \NoInferiors) "/" "inbox"
S: * LIST () "/" "foo2" S: * LIST () "/" "foo2"
S: * LIST () "/" "foo2/bar1" S: * LIST () "/" "foo2/bar1"
S: * LIST () "/" "foo2/bar2" S: * LIST () "/" "foo2/bar2"
skipping to change at page 59, line 50 skipping to change at page 59, line 32
S: * LIST (\Subscribed) "/" "eps2" ("CHILDINFO" ("SUBSCRIBED")) S: * LIST (\Subscribed) "/" "eps2" ("CHILDINFO" ("SUBSCRIBED"))
S: * LIST (\Subscribed) "/" "eps2/mamba" S: * LIST (\Subscribed) "/" "eps2/mamba"
S: * LIST (\Subscribed) "/" "qux2/bar2" S: * LIST (\Subscribed) "/" "qux2/bar2"
S: D03 OK done S: D03 OK done
The LIST responses for mailboxes "foo2", "baz2", and "eps2" The LIST responses for mailboxes "foo2", "baz2", and "eps2"
still have the CHILDINFO extended data item, even though this still have the CHILDINFO extended data item, even though this
information is redundant and the client can determine it by information is redundant and the client can determine it by
itself. itself.
10: The following example shows usage of extended syntax for mailbox 9: The following example shows usage of extended syntax for mailbox
pattern. It also demonstrates that the presence of the pattern. It also demonstrates that the presence of the
CHILDINFO extended data item doesn't necessarily imply CHILDINFO extended data item doesn't necessarily imply
\HasChildren. \HasChildren.
C: a1 LIST "" ("foo") C: a1 LIST "" ("foo")
S: * LIST () "/" foo S: * LIST () "/" foo
S: a1 OK done S: a1 OK done
C: a2 LIST (SUBSCRIBED) "" "foo/*" C: a2 LIST (SUBSCRIBED) "" "foo/*"
S: * LIST (\Subscribed \NonExistent) "/" foo/bar S: * LIST (\Subscribed \NonExistent) "/" foo/bar
S: a2 OK done S: a2 OK done
C: a3 LIST (SUBSCRIBED RECURSIVEMATCH) "" foo RETURN (CHILDREN) C: a3 LIST (SUBSCRIBED RECURSIVEMATCH) "" foo RETURN (CHILDREN)
S: * LIST (\HasNoChildren) "/" foo ("CHILDINFO" ("SUBSCRIBED")) S: * LIST (\HasNoChildren) "/" foo ("CHILDINFO" ("SUBSCRIBED"))
S: a3 OK done S: a3 OK done
11: The following example shows how a server that supports missing 10: The following example shows how a server that supports missing
mailbox hierarchy elements can signal to a client that didn't mailbox hierarchy elements can signal to a client that didn't
specify the RECURSIVEMATCH selection option that there is a specify the RECURSIVEMATCH selection option that there is a
child mailbox that matches the selection criteria. child mailbox that matches the selection criteria.
C: a1 LIST (REMOTE) "" * C: a1 LIST (REMOTE) "" *
S: * LIST () "/" music/rock S: * LIST () "/" music/rock
S: * LIST (\Remote) "/" also/jazz S: * LIST (\Remote) "/" also/jazz
S: a1 OK done S: a1 OK done
C: a2 LIST () "" % C: a2 LIST () "" %
skipping to change at page 60, line 46 skipping to change at page 60, line 29
S: a3 OK done S: a3 OK done
C: a3.1 LIST "" (% music/rock) C: a3.1 LIST "" (% music/rock)
S: * LIST () "/" music/rock S: * LIST () "/" music/rock
S: a3.1 OK done S: a3.1 OK done
Because "music/rock" is the only mailbox under "music", there's Because "music/rock" is the only mailbox under "music", there's
no need for the server to also return "music". However clients no need for the server to also return "music". However clients
must handle both cases. must handle both cases.
12: The following examples show use of STATUS return option. 11: The following examples show use of STATUS return option.
C: A01 LIST "" % RETURN (STATUS (MESSAGES UNSEEN)) C: A01 LIST "" % RETURN (STATUS (MESSAGES UNSEEN))
S: * LIST () "." "INBOX" S: * LIST () "." "INBOX"
S: * STATUS "INBOX" (MESSAGES 17 UNSEEN 16) S: * STATUS "INBOX" (MESSAGES 17 UNSEEN 16)
S: * LIST () "." "foo" S: * LIST () "." "foo"
S: * STATUS "foo" (MESSAGES 30 UNSEEN 29) S: * STATUS "foo" (MESSAGES 30 UNSEEN 29)
S: * LIST (\NoSelect) "." "bar" S: * LIST (\NoSelect) "." "bar"
S: A01 OK List completed. S: A01 OK List completed.
The "bar" mailbox isn't selectable, so it has no STATUS reply. The "bar" mailbox isn't selectable, so it has no STATUS reply.
skipping to change at page 109, line 30 skipping to change at page 108, line 30
password are valid. An IMAP client MUST NOT issue the LOGIN command password are valid. An IMAP client MUST NOT issue the LOGIN command
if the server advertises the LOGINDISABLED capability. if the server advertises the LOGINDISABLED capability.
Other capability names indicate that the server supports an Other capability names indicate that the server supports an
extension, revision, or amendment to the IMAP4rev2 protocol. Server extension, revision, or amendment to the IMAP4rev2 protocol. Server
responses MUST conform to this document until the client issues a responses MUST conform to this document until the client issues a
command that uses the associated capability. command that uses the associated capability.
Capability names MUST either begin with "X" or be informational, Capability names MUST either begin with "X" or be informational,
experimental or standards-track IMAP4rev2 extensions, revisions, or experimental or standards-track IMAP4rev2 extensions, revisions, or
amendments registered with IANA. A server MUST NOT offer amendments registered with IANA. A server SHOULD NOT offer
unregistered or non-standard capability names, unless such names are unregistered or non-standard capability names, unless such names are
prefixed with an "X". prefixed with an "X".
Client implementations SHOULD NOT require any capability name other Client implementations SHOULD NOT require any capability name other
than "IMAP4rev2", and MUST ignore any unknown capability names. than "IMAP4rev2", and MUST ignore any unknown capability names.
A server MAY send capabilities automatically, by using the CAPABILITY A server MAY send capabilities automatically, by using the CAPABILITY
response code in the initial PREAUTH or OK responses, and by sending response code in the initial PREAUTH or OK responses, and by sending
an updated CAPABILITY response code in the tagged OK response as part an updated CAPABILITY response code in the tagged OK response as part
of a successful authentication. It is unnecessary for a client to of a successful authentication. It is unnecessary for a client to
skipping to change at page 113, line 17 skipping to change at page 112, line 17
hierarchy exists; the name is a "flat" name. hierarchy exists; the name is a "flat" name.
The name represents an unambiguous left-to-right hierarchy, and MUST The name represents an unambiguous left-to-right hierarchy, and MUST
be valid for use as a reference in LIST command. Unless \Noselect or be valid for use as a reference in LIST command. Unless \Noselect or
\NonExistent is indicated, the name MUST also be valid as an argument \NonExistent is indicated, the name MUST also be valid as an argument
for commands, such as SELECT, that accept mailbox names. for commands, such as SELECT, that accept mailbox names.
The name might be followed by an OPTIONAL series of extended fields, The name might be followed by an OPTIONAL series of extended fields,
a parenthesized list of tagged data (also referred to as "extended a parenthesized list of tagged data (also referred to as "extended
data item"). The first element of an extended field is a tag, which data item"). The first element of an extended field is a tag, which
identifies the type of data. The server MAY return data in the identifies the type of data. [RFC5258] specified requirements on tag
extended fields that was not directly solicited by the client in the registration, in particular it said that "Tags MUST be registered
corresponding LIST command. For example, the client can enable extra with IANA". This document doesn't change that. See Section 9.5 of
extended fields by using another IMAP extension that make use of the [RFC5258] for the registration template. The server MAY return data
extended LIST responses. The client MUST ignore all extended fields in the extended fields that was not directly solicited by the client
it doesn't recognize. in the corresponding LIST command. For example, the client can
enable extra extended fields by using another IMAP extension that
make use of the extended LIST responses. The client MUST ignore all
extended fields it doesn't recognize.
Example: S: * LIST (\Noselect) "/" ~/Mail/foo Example: S: * LIST (\Noselect) "/" ~/Mail/foo
Example: S: * LIST (\Marked) ":" Tables (tablecloth (("edge" "lacy") Example: S: * LIST (\Marked) ":" Tables (tablecloth (("edge" "lacy")
("color" "red")) Sample "text") ("color" "red")) Sample "text")
S: * LIST () ":" Tables:new (tablecloth ("edge" "lacy") S: * LIST () ":" Tables:new (tablecloth ("edge" "lacy")
Sample ("text" "more text")) Sample ("text" "more text"))
7.2.4. NAMESPACE Response 7.2.4. NAMESPACE Response
skipping to change at page 134, line 32 skipping to change at page 133, line 40
partial-range = number ["." nz-number] partial-range = number ["." nz-number]
; Copied from RFC 5092 (IMAP URL) ; Copied from RFC 5092 (IMAP URL)
partial = "<" number "." nz-number ">" partial = "<" number "." nz-number ">"
; Partial FETCH request. 0-based offset of ; Partial FETCH request. 0-based offset of
; the first octet, followed by the number of octets ; the first octet, followed by the number of octets
; in the fragment. ; in the fragment.
password = astring password = astring
patterns = "(" list-mailbox *(SP list-mailbox) ")" patterns = "(" list-mailbox ")"
; [RFC5258] supports multiple patterns,
; but this document only requires one
; to be supported.
; If the server is also implementing
; [RFC5258], "patterns" syntax from that
; document must be followed.
quoted = DQUOTE *QUOTED-CHAR DQUOTE quoted = DQUOTE *QUOTED-CHAR DQUOTE
QUOTED-CHAR = <any TEXT-CHAR except quoted-specials> / QUOTED-CHAR = <any TEXT-CHAR except quoted-specials> /
"\" quoted-specials / UTF8-2 / UTF8-3 / UTF8-4 "\" quoted-specials / UTF8-2 / UTF8-3 / UTF8-4
quoted-specials = DQUOTE / "\" quoted-specials = DQUOTE / "\"
rename = "RENAME" SP mailbox SP mailbox rename = "RENAME" SP mailbox SP mailbox
; Use of INBOX as a destination gives a NO error ; Use of INBOX as a destination gives a NO error
skipping to change at page 148, line 35 skipping to change at page 147, line 39
attributes/imap-mailbox-name-attributes.xhtml>. attributes/imap-mailbox-name-attributes.xhtml>.
[CHARSET-REG] [CHARSET-REG]
IANA, "Character Set Registrations", May 2015, IANA, "Character Set Registrations", May 2015,
<https://www.iana.org/assignments/charset-reg/charset- <https://www.iana.org/assignments/charset-reg/charset-
reg.xhtml>. reg.xhtml>.
13.3. Informative References (historical aspects of IMAP and related 13.3. Informative References (historical aspects of IMAP and related
protocols) protocols)
[RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION
4rev1", RFC 3501, DOI 10.17487/RFC3501, March 2003,
<https://www.rfc-editor.org/info/rfc3501>.
[IMAP-COMPAT] [IMAP-COMPAT]
Crispin, M., "IMAP4 Compatibility with IMAP2bis", Crispin, M., "IMAP4 Compatibility with IMAP2bis",
RFC 2061, December 1996, RFC 2061, December 1996,
<http://www.rfc-editor.org/info/rfc2061>. <http://www.rfc-editor.org/info/rfc2061>.
[IMAP-HISTORICAL] [IMAP-HISTORICAL]
Crispin, M., "IMAP4 Compatibility with IMAP2 and Crispin, M., "IMAP4 Compatibility with IMAP2 and
IMAP2bis", RFC 1732, December 1994, IMAP2bis", RFC 1732, December 1994,
<http://www.rfc-editor.org/info/rfc1732>. <http://www.rfc-editor.org/info/rfc1732>.
skipping to change at page 149, line 24 skipping to change at page 148, line 33
Appendix A. Backward compatibility with IMAP4rev1 Appendix A. Backward compatibility with IMAP4rev1
An implementation that wants to remain compatible with IMAP4rev1 can An implementation that wants to remain compatible with IMAP4rev1 can
advertise both IMAP4rev1 and IMAP4rev2 in its CAPABILITY response/ advertise both IMAP4rev1 and IMAP4rev2 in its CAPABILITY response/
response code. While some IMAP4rev1 responses were removed in response code. While some IMAP4rev1 responses were removed in
IMAP4rev2, their presence will not break IMAP4rev2-only clients. IMAP4rev2, their presence will not break IMAP4rev2-only clients.
If both IMAP4rev1 and IMAP4rev2 are advertised, an IMAP client that If both IMAP4rev1 and IMAP4rev2 are advertised, an IMAP client that
wants to use IMAP4rev2 MUST issue an "ENABLE IMAP4rev2" command. wants to use IMAP4rev2 MUST issue an "ENABLE IMAP4rev2" command.
Servers advertising both IMAP4rev1 and IMAP4rev2 SHOULD NOT generate Servers advertising both IMAP4rev1 and IMAP4rev2 MUST NOT generate
UTF-8 quoted strings unless the client has issued "ENABLE IMAP4rev2". UTF-8 quoted strings unless the client has issued "ENABLE IMAP4rev2".
Consider implementation of mechanisms described or referenced in Consider implementation of mechanisms described or referenced in
[IMAP-UTF-8] to achieve this goal. [IMAP-UTF-8] to achieve this goal.
Servers advertising both IMAP4rev1 and IMAP4rev2, and clients Servers advertising both IMAP4rev1 and IMAP4rev2, and clients
intending to be compatible with IMAP4rev1 servers MUST be compatible intending to be compatible with IMAP4rev1 servers MUST be compatible
with the international mailbox naming convention described in the with the international mailbox naming convention described in the
following subsection. following subsection.
A.1. Mailbox International Naming Convention for compatibility with A.1. Mailbox International Naming Convention for compatibility with
skipping to change at page 151, line 28 skipping to change at page 150, line 34
Appendix B. Backward compatibility with BINARY extension Appendix B. Backward compatibility with BINARY extension
IMAP4rev2 is incorporates subset of functionality provided by the IMAP4rev2 is incorporates subset of functionality provided by the
BINARY extension [RFC3516], in particular it includes additional BINARY extension [RFC3516], in particular it includes additional
FETCH items (BINARY, BINARY.PEEK and BINARY.SIZE), but not extensions FETCH items (BINARY, BINARY.PEEK and BINARY.SIZE), but not extensions
to the APPEND command. IMAP4rev2 implementations that supports full to the APPEND command. IMAP4rev2 implementations that supports full
RFC 3516 functionality need to also advertise the BINARY token in the RFC 3516 functionality need to also advertise the BINARY token in the
CAPABILITY response. CAPABILITY response.
Appendix C. Changes from RFC 3501 / IMAP4rev1 Appendix C. Backward compatibility with LIST-EXTENDED extension
IMAP4rev2 is incorporates most of functionality provided by the LIST-
EXTENDED extension [RFC5258]. In particular, multiple mailbox
patterns syntax is not supported in IMAP4rev2, unless LIST-EXTENDED
capability is also advertised in CAPABILITY response/response code.
Appendix D. Changes from RFC 3501 / IMAP4rev1
The following is the plan for remaining changes. The plan might The following is the plan for remaining changes. The plan might
change over time. change over time.
1. Revise IANA registration of IMAP extensions and give advice on 1. Revise IANA registration of IMAP extensions and give advice on
use of "X-" convention. use of "X-" convention.
2. Allow word-based searching (as per Chris Newman)? Need to 2. Allow word-based searching (as per Chris Newman)? Need to
discuss header field search, where exact/substring match is still discuss header field search, where exact/substring match is still
required for interoperability. required for interoperability.
3. Add a section on other recommended extensions? 3. Add a section on other recommended extensions?
The following changes were already done: The following changes were already done:
1. Fold in the following extensions/RFC: RFC 5530 (IMAP Response 1. Fold in the following extensions/RFC: RFC 5530 (IMAP Response
Codes), UIDPLUS, ENABLE, ESEARCH, SPECIAL-USE (list of new Codes), UIDPLUS, ENABLE, ESEARCH, SPECIAL-USE (list of new
mailbox attributes is done), LITERAL-, NAMESPACE, SASL-IR, IDLE, mailbox attributes), LITERAL-, NAMESPACE, SASL-IR, LIST-STATUS,
MOVE. SEARCHRES, IDLE, MOVE.
2. Add CLOSED response code (from CONDSTORE). 2. Add CLOSED response code (from CONDSTORE).
3. Add support for $Phishing, $Junk, $NonJunk, $MDNSent and 3. Add support for $Phishing, $Junk, $NonJunk, $MDNSent and
$Forwarded IMAP keywords. Add more examples showing their use? $Forwarded IMAP keywords. Add more examples showing their use?
4. Require all unsolicited FETCH updates to include UID. 4. Require all unsolicited FETCH updates to include UID.
5. Update recommendations on TLS ciphers to match UTA WG work (as 5. Update recommendations on TLS ciphers to match UTA WG work (as
per RFC 8314, RFC 7525 and RFC 7817). per RFC 8314, RFC 7525 and RFC 7817).
6. Possibly fold in the following extensions/RFC: Base LIST-EXTENDED 6. Fold in the following extensions/RFC: Base LIST-EXTENDED syntax
syntax plus deprecate LSUB (replace it with LIST \Subscribed) plus deprecate LSUB (replace it with LIST \Subscribed) minus the
minus the requirement to support multiple list patterns, STATUS- requirement to support multiple list patterns, BINARY (only the
in-LIST, SEARCHRES, BINARY (only the FETCH changes on leaf body FETCH changes on leaf body part and make APPEND related ones
part and make APPEND related ones optional. See the mailing list optional. See the mailing list discussion).
discussion).
7. Add STATUS SIZE (total mailbox size). Add STATUS DELETED (number 7. Add STATUS SIZE (total mailbox size). Add STATUS DELETED (number
of messages with \Deleted flag set). of messages with \Deleted flag set).
8. Drop UTF-7, all mailboxes are always in UTF-8. 8. Drop UTF-7, all mailboxes are always in UTF-8.
The following changes since RFC 3501 were done so far: The following changes since RFC 3501 were done so far:
1. Folded in IMAP UNSELECT (RFC 3691), UIDPLUS (RFC 4315), ESEARCH 1. Folded in IMAP UNSELECT (RFC 3691), UIDPLUS (RFC 4315), ESEARCH
(RFC 4731), ENABLE (RFC 5161), IDLE (RFC 2177), SASL-IR (RFC (RFC 4731), SEARCHRES (RFC 5182), ENABLE (RFC 5161), IDLE (RFC
4959), LIST-STATUS (RFC 5819) and MOVE (RFC 6851) extensions. 2177), SASL-IR (RFC 4959), LIST-STATUS (RFC 5819) and MOVE (RFC
Also folded RFC 5530 and FETCH side of the BINARY extension (RFC 6851) extensions. Also folded RFC 5530 and FETCH side of the
3516). BINARY extension (RFC 3516).
2. Clarified that server should decode parameter value 2. Clarified that server should decode parameter value
continuations as described in [RFC2231]. This requirement was continuations as described in [RFC2231]. This requirement was
hidden in RFC 2231 itself. hidden in RFC 2231 itself.
3. SEARCH command now requires to return ESEARCH response (SEARCH 3. SEARCH command now requires to return ESEARCH response (SEARCH
response is now deprecated). response is now deprecated).
4. Added CLOSED response code from RFC 7162. SELECT/EXAMINE when a 4. Added CLOSED response code from RFC 7162. SELECT/EXAMINE when a
mailbox is already selected now require for the CLOSED response mailbox is already selected now require for the CLOSED response
skipping to change at page 153, line 37 skipping to change at page 152, line 48
16. LSUB command was deprecated. Clients should use LIST 16. LSUB command was deprecated. Clients should use LIST
(SUBSCRIBED) instead. (SUBSCRIBED) instead.
17. resp-text ABNF non terminal was updated to allow for empty text. 17. resp-text ABNF non terminal was updated to allow for empty text.
18. IDLE command can now return updates not related to the currently 18. IDLE command can now return updates not related to the currently
selected mailbox state. selected mailbox state.
19. All unsolicited FETCH updates are required to include UID. 19. All unsolicited FETCH updates are required to include UID.
Appendix D. Acknowledgement 20. Clarified that client implementations MUST ignore response codes
that they do not recognize. (Change from a SHOULD to a MUST.)
Appendix E. Acknowledgement
Earlier versions of this document were edited by Mark Crispin. Earlier versions of this document were edited by Mark Crispin.
Sadly, he is no longer available to help with this work. Editors of Sadly, he is no longer available to help with this work. Editors of
this revisions are hoping that Mark would have approved. this revisions are hoping that Mark would have approved.
Chris Newman has contributed text on I18N and use of UTF-8 in Chris Newman has contributed text on I18N and use of UTF-8 in
messages and mailbox names. messages and mailbox names.
Thank you to Tony Hansen for helping with the index generation. Thank you to Tony Hansen for helping with the index generation.
Thank you to Timo Sirainen, Bron Gondwana and Arnt Gulbrandsen for Thank you to Timo Sirainen, Bron Gondwana and Arnt Gulbrandsen for
skipping to change at page 154, line 18 skipping to change at page 153, line 35
Index Index
$ $
$Forwarded (predefined flag) 12 $Forwarded (predefined flag) 12
$Junk (predefined flag) 12 $Junk (predefined flag) 12
$MDNSent (predefined flag) 12 $MDNSent (predefined flag) 12
$NotJunk (predefined flag) 12 $NotJunk (predefined flag) 12
$Phishing (predefined flag) 12 $Phishing (predefined flag) 12
+ +
+FLAGS <flag list> 91 +FLAGS <flag list> 90
+FLAGS.SILENT <flag list> 91 +FLAGS.SILENT <flag list> 90
- -
-FLAGS <flag list> 91 -FLAGS <flag list> 90
-FLAGS.SILENT <flag list> 91 -FLAGS.SILENT <flag list> 90
A A
ALERT (response code) 98 ALERT (response code) 97
ALL (fetch item) 87 ALL (fetch item) 86
ALL (search key) 77 ALL (search key) 76
ALL (search result option) 75 ALL (search result option) 74
ALREADYEXISTS (response code) 98 ALREADYEXISTS (response code) 97
ANSWERED (search key) 77 ANSWERED (search key) 76
APPEND (command) 67 APPEND (command) 66
APPENDUID (response code) 98 APPENDUID (response code) 97
AUTHENTICATE (command) 29 AUTHENTICATE (command) 29
AUTHENTICATIONFAILED (response code) 99 AUTHENTICATIONFAILED (response code) 98
AUTHORIZATIONFAILED (response code) 99 AUTHORIZATIONFAILED (response code) 98
B B
BAD (response) 107 BAD (response) 106
BADCHARSET (response code) 100 BADCHARSET (response code) 99
BCC <string> (search key) 77 BCC <string> (search key) 76
BEFORE <date> (search key) 77 BEFORE <date> (search key) 76
BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 87 BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 86
BINARY.SIZE[<section-binary>] (fetch item) 87 BINARY.SIZE[<section-binary>] (fetch item) 86
BINARY.SIZE[<section-binary>] (fetch result) 117 BINARY.SIZE[<section-binary>] (fetch result) 116
BINARY[<section-binary>]<<number>> (fetch result) 116 BINARY[<section-binary>]<<number>> (fetch result) 115
BINARY[<section-binary>]<<partial>> (fetch item) 87 BINARY[<section-binary>]<<partial>> (fetch item) 86
BODY (fetch item) 88 BODY (fetch item) 87
BODY (fetch result) 117 BODY (fetch result) 116
BODY <string> (search key) 77 BODY <string> (search key) 76
BODY.PEEK[<section>]<<partial>> (fetch item) 90 BODY.PEEK[<section>]<<partial>> (fetch item) 89
BODYSTRUCTURE (fetch item) 90 BODYSTRUCTURE (fetch item) 89
BODYSTRUCTURE (fetch result) 118 BODYSTRUCTURE (fetch result) 117
BODY[<section>]<<origin octet>> (fetch result) 117 BODY[<section>]<<origin octet>> (fetch result) 116
BODY[<section>]<<partial>> (fetch item) 88 BODY[<section>]<<partial>> (fetch item) 87
BYE (response) 107 BYE (response) 106
Body Structure (message attribute) 14 Body Structure (message attribute) 14
C C
CANNOT (response code) 100 CANNOT (response code) 99
CAPABILITY (command) 25 CAPABILITY (command) 25
CAPABILITY (response code) 100 CAPABILITY (response code) 99
CAPABILITY (response) 108 CAPABILITY (response) 107
CC <string> (search key) 77 CC <string> (search key) 76
CLIENTBUG (response code) 100 CLIENTBUG (response code) 99
CLOSE (command) 72 CLOSE (command) 71
CLOSED (response code) 100 CLOSED (response code) 99
CONTACTADMIN (response code) 101 CONTACTADMIN (response code) 100
COPY (command) 91 COPY (command) 90
COPYUID (response code) 101 COPYUID (response code) 100
CORRUPTION (response code) 101 CORRUPTION (response code) 100
COUNT (search result option) 75 COUNT (search result option) 74
CREATE (command) 38 CREATE (command) 38
D D
DELETE (command) 39 DELETE (command) 39
DELETED (search key) 77 DELETED (search key) 76
DELETED (status item) 67 DELETED (status item) 66
DRAFT (search key) 77 DRAFT (search key) 76
E E
ENABLE (command) 33 ENABLE (command) 33
ENVELOPE (fetch item) 90 ENVELOPE (fetch item) 89
ENVELOPE (fetch result) 120 ENVELOPE (fetch result) 119
ESEARCH (response) 114 ESEARCH (response) 113
EXAMINE (command) 37 EXAMINE (command) 37
EXPIRED (response code) 102 EXPIRED (response code) 101
EXPUNGE (command) 73 EXPUNGE (command) 72
EXPUNGE (response) 115 EXPUNGE (response) 114
EXPUNGEISSUED (response code) 102 EXPUNGEISSUED (response code) 101
Envelope Structure (message attribute) 14 Envelope Structure (message attribute) 14
F F
FAST (fetch item) 87 FAST (fetch item) 86
FETCH (command) 86 FETCH (command) 85
FETCH (response) 116 FETCH (response) 115
FLAGGED (search key) 77 FLAGGED (search key) 76
FLAGS (fetch item) 90 FLAGS (fetch item) 89
FLAGS (fetch result) 121 FLAGS (fetch result) 121
FLAGS (response) 114 FLAGS (response) 113
FLAGS <flag list> (store command data item) 91 FLAGS <flag list> (store command data item) 90
FLAGS.SILENT <flag list> (store command data item) 91 FLAGS.SILENT <flag list> (store command data item) 90
FROM <string> (search key) 77 FROM <string> (search key) 76
FULL (fetch item) 87 FULL (fetch item) 86
Flags (message attribute) 11 Flags (message attribute) 11
H H
HASCHILDREN (response code) 102 HASCHILDREN (response code) 101
HEADER (part specifier) 88 HEADER (part specifier) 87
HEADER <field-name> <string> (search key) 77 HEADER <field-name> <string> (search key) 76
HEADER.FIELDS (part specifier) 88 HEADER.FIELDS (part specifier) 87
HEADER.FIELDS.NOT (part specifier) 88 HEADER.FIELDS.NOT (part specifier) 87
I I
IDLE (command) 70 IDLE (command) 69
INTERNALDATE (fetch item) 90 INTERNALDATE (fetch item) 89
INTERNALDATE (fetch result) 121 INTERNALDATE (fetch result) 121
INUSE (response code) 102 INUSE (response code) 101
Internal Date (message attribute) 13 Internal Date (message attribute) 13
K K
KEYWORD <flag> (search key) 78 KEYWORD <flag> (search key) 77
Keyword (type of flag) 12 Keyword (type of flag) 12
L L
LARGER <n> (search key) 78 LARGER <n> (search key) 77
LIMIT (response code) 103 LIMIT (response code) 102
LIST (command) 43 LIST (command) 43
LIST (response) 109 LIST (response) 108
LOGOUT (command) 27 LOGOUT (command) 27
M M
MAX (search result option) 75 MAX (search result option) 74
MAY (specification requirement term) 5 MAY (specification requirement term) 5
MESSAGES (status item) 67 MESSAGES (status item) 66
MIME (part specifier) 89 MIME (part specifier) 88
MIN (search result option) 75 MIN (search result option) 74
MOVE (command) 92 MOVE (command) 91
MUST (specification requirement term) 5 MUST (specification requirement term) 5
MUST NOT (specification requirement term) 5 MUST NOT (specification requirement term) 5
Message Sequence Number (message attribute) 11 Message Sequence Number (message attribute) 11
N N
NAMESPACE (command) 61 NAMESPACE (command) 61
NAMESPACE (response) 113 NAMESPACE (response) 112
NO (response) 106 NO (response) 105
NONEXISTENT (response code) 103 NONEXISTENT (response code) 102
NOOP (command) 26 NOOP (command) 26
NOPERM (response code) 103 NOPERM (response code) 102
NOT <search-key> (search key) 78 NOT <search-key> (search key) 77
NOT RECOMMENDED (specification requirement term) 5 NOT RECOMMENDED (specification requirement term) 5
O O
OK (response) 106 OK (response) 105
ON <date> (search key) 78 ON <date> (search key) 77
OPTIONAL (specification requirement term) 5 OPTIONAL (specification requirement term) 5
OR <search-key1> <search-key2> (search key) 78 OR <search-key1> <search-key2> (search key) 77
OVERQUOTA (response code) 103 OVERQUOTA (response code) 102
P P
PARSE (response code) 103 PARSE (response code) 102
PERMANENTFLAGS (response code) 104 PERMANENTFLAGS (response code) 103
PREAUTH (response) 107 PREAUTH (response) 106
PRIVACYREQUIRED (response code) 104 PRIVACYREQUIRED (response code) 103
Permanent Flag (class of flag) 13 Permanent Flag (class of flag) 13
Predefined keywords 12 Predefined keywords 12
R R
READ-ONLY (response code) 104 READ-ONLY (response code) 103
READ-WRITE (response code) 104 READ-WRITE (response code) 103
RECOMMENDED (specification requirement term) 5 RECOMMENDED (specification requirement term) 5
RENAME (command) 40 RENAME (command) 40
REQUIRED (specification requirement term) 5 REQUIRED (specification requirement term) 5
RFC822.SIZE (fetch item) 90 RFC822.SIZE (fetch item) 89
RFC822.SIZE (fetch result) 122 RFC822.SIZE (fetch result) 121
S S
SAVE (search result option) 75 SAVE (search result option) 74
SEARCH (command) 74 SEARCH (command) 73
SEEN (search key) 78 SEEN (search key) 77
SELECT (command) 35 SELECT (command) 35
SENTBEFORE <date> (search key) 78 SENTBEFORE <date> (search key) 77
SENTON <date> (search key) 78 SENTON <date> (search key) 77
SENTSINCE <date> (search key) 78 SENTSINCE <date> (search key) 77
SERVERBUG (response code) 104 SERVERBUG (response code) 103
SHOULD (specification requirement term) 5 SHOULD (specification requirement term) 5
SHOULD NOT (specification requirement term) 5 SHOULD NOT (specification requirement term) 5
SINCE <date> (search key) 78 SINCE <date> (search key) 77
SIZE (status item) 67 SIZE (status item) 66
SMALLER <n> (search key) 78 SMALLER <n> (search key) 77
STARTTLS (command) 28 STARTTLS (command) 28
STATUS (command) 66 STATUS (command) 65
STATUS (response) 113 STATUS (response) 113
STORE (command) 90 STORE (command) 89
SUBJECT <string> (search key) 78 SUBJECT <string> (search key) 77
SUBSCRIBE (command) 42 SUBSCRIBE (command) 42
Session Flag (class of flag) 13 Session Flag (class of flag) 13
System Flag (type of flag) 11 System Flag (type of flag) 11
T T
TEXT (part specifier) 88 TEXT (part specifier) 87
TEXT <string> (search key) 78 TEXT <string> (search key) 77
TO <string> (search key) 78 TO <string> (search key) 77
TRYCREATE (response code) 105 TRYCREATE (response code) 104
U U
UID (command) 94 UID (command) 93
UID (fetch item) 90 UID (fetch item) 89
UID (fetch result) 122 UID (fetch result) 121
UID <sequence set> (search key) 79 UID <sequence set> (search key) 78
UIDNEXT (response code) 105 UIDNEXT (response code) 104
UIDNEXT (status item) 67 UIDNEXT (status item) 66
UIDNOTSTICKY (response code) 105 UIDNOTSTICKY (response code) 104
UIDVALIDITY (response code) 105 UIDVALIDITY (response code) 104
UIDVALIDITY (status item) 67 UIDVALIDITY (status item) 66
UNANSWERED (search key) 79 UNANSWERED (search key) 78
UNAVAILABLE (response code) 105 UNAVAILABLE (response code) 104
UNDELETED (search key) 79 UNDELETED (search key) 78
UNDRAFT (search key) 79 UNDRAFT (search key) 78
UNFLAGGED (search key) 79 UNFLAGGED (search key) 78
UNKEYWORD <flag> (search key) 79 UNKEYWORD <flag> (search key) 78
UNKNOWN-CTE (response code) 106 UNKNOWN-CTE (response code) 105
UNSEEN (search key) 79 UNSEEN (search key) 78
UNSEEN (status item) 67 UNSEEN (status item) 66
UNSELECT (command) 73 UNSELECT (command) 72
UNSUBSCRIBE (command) 43 UNSUBSCRIBE (command) 43
Unique Identifier (UID) (message attribute) 9 Unique Identifier (UID) (message attribute) 9
X X
X<atom> (command) 96 X<atom> (command) 95
[ [
[RFC-5322] Size (message attribute) 13 [RFC-5322] Size (message attribute) 13
\ \
\All (mailbox name attribute) 111 \All (mailbox name attribute) 110
\Answered (system flag) 11 \Answered (system flag) 11
\Archive (mailbox name attribute) 111 \Archive (mailbox name attribute) 110
\Deleted (system flag) 12 \Deleted (system flag) 12
\Draft (system flag) 12 \Draft (system flag) 12
\Drafts (mailbox name attribute) 112 \Drafts (mailbox name attribute) 111
\Flagged (mailbox name attribute) 112 \Flagged (mailbox name attribute) 111
\Flagged (system flag) 11 \Flagged (system flag) 11
\HasChildren (mailbox name attribute) 110 \HasChildren (mailbox name attribute) 109
\HasNoChildren (mailbox name attribute) 111 \HasNoChildren (mailbox name attribute) 110
\Junk (mailbox name attribute) 112 \Junk (mailbox name attribute) 111
\Marked (mailbox name attribute) 111 \Marked (mailbox name attribute) 110
\Noinferiors (mailbox name attribute) 110 \Noinferiors (mailbox name attribute) 109
\NonExistent (mailbox name attribute) 110 \NonExistent (mailbox name attribute) 109
\Noselect (mailbox name attribute) 110 \Noselect (mailbox name attribute) 109
\Recent (system flag) 12 \Recent (system flag) 12
\Remote (mailbox name attribute) 111 \Remote (mailbox name attribute) 110
\Seen (system flag) 11 \Seen (system flag) 11
\Sent (mailbox name attribute) 112 \Sent (mailbox name attribute) 111
\Subscribed (mailbox name attribute) 111 \Subscribed (mailbox name attribute) 110
\Trash (mailbox name attribute) 112 \Trash (mailbox name attribute) 111
\Unmarked (mailbox name attribute) 111 \Unmarked (mailbox name attribute) 110
Authors' Addresses Authors' Addresses
Alexey Melnikov (editor) Alexey Melnikov (editor)
Isode Ltd Isode Ltd
14 Castle Mews 14 Castle Mews
Hampton, Middlesex TW12 2NP Hampton, Middlesex TW12 2NP
UK UK
Email: Alexey.Melnikov@isode.com Email: Alexey.Melnikov@isode.com
 End of changes. 75 change blocks. 
266 lines changed or deleted 281 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/