draft-ietf-extra-imap4rev2-09.txt   draft-ietf-extra-imap4rev2-10.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 Huawei Technologies Intended status: Standards Track Huawei Technologies
Expires: May 27, 2020 November 24, 2019 Expires: May 29, 2020 November 26, 2019
INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev2 INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev2
draft-ietf-extra-imap4rev2-09 draft-ietf-extra-imap4rev2-10
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 May 27, 2020. This Internet-Draft will expire on May 29, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 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 35 skipping to change at page 3, line 35
6.1.1. CAPABILITY Command . . . . . . . . . . . . . . . . . 24 6.1.1. CAPABILITY Command . . . . . . . . . . . . . . . . . 24
6.1.2. NOOP Command . . . . . . . . . . . . . . . . . . . . 25 6.1.2. NOOP Command . . . . . . . . . . . . . . . . . . . . 25
6.1.3. LOGOUT Command . . . . . . . . . . . . . . . . . . . 26 6.1.3. LOGOUT Command . . . . . . . . . . . . . . . . . . . 26
6.2. Client Commands - Not Authenticated State . . . . . . . . 26 6.2. Client Commands - Not Authenticated State . . . . . . . . 26
6.2.1. STARTTLS Command . . . . . . . . . . . . . . . . . . 27 6.2.1. STARTTLS Command . . . . . . . . . . . . . . . . . . 27
6.2.2. AUTHENTICATE Command . . . . . . . . . . . . . . . . 28 6.2.2. AUTHENTICATE Command . . . . . . . . . . . . . . . . 28
6.2.3. LOGIN Command . . . . . . . . . . . . . . . . . . . . 31 6.2.3. LOGIN Command . . . . . . . . . . . . . . . . . . . . 31
6.3. Client Commands - Authenticated State . . . . . . . . . . 31 6.3. Client Commands - Authenticated State . . . . . . . . . . 31
6.3.1. ENABLE Command . . . . . . . . . . . . . . . . . . . 32 6.3.1. ENABLE Command . . . . . . . . . . . . . . . . . . . 32
6.3.2. SELECT Command . . . . . . . . . . . . . . . . . . . 34 6.3.2. SELECT Command . . . . . . . . . . . . . . . . . . . 34
6.3.3. EXAMINE Command . . . . . . . . . . . . . . . . . . . 35 6.3.3. EXAMINE Command . . . . . . . . . . . . . . . . . . . 36
6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 36 6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 37
6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 37 6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 38
6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 39 6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 39
6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 40 6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 41
6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 41 6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 42
6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 41 6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 42
6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 58 6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 60
6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 63 6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 65
6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 64 6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 66
6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 67 6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 69
6.4. Client Commands - Selected State . . . . . . . . . . . . 69 6.4. Client Commands - Selected State . . . . . . . . . . . . 71
6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 69 6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 71
6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 70 6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 72
6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 70 6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 72
6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 71 6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 73
6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 77 6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 79
6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 81 6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 83
6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 82 6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 84
6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 83 6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 85
6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 85 6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 87
6.5. Client Commands - Experimental/Expansion . . . . . . . . 86 6.5. Client Commands - Experimental/Expansion . . . . . . . . 88
6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 86 6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 88
7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 87 7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 89
7.1. Server Responses - Status Responses . . . . . . . . . . . 88 7.1. Server Responses - Status Responses . . . . . . . . . . . 90
7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 96 7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 98
7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 96 7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 98
7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 97 7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 99
7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 97 7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 99
7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 98 7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 100
7.2. Server Responses - Server and Mailbox Status . . . . . . 98 7.2. Server Responses - Server and Mailbox Status . . . . . . 100
7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 98 7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 100
7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 99 7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 101
7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 100 7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 102
7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 103 7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 105
7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 103 7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 105
7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 104 7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 106
7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 104 7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 106
7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 105 7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 107
7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 105 7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 107
7.4. Server Responses - Message Status . . . . . . . . . . . . 105 7.4. Server Responses - Message Status . . . . . . . . . . . . 107
7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 105 7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 107
7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 106 7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 108
7.5. Server Responses - Command Continuation Request . . . . . 112 7.5. Server Responses - Command Continuation Request . . . . . 114
8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 112 8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 114
9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 113 9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 115
10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 130 10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 132
11. Security Considerations . . . . . . . . . . . . . . . . . . . 130 11. Security Considerations . . . . . . . . . . . . . . . . . . . 132
11.1. STARTTLS Security Considerations . . . . . . . . . . . . 130 11.1. STARTTLS Security Considerations . . . . . . . . . . . . 132
11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 131 11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 133
11.3. LIST command and Other Users' namespace . . . . . . . . 131 11.3. LIST command and Other Users' namespace . . . . . . . . 133
11.4. Other Security Considerations . . . . . . . . . . . . . 131 11.4. Other Security Considerations . . . . . . . . . . . . . 133
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 132 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 134
12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 132 12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 134
12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 133 12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 135
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 133 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 135
13.1. Normative References . . . . . . . . . . . . . . . . . . 133 13.1. Normative References . . . . . . . . . . . . . . . . . . 135
13.2. Informative References (related protocols) . . . . . . . 136 13.2. Informative References (related protocols) . . . . . . . 138
13.3. Informative References (historical aspects of IMAP and 13.3. Informative References (historical aspects of IMAP and
related protocols) . . . . . . . . . . . . . . . . . . . 137 related protocols) . . . . . . . . . . . . . . . . . . . 139
Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 138 Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 140
A.1. Mailbox International Naming Convention for compatibility A.1. Mailbox International Naming Convention for compatibility
with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 138 with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 140
Appendix B. Backward compatibility with BINARY extension . . . . 140 Appendix B. Backward compatibility with BINARY extension . . . . 142
Appendix C. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 140 Appendix C. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 142
Appendix D. Acknowledgement . . . . . . . . . . . . . . . . . . 142 Appendix D. Acknowledgement . . . . . . . . . . . . . . . . . . 144
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 148 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 150
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 35, line 41 skipping to change at page 36, line 5
modified with read-only mailboxes. modified with read-only mailboxes.
Example: C: A142 SELECT INBOX Example: C: A142 SELECT INBOX
S: * 172 EXISTS S: * 172 EXISTS
S: * OK [UIDVALIDITY 3857529045] UIDs valid S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: * OK [UIDNEXT 4392] Predicted next UID S: * OK [UIDNEXT 4392] Predicted next UID
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited
S: A142 OK [READ-WRITE] SELECT completed S: A142 OK [READ-WRITE] SELECT completed
Example: C: A142 SELECT INBOX
S: * 172 EXISTS
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: * OK [UIDNEXT 4392] Predicted next UID
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited
S: A142 OK [READ-WRITE] SELECT completed
[...some time later...]
C: A143 SELECT Drafts
S: * OK [CLOSED] Previous mailbox is now closed
S: * 5 EXISTS
S: * OK [UIDVALIDITY 9877410381] UIDs valid
S: * OK [UIDNEXT 102] Predicted next UID
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * OK [PERMANENTFLAGS (\Deleted \Seen \Answered
\Flagged \Draft \*)] System flags and keywords allowed
S: A143 OK [READ-WRITE] SELECT completed
Note that IMAP4rev1 compliant servers can also send the untagged Note that IMAP4rev1 compliant servers can also send the untagged
RECENT response which was depractated in IMAP4rev2. E.g. "* 0 RECENT response which was depractated in IMAP4rev2. E.g. "* 0
RECENT". Pure IMAP4rev2 clients are advised to ignore the untagged RECENT". Pure IMAP4rev2 clients are advised to ignore the untagged
RECENT response. RECENT response.
6.3.3. EXAMINE Command 6.3.3. EXAMINE Command
Arguments: mailbox name Arguments: mailbox name
Responses: REQUIRED untagged responses: FLAGS, EXISTS Responses: REQUIRED untagged responses: FLAGS, EXISTS
skipping to change at page 47, line 33 skipping to change at page 48, line 33
be supported and MUST be accurately computed when the SUBSCRIBED be supported and MUST be accurately computed when the SUBSCRIBED
return option is specified. Further, all mailbox flags MUST be return option is specified. Further, all mailbox flags MUST be
accurately computed (this differs from the behavior of the accurately computed (this differs from the behavior of the
obsolete LSUB command from IMAP4rev1). obsolete LSUB command from IMAP4rev1).
CHILDREN - requests mailbox child information as originally proposed CHILDREN - requests mailbox child information as originally proposed
in [RFC3348]. See Section 6.3.9.5, below, for details. in [RFC3348]. See Section 6.3.9.5, below, for details.
CHILDREN - This option MUST be supported by all servers. CHILDREN - This option MUST be supported by all servers.
STATUS - requests STATUS response for each matching mailbox.
This option takes STATUS data items as parameters. For each
selectable mailbox matching the list pattern and selection
options, the server MUST return an untagged LIST response
followed by an untagged STATUS response containing the
information requested in the STATUS return option.
If an attempted STATUS for a listed mailbox fails because the
mailbox can't be selected (e.g., if the "l" ACL right [RFC4314]
is granted to the mailbox and the "r" right is not granted, or
due to a race condition between LIST and STATUS changing the
mailbox to \NoSelect), the STATUS response MUST NOT be returned
and the LIST response MUST include the \NoSelect attribute.
This means the server may have to buffer the LIST reply until
it has successfully looked up the necessary STATUS information.
If the server runs into unexpected problems while trying to
look up the STATUS information, it MAY drop the corresponding
STATUS reply. In such a situation, the LIST command would
still return a tagged OK reply.
6.3.9.3. General Principles for Returning LIST Responses 6.3.9.3. General Principles for Returning LIST Responses
This section outlines several principles that can be used by server This section outlines several principles that can be used by server
implementations of this document to decide whether a LIST response implementations of this document to decide whether a LIST response
should be returned, as well as how many responses and what kind of should be returned, as well as how many responses and what kind of
information they may contain. information they may contain.
1. At most one LIST response should be returned for each mailbox 1. At most one LIST response should be returned for each mailbox
name that matches the canonical LIST pattern. Server name that matches the canonical LIST pattern. Server
implementors must not assume that clients will be able to implementors must not assume that clients will be able to
skipping to change at page 48, line 32 skipping to change at page 50, line 7
6.3.9.4. Additional LIST-related Requirements on Clients 6.3.9.4. Additional LIST-related Requirements on Clients
All clients MUST treat a LIST attribute with a stronger meaning as All clients MUST treat a LIST attribute with a stronger meaning as
implying any attribute that can be inferred from it. (See implying any attribute that can be inferred from it. (See
Section 7.2.3 for the list of currently defined attributes). For Section 7.2.3 for the list of currently defined attributes). For
example, the client must treat the presence of the \NoInferiors example, the client must treat the presence of the \NoInferiors
attribute as if the \HasNoChildren attribute was also sent by the attribute as if the \HasNoChildren attribute was also sent by the
server. server.
The following table summarizes inference rules described in The following table summarizes inference rules.
Section 6.3.9.
+--------------------+-------------------+ +--------------------+-------------------+
| returned attribute | implied attribute | | returned attribute | implied attribute |
+--------------------+-------------------+ +--------------------+-------------------+
| \NoInferiors | \HasNoChildren | | \NoInferiors | \HasNoChildren |
| \NonExistent | \NoSelect | | \NonExistent | \NoSelect |
+--------------------+-------------------+ +--------------------+-------------------+
6.3.9.5. The CHILDREN Return Option 6.3.9.5. The CHILDREN Return Option
skipping to change at page 57, line 29 skipping to change at page 58, line 50
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 multiple mailbox patterns. 10:
It also demonstrates that the presence of the CHILDINFO extended
data item doesn't necessarily imply \HasChildren.
C: a1 LIST "" ("foo" "foo/*") 10: The following example shows usage of extended syntax for mailbox
pattern. It also demonstrates that the presence of the
CHILDINFO extended data item doesn't necessarily imply
\HasChildren.
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
skipping to change at page 58, line 27 skipping to change at page 59, line 49
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.
C: A01 LIST "" % RETURN (STATUS (MESSAGES UNSEEN))
S: * LIST () "." "INBOX"
S: * STATUS "INBOX" (MESSAGES 17 UNSEEN 16)
S: * LIST () "." "foo"
S: * STATUS "foo" (MESSAGES 30 UNSEEN 29)
S: * LIST (\NoSelect) "." "bar"
S: A01 OK List completed.
The "bar" mailbox isn't selectable, so it has no STATUS reply.
C: A02 LIST (SUBSCRIBED RECURSIVEMATCH) "" % RETURN (STATUS
(MESSAGES))
S: * LIST (\Subscribed) "." "INBOX"
S: * STATUS "INBOX" (MESSAGES 17)
S: * LIST () "." "foo" (CHILDINFO ("SUBSCRIBED"))
S: A02 OK List completed.
The LIST reply for "foo" is returned because it has matching
children, but no STATUS reply is returned because "foo" itself
doesn't match the selection criteria.
6.3.10. NAMESPACE Command 6.3.10. NAMESPACE Command
Arguments: none Arguments: none
Responses: REQUIRED untagged responses: NAMESPACE Responses: REQUIRED untagged responses: NAMESPACE
Result: OK - command completed Result: OK - command completed
NO - Can't complete the command NO - Can't complete the command
BAD - arguments invalid BAD - arguments invalid
skipping to change at page 61, line 5 skipping to change at page 63, line 5
format mailstore. format mailstore.
The client is configured to save a copy of all mail sent by the user The client is configured to save a copy of all mail sent by the user
into a mailbox called 'Sent Mail'. Furthermore, after a message is into a mailbox called 'Sent Mail'. Furthermore, after a message is
deleted from a mailbox, the client is configured to move that message deleted from a mailbox, the client is configured to move that message
to a mailbox called 'Deleted Items'. to a mailbox called 'Deleted Items'.
Note that this example demonstrates how some extension flags can be Note that this example demonstrates how some extension flags can be
passed to further describe the #mh namespace. passed to further describe the #mh namespace.
C: A001 NAMESPACE C: A001 NAMESPACE
S: * NAMESPACE (("" "/")("#mh/" "/" "X-PARAM" ("FLAG1" "FLAG2"))) S: * NAMESPACE (("" "/")("#mh/" "/" "X-PARAM"
NIL NIL ("FLAG1" "FLAG2"))) NIL NIL
S: A001 OK NAMESPACE command completed S: A001 OK NAMESPACE command completed
< It is desired to keep only one copy of sent mail. It is unclear < It is desired to keep only one copy of sent mail.
which Personal Namespace the client should use to create the 'Sent It is unclear which Personal Namespace the client
Mail' mailbox. The user is prompted to select a namespace and should use to create the 'Sent Mail' mailbox.
only one 'Sent Mail' mailbox is created. > The user is prompted to select a namespace and only
one 'Sent Mail' mailbox is created. >
C: A002 CREATE "Sent Mail" C: A002 CREATE "Sent Mail"
S: A002 OK CREATE command completed S: A002 OK CREATE command completed
< The client is designed so that it keeps two 'Deleted Items' < The client is designed so that it keeps two
mailboxes, one for each namespace. > 'Deleted Items' mailboxes, one for each namespace. >
C: A003 CREATE "Delete Items" C: A003 CREATE "Delete Items"
S: A003 OK CREATE command completed S: A003 OK CREATE command completed
C: A004 CREATE "#mh/Deleted Items" C: A004 CREATE "#mh/Deleted Items"
S: A004 OK CREATE command completed S: A004 OK CREATE command completed
The next level of hierarchy following the Other Users' Namespace The next level of hierarchy following the Other Users' Namespace
prefix SHOULD consist of <username>, where <username> is a user name prefix SHOULD consist of <username>, where <username> is a user name
as per the LOGIN or AUTHENTICATE command. as per the LOGIN or AUTHENTICATE command.
A client can construct a LIST command by appending a "%" to the Other A client can construct a LIST command by appending a "%" to the Other
Users' Namespace prefix to discover the Personal Namespaces of other Users' Namespace prefix to discover the Personal Namespaces of other
users that are available to the currently authenticated user. users that are available to the currently authenticated user.
In response to such a LIST command, a server SHOULD NOT return user In response to such a LIST command, a server SHOULD NOT return user
skipping to change at page 62, line 23 skipping to change at page 64, line 23
S: * LIST () "/" "Other Users/Tesa" S: * LIST () "/" "Other Users/Tesa"
S: A002 OK LIST command completed S: A002 OK LIST command completed
Example 8: Example 8:
A server that does not support providing a list of other user's A server that does not support providing a list of other user's
mailboxes that are accessible to the currently logged on user. The mailboxes that are accessible to the currently logged on user. The
mailboxes are listable if the client includes the name of the other mailboxes are listable if the client includes the name of the other
user with the Other Users' Namespace prefix. user with the Other Users' Namespace prefix.
C: A001 NAMESPACE C: A001 NAMESPACE
S: * NAMESPACE (("" "/")) (("#Users/" "/")) NIL S: * NAMESPACE (("" "/")) (("#Users/" "/")) NIL
S: A001 OK NAMESPACE command completed S: A001 OK NAMESPACE command completed
< In this example, the currently logged on user has access to the < In this example, the currently logged on user has access to
Personal Namespace of user Mike, but the server chose to suppress the Personal Namespace of user Mike, but the server chose to
this information in the LIST response. However, by appending the suppress this information in the LIST response. However,
user name Mike (received through user input) to the Other Users' by appending the user name Mike (received through user input)
Namespace prefix, the client is able to get a listing of the to the Other Users' Namespace prefix, the client is able
personal mailboxes of user Mike. > to get a listing of the personal mailboxes of user Mike. >
C: A002 LIST "" "#Users/%" C: A002 LIST "" "#Users/%"
S: A002 NO The requested item could not be found. S: A002 NO The requested item could not be found.
C: A003 LIST "" "#Users/Mike/%" C: A003 LIST "" "#Users/Mike/%"
S: * LIST () "/" "#Users/Mike/INBOX" S: * LIST () "/" "#Users/Mike/INBOX"
S: * LIST () "/" "#Users/Mike/Foo" S: * LIST () "/" "#Users/Mike/Foo"
S: A003 OK LIST command completed. S: A003 OK LIST command completed.
A prefix string might not contain a hierarchy delimiter, because in A prefix string might not contain a hierarchy delimiter, because in
some cases it is not needed as part of the prefix. some cases it is not needed as part of the prefix.
Example 9: Example 9:
A server that allows access to the Other Users' Namespace by A server that allows access to the Other Users' Namespace by
prefixing the others' mailboxes with a '~' followed by <username>, prefixing the others' mailboxes with a '~' followed by <username>,
where <username> is a user name as per the LOGIN or AUTHENTICATE where <username> is a user name as per the LOGIN or AUTHENTICATE
command. command.
skipping to change at page 69, line 5 skipping to change at page 71, line 5
to distinguish a command from a continuation. to distinguish a command from a continuation.
The server MAY consider a client inactive if it has an IDLE command The server MAY consider a client inactive if it has an IDLE command
running, and if such a server has an inactivity timeout it MAY log running, and if such a server has an inactivity timeout it MAY log
the client off implicitly at the end of its timeout period. Because the client off implicitly at the end of its timeout period. Because
of that, clients using IDLE are advised to terminate the IDLE and re- of that, clients using IDLE are advised to terminate the IDLE and re-
issue it at least every 29 minutes to avoid being logged off. This issue it at least every 29 minutes to avoid being logged off. This
still allows a client to receive immediate mailbox updates even still allows a client to receive immediate mailbox updates even
though it need only "poll" at half hour intervals. though it need only "poll" at half hour intervals.
Example: C: A001 SELECT INBOX Example: C: A001 SELECT INBOX
S: * FLAGS (\Deleted \Seen \Flagged) S: * FLAGS (\Deleted \Seen \Flagged)
S: * OK [PERMANENTFLAGS (\Deleted \Seen \Flagged)] Limited S: * OK [PERMANENTFLAGS (\Deleted \Seen \Flagged)] Limited
S: * 3 EXISTS S: * 3 EXISTS
S: * OK [UIDVALIDITY 1] S: * OK [UIDVALIDITY 1]
S: A001 OK [READ-WRITE] SELECT completed S: A001 OK [READ-WRITE] SELECT completed
C: A002 IDLE C: A002 IDLE
S: + idling S: + idling
...time passes; new mail arrives... ...time passes; new mail arrives...
S: * 4 EXISTS S: * 4 EXISTS
C: DONE C: DONE
S: A002 OK IDLE terminated S: A002 OK IDLE terminated
...another client expunges message 2 now... ...another client expunges message 2 now...
C: A003 FETCH 4 ALL C: A003 FETCH 4 ALL
S: * 4 FETCH (...) S: * 4 FETCH (...)
S: A003 OK FETCH completed S: A003 OK FETCH completed
C: A004 IDLE C: A004 IDLE
S: * 2 EXPUNGE S: * 2 EXPUNGE
S: * 3 EXISTS S: * 3 EXISTS
S: + idling S: + idling
...time passes; another client expunges message 3... ...time passes; another client expunges message 3...
S: * 3 EXPUNGE S: * 3 EXPUNGE
S: * 2 EXISTS S: * 2 EXISTS
...time passes; new mail arrives... ...time passes; new mail arrives...
S: * 3 EXISTS S: * 3 EXISTS
C: DONE C: DONE
S: A004 OK IDLE terminated S: A004 OK IDLE terminated
C: A005 FETCH 3 ALL C: A005 FETCH 3 ALL
S: * 3 FETCH (...) S: * 3 FETCH (...)
S: A005 OK FETCH completed S: A005 OK FETCH completed
C: A006 IDLE C: A006 IDLE
6.4. Client Commands - Selected State 6.4. Client Commands - Selected State
In the selected state, commands that manipulate messages in a mailbox In the selected state, commands that manipulate messages in a mailbox
are permitted. are permitted.
In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),
and the authenticated state commands (SELECT, EXAMINE, NAMESPACE, and the authenticated state commands (SELECT, EXAMINE, NAMESPACE,
CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, STATUS, and CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, STATUS, and
APPEND), the following commands are valid in the selected state: APPEND), the following commands are valid in the selected state:
skipping to change at page 91, line 30 skipping to change at page 93, line 30
responses for the previously opened mailbox (which was closed) responses for the previously opened mailbox (which was closed)
and the newly selected mailbox; all responses before the CLOSED and the newly selected mailbox; all responses before the CLOSED
response code relate to the mailbox that was closed, and all response code relate to the mailbox that was closed, and all
subsequent responses relate to the newly opened mailbox. subsequent responses relate to the newly opened mailbox.
There is no need to return the CLOSED response code on There is no need to return the CLOSED response code on
completion of the CLOSE or the UNSELECT command (or similar), completion of the CLOSE or the UNSELECT command (or similar),
whose purpose is to close the currently selected mailbox whose purpose is to close the currently selected mailbox
without opening a new one. without opening a new one.
The server can also return an unsolicited CLOSED response code The server MAY also return an unsolicited CLOSED response code
when it wants to force the client to return to authenticated when it wants to force the client to return to authenticated
state. For example, the server can do that when the mailbox state. For example, the server can do that when the mailbox
requires repairs or is deleted in another session. requires repairs or is deleted in another session.
CONTACTADMIN CONTACTADMIN
The user should contact the system administrator or support The user should contact the system administrator or support
desk. desk.
C: e login "fred" "foo" C: e login "fred" "foo"
skipping to change at page 123, line 32 skipping to change at page 125, line 32
(DQUOTE QUOTED-CHAR DQUOTE / nil) (DQUOTE QUOTED-CHAR DQUOTE / nil)
[Namespace-Response-Extensions] ")" [Namespace-Response-Extensions] ")"
Namespace-Response-Extensions = *(Namespace-Response-Extension) Namespace-Response-Extensions = *(Namespace-Response-Extension)
Namespace-Response-Extension = SP string SP Namespace-Response-Extension = SP string SP
"(" string *(SP string) ")" "(" string *(SP string) ")"
Namespace-Response = "NAMESPACE" SP Namespace Namespace-Response = "NAMESPACE" SP Namespace
SP Namespace SP Namespace SP Namespace SP Namespace
; The first Namespace is the Personal Namespace(s) ; The first Namespace is the Personal Namespace(s).
; The second Namespace is the Other Users' Namespace(s) ; The second Namespace is the Other Users'
; The third Namespace is the Shared Namespace(s) ; Namespace(s).
; The third Namespace is the Shared Namespace(s).
nil = "NIL" nil = "NIL"
nstring = string / nil nstring = string / nil
number = 1*DIGIT number = 1*DIGIT
; Unsigned 32-bit integer ; Unsigned 32-bit integer
; (0 <= n < 4,294,967,296) ; (0 <= n < 4,294,967,296)
number64 = 1*DIGIT number64 = 1*DIGIT
skipping to change at page 125, line 42 skipping to change at page 127, line 42
"AUTHORIZATIONFAILED" / "EXPIRED" / "AUTHORIZATIONFAILED" / "EXPIRED" /
"PRIVACYREQUIRED" / "CONTACTADMIN" / "NOPERM" / "PRIVACYREQUIRED" / "CONTACTADMIN" / "NOPERM" /
"INUSE" / "EXPUNGEISSUED" / "CORRUPTION" / "INUSE" / "EXPUNGEISSUED" / "CORRUPTION" /
"SERVERBUG" / "CLIENTBUG" / "CANNOT" / "SERVERBUG" / "CLIENTBUG" / "CANNOT" /
"LIMIT" / "OVERQUOTA" / "ALREADYEXISTS" / "LIMIT" / "OVERQUOTA" / "ALREADYEXISTS" /
"NONEXISTENT" / "NONEXISTENT" /
"CLOSED" / "CLOSED" /
"UNKNOWN-CTE" / "UNKNOWN-CTE" /
atom [SP 1*<any TEXT-CHAR except "]">] atom [SP 1*<any TEXT-CHAR except "]">]
return-option = "SUBSCRIBED" / "CHILDREN" / option-extension return-option = "SUBSCRIBED" / "CHILDREN" / status-option /
option-extension
search = "SEARCH" [search-return-opts] search = "SEARCH" [search-return-opts]
SP search-program SP search-program
search-correlator = SP "(" "TAG" SP tag-string ")" search-correlator = SP "(" "TAG" SP tag-string ")"
search-key = "ALL" / "ANSWERED" / "BCC" SP astring / search-key = "ALL" / "ANSWERED" / "BCC" SP astring /
"BEFORE" SP date / "BODY" SP astring / "BEFORE" SP date / "BODY" SP astring /
"CC" SP astring / "DELETED" / "FLAGGED" / "CC" SP astring / "DELETED" / "FLAGGED" /
"FROM" SP astring / "KEYWORD" SP flag-keyword / "FROM" SP astring / "KEYWORD" SP flag-keyword /
skipping to change at page 128, line 40 skipping to change at page 130, line 40
("UNSEEN" SP number) / ("UNSEEN" SP number) /
("DELETED" SP number) / ("DELETED" SP number) /
("SIZE" SP number64) ("SIZE" SP number64)
; Extensions to the STATUS responses ; Extensions to the STATUS responses
; should extend this production. ; should extend this production.
; Extensions should use the generic ; Extensions should use the generic
; syntax defined by tagged-ext. ; syntax defined by tagged-ext.
status-att-list = status-att-val *(SP status-att-val) status-att-list = status-att-val *(SP status-att-val)
status-option = "STATUS" SP "(" status-att *(SP status-att) ")"
; This ABNF production complies with
; <option-extension> syntax.
store = "STORE" SP sequence-set SP store-att-flags store = "STORE" SP sequence-set SP store-att-flags
store-att-flags = (["+" / "-"] "FLAGS" [".SILENT"]) SP store-att-flags = (["+" / "-"] "FLAGS" [".SILENT"]) SP
(flag-list / (flag *(SP flag))) (flag-list / (flag *(SP flag)))
string = quoted / literal string = quoted / literal
subscribe = "SUBSCRIBE" SP mailbox subscribe = "SUBSCRIBE" SP mailbox
tag = 1*<any ASTRING-CHAR except "+"> tag = 1*<any ASTRING-CHAR except "+">
tagged-ext-label = tagged-label-fchar *tagged-label-char tagged-ext-label = tagged-label-fchar *tagged-label-char
;; Is a valid RFC 3501 "atom". ;; Is a valid RFC 3501 "atom".
tagged-label-fchar = ALPHA / "-" / "_" / "." tagged-label-fchar = ALPHA / "-" / "_" / "."
tagged-label-char = tagged-label-fchar / DIGIT / ":" tagged-label-char = tagged-label-fchar / DIGIT / ":"
tagged-ext-comp = astring / tagged-ext-comp = astring /
skipping to change at page 141, line 4 skipping to change at page 143, line 4
like $Phishing, $Junk, $NonJunk? like $Phishing, $Junk, $NonJunk?
4. Require all unsolicited FETCH updates to include UID - done. 4. Require all unsolicited FETCH updates to include UID - done.
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) - done. per RFC 8314, RFC 7525 and RFC 7817) - done.
6. Possibly fold in the following extensions/RFC: Base LIST- 6. Possibly fold in the following extensions/RFC: Base LIST-
EXTENDED syntax plus deprecate LSUB (replace it with LIST EXTENDED syntax plus deprecate LSUB (replace it with LIST
\Subscribed) minus the requirement to support multiple list \Subscribed) minus the requirement to support multiple list
patterns, STATUS-in-LIST, SEARCHRES, BINARY (only the FETCH patterns - done, STATUS-in-LIST - done, SEARCHRES, BINARY (only
changes on leaf body part and make APPEND related ones optional. the FETCH changes on leaf body part and make APPEND related ones
See the mailing list discussion) - done. optional. See the mailing list discussion) - done.
6. 6.
7. Add STATUS SIZE (total mailbox size) - done. Add STATUS DELETED 7. Add STATUS SIZE (total mailbox size) - done. Add STATUS DELETED
(number of messages with \Deleted flag set) - done. (number of messages with \Deleted flag set) - done.
8. Drop UTF-7, all mailboxes are always in UTF-8 - done. 8. Drop UTF-7, all mailboxes are always in UTF-8 - done.
9. Revise IANA registration of IMAP extensions and give advice on 9. Revise IANA registration of IMAP extensions and give advice on
use of "X-" convention. use of "X-" convention.
10. Allow word-based searching (as per Chris Newman)? Need to 10. Allow word-based searching (as per Chris Newman)? Need to
discuss header field search, where exact/substring match is discuss header field search, where exact/substring match is
still required for interoperability. still required for interoperability.
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), ENABLE (RFC 5161), IDLE (RFC 2177), SASL-IR (RFC
4959) and MOVE (RFC 6851) extensions. Also folded RFC 5530 and 4959), LIST-STATUS (RFC 5819) and MOVE (RFC 6851) extensions.
FETCH side of the BINARY extension (RFC 3516). Also folded RFC 5530 and FETCH side of the 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. 4. Added CLOSED response code from RFC 7162. SELECT/EXAMINE when a
mailbox is already selected now require for the CLOSED response
code to be returned.
5. Updated to use modern TLS-related recommendations as per RFC 5. Updated to use modern TLS-related recommendations as per RFC
8314, RFC 7817, RFC 7525. 8314, RFC 7817, RFC 7525.
6. For future extensibility extended ABNF for tagged-ext-simple to 6. For future extensibility extended ABNF for tagged-ext-simple to
allow for bare number64. allow for bare number64.
7. Added SHOULD level requirement on IMAP servers to support 7. Added SHOULD level requirement on IMAP servers to support
$MDNSent and $Forwarded keywords. $MDNSent and $Forwarded keywords.
skipping to change at page 142, line 28 skipping to change at page 144, line 32
variants instead. variants instead.
15. Replaced DIGEST-MD5 SASL mechanism with SCRAM-SHA-256. DIGEST- 15. Replaced DIGEST-MD5 SASL mechanism with SCRAM-SHA-256. DIGEST-
MD5 was deprecated. MD5 was deprecated.
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 no mailbox related updates. 18. IDLE command can now return updates not related to the currently
selected mailbox state.
Appendix D. Acknowledgement Appendix D. 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
extensive feedback. extensive feedback.
This document incorporate text from RFC 4315 (by Mark Crispin), RFC This document incorporate text from RFC 4315 (by Mark Crispin), RFC
4466 (by Cyrus Daboo), RFC 4731 (by Dave Cridland), RFC 5161 (by Arnt 4466 (by Cyrus Daboo), RFC 4731 (by Dave Cridland), RFC 5161 (by Arnt
Gulbrandsen), RFC 5530 (by Arnt Gulbrandsen), RFC 6154 (by Jamie Gulbrandsen), RFC 5530 (by Arnt Gulbrandsen), RFC 5819 (by Timo
Nicolson) Sirainen), RFC 6154 (by Jamie Nicolson)
so work done by authors/editors of these documents is appreciated. so work done by authors/editors of these documents is appreciated.
Note that editors of this document were redacted from the above list.
Index Index
$ $
$Forwarded (predefined flag) 12 $Forwarded (predefined flag) 12
$MDNSent (predefined flag) 12 $MDNSent (predefined flag) 12
+ +
+FLAGS <flag list> 81 +FLAGS <flag list> 83
+FLAGS.SILENT <flag list> 81 +FLAGS.SILENT <flag list> 83
- -
-FLAGS <flag list> 81 -FLAGS <flag list> 83
-FLAGS.SILENT <flag list> 81 -FLAGS.SILENT <flag list> 83
A A
ALERT (response code) 88 ALERT (response code) 90
ALL (fetch item) 77 ALL (fetch item) 79
ALL (search key) 73 ALL (search key) 75
ALL (search result option) 72 ALL (search result option) 74
ALREADYEXISTS (response code) 88 ALREADYEXISTS (response code) 90
ANSWERED (search key) 73 ANSWERED (search key) 75
APPEND (command) 64 APPEND (command) 66
APPENDUID (response code) 89 APPENDUID (response code) 91
AUTHENTICATE (command) 28 AUTHENTICATE (command) 28
AUTHENTICATIONFAILED (response code) 89 AUTHENTICATIONFAILED (response code) 91
AUTHORIZATIONFAILED (response code) 90 AUTHORIZATIONFAILED (response code) 92
B B
BAD (response) 97 BAD (response) 99
BADCHARSET (response code) 90 BADCHARSET (response code) 92
BCC <string> (search key) 74 BCC <string> (search key) 76
BEFORE <date> (search key) 74 BEFORE <date> (search key) 76
BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 78 BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 80
BINARY.SIZE[<section-binary>] (fetch item) 78 BINARY.SIZE[<section-binary>] (fetch item) 80
BINARY.SIZE[<section-binary>] (fetch result) 107 BINARY.SIZE[<section-binary>] (fetch result) 109
BINARY[<section-binary>]<<number>> (fetch result) 106 BINARY[<section-binary>]<<number>> (fetch result) 108
BINARY[<section-binary>]<<partial>> (fetch item) 77 BINARY[<section-binary>]<<partial>> (fetch item) 79
BODY (fetch item) 78 BODY (fetch item) 80
BODY (fetch result) 107 BODY (fetch result) 109
BODY <string> (search key) 74 BODY <string> (search key) 76
BODY.PEEK[<section>]<<partial>> (fetch item) 80 BODY.PEEK[<section>]<<partial>> (fetch item) 82
BODYSTRUCTURE (fetch item) 80 BODYSTRUCTURE (fetch item) 82
BODYSTRUCTURE (fetch result) 108 BODYSTRUCTURE (fetch result) 110
BODY[<section>]<<origin octet>> (fetch result) 107 BODY[<section>]<<origin octet>> (fetch result) 109
BODY[<section>]<<partial>> (fetch item) 78 BODY[<section>]<<partial>> (fetch item) 80
BYE (response) 98 BYE (response) 100
Body Structure (message attribute) 13 Body Structure (message attribute) 13
C C
CANNOT (response code) 90 CANNOT (response code) 92
CAPABILITY (command) 24 CAPABILITY (command) 24
CAPABILITY (response code) 90 CAPABILITY (response code) 92
CAPABILITY (response) 99 CAPABILITY (response) 101
CC <string> (search key) 74 CC <string> (search key) 76
CLIENTBUG (response code) 90 CLIENTBUG (response code) 92
CLOSE (command) 69 CLOSE (command) 71
CLOSED (response code) 91 CLOSED (response code) 93
CONTACTADMIN (response code) 91 CONTACTADMIN (response code) 93
COPY (command) 82 COPY (command) 84
COPYUID (response code) 91 COPYUID (response code) 93
CORRUPTION (response code) 92 CORRUPTION (response code) 94
COUNT (search result option) 72 COUNT (search result option) 74
CREATE (command) 36 CREATE (command) 37
D D
DELETE (command) 37 DELETE (command) 38
DELETED (search key) 74 DELETED (search key) 76
DELETED (status item) 64 DELETED (status item) 66
DRAFT (search key) 74 DRAFT (search key) 76
E E
ENABLE (command) 32 ENABLE (command) 32
ENVELOPE (fetch item) 80 ENVELOPE (fetch item) 82
ENVELOPE (fetch result) 110 ENVELOPE (fetch result) 112
ESEARCH (response) 104 ESEARCH (response) 106
EXAMINE (command) 35 EXAMINE (command) 36
EXPIRED (response code) 92 EXPIRED (response code) 94
EXPUNGE (command) 70 EXPUNGE (command) 72
EXPUNGE (response) 105 EXPUNGE (response) 107
EXPUNGEISSUED (response code) 92 EXPUNGEISSUED (response code) 94
Envelope Structure (message attribute) 13 Envelope Structure (message attribute) 13
F F
FAST (fetch item) 77 FAST (fetch item) 79
FETCH (command) 77 FETCH (command) 79
FETCH (response) 106 FETCH (response) 108
FLAGGED (search key) 74 FLAGGED (search key) 76
FLAGS (fetch item) 80 FLAGS (fetch item) 82
FLAGS (fetch result) 111 FLAGS (fetch result) 113
FLAGS (response) 104 FLAGS (response) 106
FLAGS <flag list> (store command data item) 81 FLAGS <flag list> (store command data item) 83
FLAGS.SILENT <flag list> (store command data item) 81 FLAGS.SILENT <flag list> (store command data item) 83
FROM <string> (search key) 74 FROM <string> (search key) 76
FULL (fetch item) 77 FULL (fetch item) 79
Flags (message attribute) 11 Flags (message attribute) 11
H H
HEADER (part specifier) 78 HEADER (part specifier) 80
HEADER <field-name> <string> (search key) 74 HEADER <field-name> <string> (search key) 76
HEADER.FIELDS (part specifier) 78 HEADER.FIELDS (part specifier) 80
HEADER.FIELDS.NOT (part specifier) 78 HEADER.FIELDS.NOT (part specifier) 80
I I
IDLE (command) 67 IDLE (command) 69
INTERNALDATE (fetch item) 80 INTERNALDATE (fetch item) 82
INTERNALDATE (fetch result) 111 INTERNALDATE (fetch result) 113
INUSE (response code) 92 INUSE (response code) 94
Internal Date (message attribute) 12 Internal Date (message attribute) 12
K K
KEYWORD <flag> (search key) 74 KEYWORD <flag> (search key) 76
Keyword (type of flag) 12 Keyword (type of flag) 12
L L
LARGER <n> (search key) 74 LARGER <n> (search key) 76
LIMIT (response code) 93 LIMIT (response code) 95
LIST (command) 41 LIST (command) 42
LIST (response) 100 LIST (response) 102
LOGOUT (command) 26 LOGOUT (command) 26
M M
MAX (search result option) 72 MAX (search result option) 74
MAY (specification requirement term) 5 MAY (specification requirement term) 5
MESSAGES (status item) 64 MESSAGES (status item) 66
MIME (part specifier) 79 MIME (part specifier) 81
MIN (search result option) 72 MIN (search result option) 74
MOVE (command) 83 MOVE (command) 85
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) 58 NAMESPACE (command) 60
NAMESPACE (response) 103 NAMESPACE (response) 105
NO (response) 96 NO (response) 98
NONEXISTENT (response code) 93 NONEXISTENT (response code) 95
NOOP (command) 25 NOOP (command) 25
NOPERM (response code) 93 NOPERM (response code) 95
NOT <search-key> (search key) 74 NOT <search-key> (search key) 76
NOT RECOMMENDED (specification requirement term) 5 NOT RECOMMENDED (specification requirement term) 5
O O
OK (response) 96 OK (response) 98
ON <date> (search key) 74 ON <date> (search key) 76
OPTIONAL (specification requirement term) 5 OPTIONAL (specification requirement term) 5
OR <search-key1> <search-key2> (search key) 74 OR <search-key1> <search-key2> (search key) 76
OVERQUOTA (response code) 93 OVERQUOTA (response code) 95
P P
PARSE (response code) 94 PARSE (response code) 96
PERMANENTFLAGS (response code) 94 PERMANENTFLAGS (response code) 96
PREAUTH (response) 97 PREAUTH (response) 99
PRIVACYREQUIRED (response code) 94 PRIVACYREQUIRED (response code) 96
Permanent Flag (class of flag) 12 Permanent Flag (class of flag) 12
Predefined keywords 12 Predefined keywords 12
R R
READ-ONLY (response code) 94 READ-ONLY (response code) 96
READ-WRITE (response code) 95 READ-WRITE (response code) 97
RECOMMENDED (specification requirement term) 5 RECOMMENDED (specification requirement term) 5
RENAME (command) 39 RENAME (command) 39
REQUIRED (specification requirement term) 5 REQUIRED (specification requirement term) 5
RFC822.SIZE (fetch item) 80 RFC822.SIZE (fetch item) 82
RFC822.SIZE (fetch result) 112 RFC822.SIZE (fetch result) 114
S S
SEARCH (command) 71 SEARCH (command) 73
SEEN (search key) 75 SEEN (search key) 77
SELECT (command) 34 SELECT (command) 34
SENTBEFORE <date> (search key) 75 SENTBEFORE <date> (search key) 77
SENTON <date> (search key) 75 SENTON <date> (search key) 77
SENTSINCE <date> (search key) 75 SENTSINCE <date> (search key) 77
SERVERBUG (response code) 95 SERVERBUG (response code) 97
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) 75 SINCE <date> (search key) 77
SIZE (status item) 64 SIZE (status item) 66
SMALLER <n> (search key) 75 SMALLER <n> (search key) 77
STARTTLS (command) 27 STARTTLS (command) 27
STATUS (command) 63 STATUS (command) 65
STATUS (response) 103 STATUS (response) 105
STORE (command) 81 STORE (command) 83
SUBJECT <string> (search key) 75 SUBJECT <string> (search key) 77
SUBSCRIBE (command) 40 SUBSCRIBE (command) 41
Session Flag (class of flag) 12 Session Flag (class of flag) 12
System Flag (type of flag) 11 System Flag (type of flag) 11
T T
TEXT (part specifier) 78 TEXT (part specifier) 80
TEXT <string> (search key) 75 TEXT <string> (search key) 77
TO <string> (search key) 75 TO <string> (search key) 77
TRYCREATE (response code) 95 TRYCREATE (response code) 97
U U
UID (command) 85 UID (command) 87
UID (fetch item) 80 UID (fetch item) 82
UID (fetch result) 112 UID (fetch result) 114
UID <sequence set> (search key) 75 UID <sequence set> (search key) 77
UIDNEXT (response code) 95 UIDNEXT (response code) 97
UIDNEXT (status item) 64 UIDNEXT (status item) 66
UIDNOTSTICKY (response code) 95 UIDNOTSTICKY (response code) 97
UIDVALIDITY (response code) 95 UIDVALIDITY (response code) 97
UIDVALIDITY (status item) 64 UIDVALIDITY (status item) 66
UNANSWERED (search key) 75 UNANSWERED (search key) 77
UNAVAILABLE (response code) 96 UNAVAILABLE (response code) 98
UNDELETED (search key) 75 UNDELETED (search key) 77
UNDRAFT (search key) 75 UNDRAFT (search key) 77
UNFLAGGED (search key) 75 UNFLAGGED (search key) 77
UNKEYWORD <flag> (search key) 75 UNKEYWORD <flag> (search key) 77
UNKNOWN-CTE (response code) 96 UNKNOWN-CTE (response code) 98
UNSEEN (search key) 75 UNSEEN (search key) 77
UNSEEN (status item) 64 UNSEEN (status item) 66
UNSELECT (command) 70 UNSELECT (command) 72
UNSUBSCRIBE (command) 41 UNSUBSCRIBE (command) 42
Unique Identifier (UID) (message attribute) 9 Unique Identifier (UID) (message attribute) 9
X X
X<atom> (command) 86 X<atom> (command) 88
[ [
[RFC-5322] Size (message attribute) 13 [RFC-5322] Size (message attribute) 13
\ \
\All (mailbox name attribute) 101 \All (mailbox name attribute) 103
\Answered (system flag) 11 \Answered (system flag) 11
\Archive (mailbox name attribute) 102 \Archive (mailbox name attribute) 104
\Deleted (system flag) 12 \Deleted (system flag) 12
\Draft (system flag) 12 \Draft (system flag) 12
\Drafts (mailbox name attribute) 102 \Drafts (mailbox name attribute) 104
\Flagged (mailbox name attribute) 102 \Flagged (mailbox name attribute) 104
\Flagged (system flag) 11 \Flagged (system flag) 11
\HasChildren (mailbox name attribute) 100 \HasChildren (mailbox name attribute) 102
\HasNoChildren (mailbox name attribute) 101 \HasNoChildren (mailbox name attribute) 103
\Junk (mailbox name attribute) 102 \Junk (mailbox name attribute) 104
\Marked (mailbox name attribute) 101 \Marked (mailbox name attribute) 103
\Noinferiors (mailbox name attribute) 100 \Noinferiors (mailbox name attribute) 102
\NonExistent (mailbox name attribute) 100 \NonExistent (mailbox name attribute) 102
\Noselect (mailbox name attribute) 100 \Noselect (mailbox name attribute) 102
\Recent (system flag) 12 \Recent (system flag) 12
\Remote (mailbox name attribute) 101 \Remote (mailbox name attribute) 103
\Seen (system flag) 11 \Seen (system flag) 11
\Sent (mailbox name attribute) 102 \Sent (mailbox name attribute) 104
\Subscribed (mailbox name attribute) 101 \Subscribed (mailbox name attribute) 103
\Trash (mailbox name attribute) 102 \Trash (mailbox name attribute) 104
\Unmarked (mailbox name attribute) 101 \Unmarked (mailbox name attribute) 103
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. 71 change blocks. 
311 lines changed or deleted 386 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/