draft-ietf-extra-imap4rev2-06.txt   draft-ietf-extra-imap4rev2-07.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: April 29, 2020 October 27, 2019 Expires: May 7, 2020 November 4, 2019
INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev2 INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev2
draft-ietf-extra-imap4rev2-06 draft-ietf-extra-imap4rev2-07
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 April 29, 2020. This Internet-Draft will expire on May 7, 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 42 skipping to change at page 3, line 42
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 . . . . . . . . . . . . . . . . . . . 35
6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 36 6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 36
6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 37 6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 37
6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 38 6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 38
6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 40 6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 40
6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 41 6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 41
6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 41 6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 41
6.3.10. LSUB Command . . . . . . . . . . . . . . . . . . . . 58 6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 57
6.3.11. NAMESPACE Command . . . . . . . . . . . . . . . . . . 59 6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 62
6.3.12. STATUS Command . . . . . . . . . . . . . . . . . . . 63 6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 63
6.3.13. APPEND Command . . . . . . . . . . . . . . . . . . . 65 6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 66
6.3.14. IDLE Command . . . . . . . . . . . . . . . . . . . . 67 6.4. Client Commands - Selected State . . . . . . . . . . . . 68
6.4. Client Commands - Selected State . . . . . . . . . . . . 69 6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 68
6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 69 6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 68
6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 70 6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 69
6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 70 6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 69
6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 71 6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 75
6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 77 6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 79
6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 81 6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 80
6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 82 6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 81
6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 83 6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 83
6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 85 6.5. Client Commands - Experimental/Expansion . . . . . . . . 85
6.5. Client Commands - Experimental/Expansion . . . . . . . . 87 6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 85
6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 87 7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 85
7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 87 7.1. Server Responses - Status Responses . . . . . . . . . . . 86
7.1. Server Responses - Status Responses . . . . . . . . . . . 88 7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 94
7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 96 7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 94
7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 96 7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 95
7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 97 7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 95
7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 97 7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 95
7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 97 7.2. Server Responses - Server and Mailbox Status . . . . . . 96
7.2. Server Responses - Server and Mailbox Status . . . . . . 98 7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 96
7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 98 7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 96
7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 98 7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 97
7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 99 7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 101
7.2.4. LSUB Response . . . . . . . . . . . . . . . . . . . . 102 7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 101
7.2.5. NAMESPACE Response . . . . . . . . . . . . . . . . . 102 7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 101
7.2.6. STATUS Response . . . . . . . . . . . . . . . . . . . 103 7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 102
7.2.7. ESEARCH Response . . . . . . . . . . . . . . . . . . 103 7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 102
7.2.8. FLAGS Response . . . . . . . . . . . . . . . . . . . 104 7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 102
7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 104 7.4. Server Responses - Message Status . . . . . . . . . . . . 103
7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 104 7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 103
7.4. Server Responses - Message Status . . . . . . . . . . . . 104 7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 104
7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 104 7.5. Server Responses - Command Continuation Request . . . . . 109
7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 105 8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 110
7.5. Server Responses - Command Continuation Request . . . . . 111 9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 111
8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 112
9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 113
10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 128 10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 128
11. Security Considerations . . . . . . . . . . . . . . . . . . . 128 11. Security Considerations . . . . . . . . . . . . . . . . . . . 128
11.1. STARTTLS Security Considerations . . . . . . . . . . . . 128 11.1. STARTTLS Security Considerations . . . . . . . . . . . . 128
11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 129 11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 129
11.3. LIST command and Other Users' namespace . . . . . . . . 129 11.3. LIST command and Other Users' namespace . . . . . . . . 129
11.4. Other Security Considerations . . . . . . . . . . . . . 129 11.4. Other Security Considerations . . . . . . . . . . . . . 129
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 130 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 130
12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 130 12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 130
12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 131 12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 131
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 131 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 131
13.1. Normative References . . . . . . . . . . . . . . . . . . 131 13.1. Normative References . . . . . . . . . . . . . . . . . . 131
13.2. Informative References (related protocols) . . . . . . . 134 13.2. Informative References (related protocols) . . . . . . . 134
13.3. Informative References (historical aspects of IMAP and 13.3. Informative References (historical aspects of IMAP and
related protocols) . . . . . . . . . . . . . . . . . . . 135 related protocols) . . . . . . . . . . . . . . . . . . . 135
Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 136 Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 136
A.1. Mailbox International Naming Convention . . . . . . . . . 136 A.1. Mailbox International Naming Convention for compatibility
with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 136
Appendix B. Backward compatibility with BINARY extension . . . . 138 Appendix B. Backward compatibility with BINARY extension . . . . 138
Appendix C. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 138 Appendix C. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 138
Appendix D. Acknowledgement . . . . . . . . . . . . . . . . . . 140 Appendix D. Acknowledgement . . . . . . . . . . . . . . . . . . 140
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 145 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 146
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 19, line 35 skipping to change at page 19, line 35
5. Operational Considerations 5. Operational Considerations
The following rules are listed here to ensure that all IMAP4rev2 The following rules are listed here to ensure that all IMAP4rev2
implementations interoperate properly. implementations interoperate properly.
5.1. Mailbox Naming 5.1. Mailbox Naming
In IMAP4rev2, Mailbox names are encoded in Net-Unicode [NET-UNICODE] In IMAP4rev2, Mailbox names are encoded in Net-Unicode [NET-UNICODE]
(this differs from IMAP4rev1). Client implementations MAY attempt to (this differs from IMAP4rev1). Client implementations MAY attempt to
create Net-Unicode mailbox names, and MUST interpret any 8-bit create Net-Unicode mailbox names, and MUST interpret any 8-bit
mailbox names returned by LIST or LSUB as [NET-UNICODE]. Server mailbox names returned by LIST as [NET-UNICODE]. Server
implementations MUST prohibit the creation of 8-bit mailbox names implementations MUST prohibit the creation of 8-bit mailbox names
that do not comply with Net-Unicode (however, servers MAY accept a that do not comply with Net-Unicode (however, servers MAY accept a
de-normalized UTF-8 mailbox name and convert it to Net-Unicode prior de-normalized UTF-8 mailbox name and convert it to Net-Unicode prior
to mailbox creation). to mailbox creation).
The case-insensitive mailbox name INBOX is a special name reserved to The case-insensitive mailbox name INBOX is a special name reserved to
mean "the primary mailbox for this user on this server". (Note that mean "the primary mailbox for this user on this server". (Note that
this special name may not exist on some servers for some users.) The this special name may not exist on some servers for some users, for
example if the user has no access to personal namespace.) The
interpretation of all other names is implementation-dependent. interpretation of all other names is implementation-dependent.
In particular, this specification takes no position on case In particular, this specification takes no position on case
sensitivity in non-INBOX mailbox names. Some server implementations sensitivity in non-INBOX mailbox names. Some server implementations
are fully case-sensitive in ASCII range; others preserve case of a are fully case-sensitive in ASCII range; others preserve case of a
newly-created name but otherwise are case-insensitive; and yet others newly-created name but otherwise are case-insensitive; and yet others
coerce names to a particular case. Client implementations MUST coerce names to a particular case. Client implementations MUST
interact with any of these. interact with any of these.
There are certain client considerations when creating a new mailbox There are certain client considerations when creating a new mailbox
skipping to change at page 20, line 18 skipping to change at page 20, line 18
1. Any character which is one of the atom-specials (see the Formal 1. Any character which is one of the atom-specials (see the Formal
Syntax) will require that the mailbox name be represented as a Syntax) will require that the mailbox name be represented as a
quoted string or literal. quoted string or literal.
2. CTL and other non-graphic characters are difficult to represent 2. CTL and other non-graphic characters are difficult to represent
in a user interface and are best avoided. Servers MAY refuse to in a user interface and are best avoided. Servers MAY refuse to
create mailbox names containing Unicode CTL characters. create mailbox names containing Unicode CTL characters.
3. Although the list-wildcard characters ("%" and "*") are valid in 3. Although the list-wildcard characters ("%" and "*") are valid in
a mailbox name, it is difficult to use such mailbox names with a mailbox name, it is difficult to use such mailbox names with
the LIST and LSUB commands due to the conflict with wildcard the LIST command due to the conflict with wildcard
interpretation. interpretation.
4. Usually, a character (determined by the server implementation) is 4. Usually, a character (determined by the server implementation) is
reserved to delimit levels of hierarchy. reserved to delimit levels of hierarchy.
5. Two characters, "#" and "&", have meanings by convention, and 5. Two characters, "#" and "&", have meanings by convention, and
should be avoided except when used in that convention. should be avoided except when used in that convention.
5.1.1. Mailbox Hierarchy Naming 5.1.1. Mailbox Hierarchy Naming
skipping to change at page 25, line 46 skipping to change at page 25, line 46
Responses: no specific responses for this command (but see below) Responses: no specific responses for this command (but see below)
Result: OK - noop completed Result: OK - noop completed
BAD - command unknown or arguments invalid BAD - command unknown or arguments invalid
The NOOP command always succeeds. It does nothing. The NOOP command always succeeds. It does nothing.
Since any command can return a status update as untagged data, the Since any command can return a status update as untagged data, the
NOOP command can be used as a periodic poll for new messages or NOOP command can be used as a periodic poll for new messages or
message status updates during a period of inactivity (the IDLE message status updates during a period of inactivity (the IDLE
command Section 6.3.14 should be used instead of NOOP if real-time command Section 6.3.13 should be used instead of NOOP if real-time
updates to mailbox state are desirable). The NOOP command can also updates to mailbox state are desirable). The NOOP command can also
be used to reset any inactivity autologout timer on the server. be used to reset any inactivity autologout timer on the server.
Example: C: a002 NOOP Example: C: a002 NOOP
S: a002 OK NOOP completed S: a002 OK NOOP completed
. . . . . .
C: a047 NOOP C: a047 NOOP
S: * 22 EXPUNGE S: * 22 EXPUNGE
S: * 23 EXISTS S: * 23 EXISTS
S: * 14 FETCH (UID 1305 FLAGS (\Seen \Deleted)) S: * 14 FETCH (UID 1305 FLAGS (\Seen \Deleted))
skipping to change at page 32, line 5 skipping to change at page 32, line 5
6.3. Client Commands - Authenticated State 6.3. Client Commands - Authenticated State
In the authenticated state, commands that manipulate mailboxes as In the authenticated state, commands that manipulate mailboxes as
atomic entities are permitted. Of these commands, the SELECT and atomic entities are permitted. Of these commands, the SELECT and
EXAMINE commands will select a mailbox for access and enter the EXAMINE commands will select a mailbox for access and enter the
selected state. selected state.
In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),
the following commands are valid in the authenticated state: ENABLE, the following commands are valid in the authenticated state: ENABLE,
SELECT, EXAMINE, NAMESPACE, CREATE, DELETE, RENAME, SUBSCRIBE, SELECT, EXAMINE, NAMESPACE, CREATE, DELETE, RENAME, SUBSCRIBE,
UNSUBSCRIBE, LIST, LSUB, STATUS, APPEND and IDLE. UNSUBSCRIBE, LIST, STATUS, APPEND and IDLE.
6.3.1. ENABLE Command 6.3.1. ENABLE Command
Arguments: capability names Arguments: capability names
Responses: no specific responses for this command Responses: no specific responses for this command
Result: OK - Relevant capabilities enabled Result: OK - Relevant capabilities enabled
BAD - No arguments, or syntax error in an argument BAD - No arguments, or syntax error in an argument
skipping to change at page 35, line 29 skipping to change at page 35, line 29
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
Note that IMAP4rev1 compliant servers can also send the untagged
RECENT response which was depractated in IMAP4rev2. E.g. "* 0
RECENT". Pure IMAP4rev2 clients are advised to ignore the untagged
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
REQUIRED OK untagged responses: PERMANENTFLAGS, REQUIRED OK untagged responses: PERMANENTFLAGS,
UIDNEXT, UIDVALIDITY UIDNEXT, UIDVALIDITY
Result: OK - examine completed, now in selected state Result: OK - examine completed, now in selected state
NO - examine failure, now in authenticated state: no NO - examine failure, now in authenticated state: no
skipping to change at page 40, line 43 skipping to change at page 40, line 43
Arguments: mailbox Arguments: mailbox
Responses: no specific responses for this command Responses: no specific responses for this command
Result: OK - subscribe completed Result: OK - subscribe completed
NO - subscribe failure: can't subscribe to that name NO - subscribe failure: can't subscribe to that name
BAD - command unknown or arguments invalid BAD - command unknown or arguments invalid
The SUBSCRIBE command adds the specified mailbox name to the server's The SUBSCRIBE command adds the specified mailbox name to the server's
set of "active" or "subscribed" mailboxes as returned by the LSUB set of "active" or "subscribed" mailboxes as returned by the LIST
command. This command returns a tagged OK response only if the (SUBSCRIBED) command. This command returns a tagged OK response only
subscription is successful. if the subscription is successful.
A server MAY validate the mailbox argument to SUBSCRIBE to verify A server MAY validate the mailbox argument to SUBSCRIBE to verify
that it exists. However, it MUST NOT unilaterally remove an existing that it exists. However, it MUST NOT unilaterally remove an existing
mailbox name from the subscription list even if a mailbox by that mailbox name from the subscription list even if a mailbox by that
name no longer exists. name no longer exists.
Note: This requirement is because a server site can choose to Note: This requirement is because a server site can choose to
routinely remove a mailbox with a well-known name (e.g., "system- routinely remove a mailbox with a well-known name (e.g., "system-
alerts") after its contents expire, with the intention of alerts") after its contents expire, with the intention of
recreating it when new contents are appropriate. recreating it when new contents are appropriate.
skipping to change at page 41, line 25 skipping to change at page 41, line 25
Arguments: mailbox name Arguments: mailbox name
Responses: no specific responses for this command Responses: no specific responses for this command
Result: OK - unsubscribe completed Result: OK - unsubscribe completed
NO - unsubscribe failure: can't unsubscribe that name NO - unsubscribe failure: can't unsubscribe that name
BAD - command unknown or arguments invalid BAD - command unknown or arguments invalid
The UNSUBSCRIBE command removes the specified mailbox name from the The UNSUBSCRIBE command removes the specified mailbox name from the
server's set of "active" or "subscribed" mailboxes as returned by the server's set of "active" or "subscribed" mailboxes as returned by the
LSUB command. This command returns a tagged OK response only if the LIST (SUBSCRIBED) command. This command returns a tagged OK response
unsubscription is successful. only if the unsubscription is successful.
Example: C: A002 UNSUBSCRIBE #news.comp.mail.mime Example: C: A002 UNSUBSCRIBE #news.comp.mail.mime
S: A002 OK UNSUBSCRIBE completed S: A002 OK UNSUBSCRIBE completed
6.3.9. LIST Command 6.3.9. LIST Command
Arguments (basic): reference name Arguments (basic): reference name
mailbox name with possible wildcards mailbox name with possible wildcards
Arguments (extended): selection options (OPTIONAL) Arguments (extended): selection options (OPTIONAL)
reference name reference name
mailbox patterns mailbox patterns
return options (OPTIONAL) return options (OPTIONAL)
Responses: untagged responses: LIST Responses: untagged responses: LIST
Result: OK - list completed Result: OK - list completed
NO - list failure: can't list that reference or name NO - list failure: can't list that reference or name
BAD - command unknown or arguments invalid BAD - command unknown or arguments invalid
THIS VERSION HAS ONLY AN INITIAL PASS AT ADDING THE EXTENDED LIST
SYNTAX AND OPTIONS. THERE'S STILL A GOOD DEAL OR WORK TO DO ON IT,
AND THE ABNF IS NOT THERE YET.
The LIST command returns a subset of names from the complete set of The LIST command returns a subset of names from the complete set of
all names available to the client. Zero or more untagged LIST all names available to the client. Zero or more untagged LIST
replies are returned, containing the name attributes, hierarchy replies are returned, containing the name attributes, hierarchy
delimiter, name, and possible extension information; see the delimiter, name, and possible extension information; see the
description of the LIST reply for more detail. description of the LIST reply for more detail.
The LIST command SHOULD return its data quickly, without undue delay. The LIST command SHOULD return its data quickly, without undue delay.
For example, it SHOULD NOT go to excess trouble to calculate the For example, it SHOULD NOT go to excess trouble to calculate the
\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 of the following conditions The extended syntax is being used if one or more of the following
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 ("multiple mailbox patterns")
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")
skipping to change at page 43, line 5 skipping to change at page 42, line 49
hierarchy delimiter (or find out that the mailbox names are flat) hierarchy delimiter (or find out that the mailbox names are flat)
even when no mailboxes by that name currently exist. even when no mailboxes by that name currently exist.
In the extended syntax, any mailbox name arguments that are empty In the extended syntax, any mailbox name arguments that are empty
strings are ignored. There is no special meaning for empty mailbox strings are ignored. There is no special meaning for empty mailbox
names when the extended syntax is used. names when the extended syntax is used.
The reference and mailbox name arguments are interpreted into a The reference and mailbox name arguments are interpreted into a
canonical form that represents an unambiguous left-to-right canonical form that represents an unambiguous left-to-right
hierarchy. The returned mailbox names will be in the interpreted hierarchy. The returned mailbox names will be in the interpreted
form. form, that we call "canonical LIST pattern" later in this document.
To define the term "canonical LIST pattern" formally: it refers to
the canonical pattern constructed internally by the server from the
reference and mailbox name arguments.
Note: The interpretation of the reference argument is Note: The interpretation of the reference argument is
implementation-defined. It depends upon whether the server implementation-defined. It depends upon whether the server
implementation has a concept of the "current working directory" implementation has a concept of the "current working directory"
and leading "break out characters", which override the current and leading "break out characters", which override the current
working directory. working directory.
For example, on a server which exports a UNIX or NT filesystem, For example, on a server which exports a UNIX or NT filesystem,
the reference argument contains the current working directory, and the reference argument contains the current working directory, and
the mailbox name argument would contain the name as interpreted in the mailbox name argument would contain the name as interpreted in
skipping to change at page 44, line 41 skipping to change at page 44, line 41
details). details).
If multiple mailbox patterns are used (in the extended syntax), a If multiple mailbox patterns are used (in the extended syntax), a
mailbox matches if it matches at least one mailbox pattern. If a mailbox matches if it matches at least one mailbox pattern. If a
mailbox matches more than one pattern, it is still only returned mailbox matches more than one pattern, it is still only returned
once. Any syntactically valid pattern that is not accepted by a once. Any syntactically valid pattern that is not accepted by a
server for any reason MUST be silently ignored. 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 mailbox mailboxes returned are those that match both the list of canonical
patterns and the selection options. Unless a particular selection LIST patterns and the selection options. Unless a particular
option provides special rules, the selection options are cumulative: selection option provides special rules, the selection options are
a mailbox that matches the mailbox patterns is selected only if it cumulative: a mailbox that matches the mailbox patterns is selected
also matches all of the selection options. (An example of a only if it also matches all of the selection options. (An example of
selection option with special rules is the RECURSIVEMATCH option.) a selection option with special rules is the RECURSIVEMATCH option.)
Return options control what information is returned for each matched Return options control what information is returned for each matched
mailbox. Return options MUST NOT cause the server to report mailbox. Return options MUST NOT cause the server to report
information about additional mailbox names other than those that information about additional mailbox names other than those that
match the patterns and selection options. If no return options are match the canonical LIST patterns and selection options. If no
specified, the client is only expecting information about mailbox return options are specified, the client is only expecting
attributes. The server MAY return other information about the information about mailbox attributes. The server MAY return other
matched mailboxes, and clients MUST be able to handle that situation. information about the matched mailboxes, and clients MUST be able to
handle that situation.
Initial selection options and return options are defined in the Initial selection options and return options are defined in the
following subsections, and new ones will also be defined in following subsections, and new ones will also be defined in
extensions. Initial options MUST be supported. Each non-initial extensions. Initial options defined in this document MUST be
option will be enabled by a capability string (one capability may supported. Each non-initial option will be enabled by a capability
enable multiple options), and a client MUST NOT send an option for string (one capability may enable multiple options), and a client
which the server has not advertised support. A server MUST respond MUST NOT send an option for which the server has not advertised
to options it does not recognize with a BAD response. The client support. A server MUST respond to options it does not recognize with
SHOULD NOT specify any option more than once; however, if the client a BAD response. The client SHOULD NOT specify any option more than
does this, the server MUST act as if it received the option only once; however, if the client does this, the server MUST act as if it
once. The order in which options are specified by the client is not received the option only once. The order in which options are
significant. specified by the client is not significant.
In general, each selection option except RECURSIVEMATCH will have a In general, each selection option except RECURSIVEMATCH will have a
corresponding return option. The REMOTE selection option is an corresponding return option. The REMOTE selection option is an
anomaly in this regard, and does not have a corresponding return anomaly in this regard, and does not have a corresponding return
option. That is because it expands, rather than restricts, the set option. That is because it expands, rather than restricts, the set
of mailboxes that are returned. Future extensions to this of mailboxes that are returned. Future extensions to this
specification should keep parallelism in mind and define a pair of specification should keep parallelism in mind and define a pair of
corresponding options. corresponding options.
Server implementations are permitted to "hide" otherwise accessible Server implementations are permitted to "hide" otherwise accessible
skipping to change at page 45, line 49 skipping to change at page 45, line 50
6.3.9.1. LIST Selection Options 6.3.9.1. LIST Selection Options
The selection options defined in this specification are as follows: The selection options defined in this specification are as follows:
SUBSCRIBED - causes the LIST command to list subscribed names, SUBSCRIBED - causes the LIST command to list subscribed names,
rather than the existing mailboxes. This will often be a subset rather than the existing mailboxes. This will often be a subset
of the actual mailboxes. It's also possible for this list to of the actual mailboxes. It's also possible for this list to
contain the names of mailboxes that don't exist. In any case, the contain the names of mailboxes that don't exist. In any case, the
list MUST include exactly those mailbox names that match the list MUST include exactly those mailbox names that match the
canonical list pattern and are subscribed to. This option is canonical list pattern and are subscribed to.
intended to supplement the LSUB command. Of particular note are
the mailbox attributes as returned by this option, compared with
what is returned by LSUB. With the latter, the attributes
returned may not reflect the actual attribute status on the
mailbox name, and the \NoSelect attribute has a second special
meaning (it indicates that this mailbox is not, itself,
subscribed, but that it has descendant mailboxes that are). With
the SUBSCRIBED selection option described here, the attributes are
accurate and complete, and have no special meanings. "LSUB" and
"LIST (SUBSCRIBED)" are, thus, not the same thing, and some
servers must do significant extra work to respond to "LIST
(SUBSCRIBED)". Because of this, clients SHOULD continue to use
"LSUB" unless they specifically want the additional information
offered by "LIST (SUBSCRIBED)".
This option defines a new mailbox attribute, "\Subscribed", that This option defines a mailbox attribute, "\Subscribed", that
indicates that a mailbox name is subscribed to. The "\Subscribed" indicates that a mailbox name is subscribed to. The "\Subscribed"
attribute MUST be supported and MUST be accurately computed when attribute MUST be supported and MUST be accurately computed when
the SUBSCRIBED selection option is specified. the SUBSCRIBED selection option is specified.
Note that the SUBSCRIBED selection option implies the SUBSCRIBED Note that the SUBSCRIBED selection option implies the SUBSCRIBED
return option (see below). return option (see below).
REMOTE - causes the LIST command to show remote mailboxes as well as REMOTE - causes the LIST command to show remote mailboxes as well as
local ones, as described in [RFC2193]. This option is intended to local ones, as described in [RFC2193]. This option is intended to
replace the RLIST command and, in conjunction with the SUBSCRIBED replace the RLIST command and, in conjunction with the SUBSCRIBED
selection option, the RLSUB command. selection option, the RLSUB command. Servers that don't support
remote mailboxes just ignore this option.
This option defines a new mailbox attribute, "\Remote", that This option defines a mailbox attribute, "\Remote", that indicates
indicates that a mailbox is a remote mailbox. The "\Remote" that a mailbox is a remote mailbox. The "\Remote" attribute MUST
attribute MUST be accurately computed when the REMOTE option is be accurately computed when the REMOTE option is specified.
specified.
The REMOTE selection option has no interaction with other options. The REMOTE selection option has no interaction with other options.
Its effect is to tell the server to apply the other options, if Its effect is to tell the server to apply the other options, if
any, to remote mailboxes, in addition to local ones. In any, to remote mailboxes, in addition to local ones. In
particular, it has no interaction with RECURSIVEMATCH (see below). particular, it has no interaction with RECURSIVEMATCH (see below).
A request for (REMOTE RECURSIVEMATCH) is invalid, because a A request for (REMOTE RECURSIVEMATCH) is invalid, because a
request for (RECURSIVEMATCH) is. A request for (REMOTE request for (RECURSIVEMATCH) is also invalid. A request for
RECURSIVEMATCH SUBSCRIBED) is asking for all subscribed mailboxes, (REMOTE RECURSIVEMATCH SUBSCRIBED) is asking for all subscribed
both local and remote. mailboxes, both local and remote.
RECURSIVEMATCH - this option forces the server to return information RECURSIVEMATCH - this option forces the server to return information
about parent mailboxes that don't match other selection options, about parent mailboxes that don't match other selection options,
but have some submailboxes that do. Information about children is but have some submailboxes that do. Information about children is
returned in the CHILDINFO extended data item, as described in returned in the CHILDINFO extended data item, as described in
Section 6.3.9.5. Section 6.3.9.5.
Note 1: In order for a parent mailbox to be returned, it still has Note 1: In order for a parent mailbox to be returned, it still has
to match the canonical LIST pattern. to match the canonical LIST pattern.
skipping to change at page 47, line 29 skipping to change at page 47, line 16
before the client had a chance to access them. before the client had a chance to access them.
6.3.9.2. LIST Return Options 6.3.9.2. LIST Return Options
The return options defined in this specification are as follows: The return options defined in this specification are as follows:
SUBSCRIBED - causes the LIST command to return subscription state SUBSCRIBED - causes the LIST command to return subscription state
for all matching mailbox names. The "\Subscribed" attribute MUST for all matching mailbox names. The "\Subscribed" attribute MUST
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 LSUB accurately computed (this differs from the behavior of the
command). 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.4, below, for details. This in [RFC3348]. See Section 6.3.9.4, below, for details. This
option MUST be supported by all servers. option MUST be supported by all servers.
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
skipping to change at page 49, line 38 skipping to change at page 49, line 25
\HasNoChildren \HasNoChildren
The presence of this attribute indicates that the mailbox has NO The presence of this attribute indicates that the mailbox has NO
child mailboxes that are accessible to the currently child mailboxes that are accessible to the currently
authenticated user. authenticated user.
It is an error for the server to return both a \HasChildren and a It is an error for the server to return both a \HasChildren and a
\HasNoChildren attribute in the same LIST response. \HasNoChildren attribute in the same LIST response.
Note: the \HasNoChildren attribute should not be confused with the Note: the \HasNoChildren attribute should not be confused with the
IMAP4 defined attribute \NoInferiors, which indicates that no child the \NoInferiors attribute, which indicates that no child mailboxes
mailboxes exist now and none can be created in the future. exist now and none can be created in the future.
6.3.9.5. CHILDINFO Extended Data Item 6.3.9.5. CHILDINFO Extended Data Item
The CHILDINFO extended data item MUST NOT be returned unless the The CHILDINFO extended data item MUST NOT be returned unless the
client has specified the RECURSIVEMATCH selection option. client has specified the RECURSIVEMATCH selection option.
The CHILDINFO extended data item in a LIST response describes the The CHILDINFO extended data item in a LIST response describes the
selection criteria that has caused it to be returned and indicates selection criteria that has caused it to be returned and indicates
that the mailbox has at least one descendant mailbox that matches the that the mailbox has at least one descendant mailbox that matches the
selection criteria. selection criteria.
The LSUB command indicates this condition by using the "\NoSelect"
attribute, but the LIST (SUBSCRIBED) command MUST NOT do that, since
"\NoSelect" retains its original meaning here. Further, the
CHILDINFO extended data item is more general, in that it can be used
with any extended set of selection criteria.
Note: Some servers allow for mailboxes to exist without requiring Note: Some servers allow for mailboxes to exist without requiring
their parent to exist. For example, a mailbox "Customers/ABC" can their parent to exist. For example, a mailbox "Customers/ABC" can
exist while the mailbox "Customers" does not. As CHILDINFO extended exist while the mailbox "Customers" does not. As CHILDINFO extended
data item is not allowed if the RECURSIVEMATCH selection option is data item is not allowed if the RECURSIVEMATCH selection option is
not specified, such servers SHOULD use the "\NonExistent not specified, such servers SHOULD use the "\NonExistent
\HasChildren" attribute pair to signal to the client that there is a \HasChildren" attribute pair to signal to the client that there is a
descendant mailbox that matches the selection criteria. See example descendant mailbox that matches the selection criteria. See example
11 in Section 6.3.9.6. 11 in Section 6.3.9.6.
The returned selection criteria allow the client to distinguish a The returned selection criteria allow the client to distinguish a
skipping to change at page 58, line 27 skipping to change at page 57, line 48
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.
6.3.10. LSUB Command 6.3.10. NAMESPACE Command
Arguments: reference name
mailbox name with possible wildcards
Responses: untagged responses: LSUB
Result: OK - lsub completed
NO - lsub failure: can't list that reference or name
BAD - command unknown or arguments invalid
The LSUB command returns a subset of names from the set of names that
the user has declared as being "active" or "subscribed". Zero or
more untagged LSUB replies are returned. The arguments to LSUB are
in the same form as those for LIST.
The returned untagged LSUB response MAY contain different mailbox
flags from a LIST untagged response. If this should happen, the
flags in the untagged LIST are considered more authoritative.
A special situation occurs when using LSUB with the % wildcard.
Consider what happens if "foo/bar" (with a hierarchy delimiter of
"/") is subscribed but "foo" is not. A "%" wildcard to LSUB must
return foo, not foo/bar, in the LSUB response, and it MUST be flagged
with the \Noselect attribute.
The server MUST NOT unilaterally remove an existing mailbox name from
the subscription list even if a mailbox by that name no longer
exists.
Example: C: A002 LSUB "#news." "comp.mail.*"
S: * LSUB () "." #news.comp.mail.mime
S: * LSUB () "." #news.comp.mail.misc
S: A002 OK LSUB completed
C: A003 LSUB "#news." "comp.%"
S: * LSUB (\NoSelect) "." #news.comp.mail
S: A003 OK LSUB completed
6.3.11. 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
The NAMESPACE command causes a single ungagged NAMESPACE response to The NAMESPACE command causes a single ungagged NAMESPACE response to
be returned. The untagged NAMESPACE response contains the prefix and be returned. The untagged NAMESPACE response contains the prefix and
hierarchy delimiter to the server's Personal Namespace(s), Other hierarchy delimiter to the server's Personal Namespace(s), Other
Users' Namespace(s), and Shared Namespace(s) that the server wishes Users' Namespace(s), and Shared Namespace(s) that the server wishes
to expose. The response will contain a NIL for any namespace class to expose. The response will contain a NIL for any namespace class
that is not available. Namespace-Response-Extensions ABNF non that is not available. Namespace-Response-Extensions ABNF non
skipping to change at page 63, line 45 skipping to change at page 62, line 18
S: * NAMESPACE (("" "/")) (("~" "/")) NIL S: * NAMESPACE (("" "/")) (("~" "/")) NIL
S: A001 OK NAMESPACE command completed S: A001 OK NAMESPACE command completed
< List the mailboxes for user mark > < List the mailboxes for user mark >
C: A002 LIST "" "~mark/%" C: A002 LIST "" "~mark/%"
S: * LIST () "/" "~mark/INBOX" S: * LIST () "/" "~mark/INBOX"
S: * LIST () "/" "~mark/foo" S: * LIST () "/" "~mark/foo"
S: A002 OK LIST command completed S: A002 OK LIST command completed
6.3.12. STATUS Command 6.3.11. STATUS Command
Arguments: mailbox name Arguments: mailbox name
status data item names status data item names
Responses: REQUIRED untagged responses: STATUS Responses: REQUIRED untagged responses: STATUS
Result: OK - status completed Result: OK - status completed
NO - status failure: no status for that name NO - status failure: no status for that name
BAD - command unknown or arguments invalid BAD - command unknown or arguments invalid
skipping to change at page 65, line 14 skipping to change at page 63, line 35
SIZE The total size of the mailbox in octets. This is not strictly SIZE The total size of the mailbox in octets. This is not strictly
required to be an exact value, but it MUST be equal to or greater required to be an exact value, but it MUST be equal to or greater
than the sum of the values of the RFC822.SIZE FETCH message data than the sum of the values of the RFC822.SIZE FETCH message data
items (see Section 6.4.5) of all messages in the mailbox. items (see Section 6.4.5) of all messages in the mailbox.
Example: C: A042 STATUS blurdybloop (UIDNEXT MESSAGES) Example: C: A042 STATUS blurdybloop (UIDNEXT MESSAGES)
S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)
S: A042 OK STATUS completed S: A042 OK STATUS completed
6.3.13. APPEND Command 6.3.12. APPEND Command
Arguments: mailbox name Arguments: mailbox name
OPTIONAL flag parenthesized list OPTIONAL flag parenthesized list
OPTIONAL date/time string OPTIONAL date/time string
message literal message literal
Responses: no specific responses for this command Responses: no specific responses for this command
Result: OK - append completed Result: OK - append completed
NO - append error: can't append to that mailbox, error NO - append error: can't append to that mailbox, error
skipping to change at page 67, line 46 skipping to change at page 66, line 19
319; therefore, UIDs 305 through 310 do not exist (refer to 319; therefore, UIDs 305 through 310 do not exist (refer to
Section 2.3.1.1 for further explanation). A006 is an example of a Section 2.3.1.1 for further explanation). A006 is an example of a
message being copied that did not return a COPYUID; and, as expected, message being copied that did not return a COPYUID; and, as expected,
A007 shows that the mail store containing that mailbox does not A007 shows that the mail store containing that mailbox does not
support persistent UIDs. support persistent UIDs.
Note: The APPEND command is not used for message delivery, because Note: The APPEND command is not used for message delivery, because
it does not provide a mechanism to transfer [SMTP] envelope it does not provide a mechanism to transfer [SMTP] envelope
information. information.
6.3.14. IDLE Command 6.3.13. IDLE Command
Arguments: none Arguments: none
Responses: continuation data will be requested; the client sends the Responses: continuation data will be requested; the client sends the
continuation data "DONE" to end the command continuation data "DONE" to end the command
Result: OK - IDLE completed after client sent "DONE" Result: OK - IDLE completed after client sent "DONE"
NO - failure: the server will not allow the IDLE command NO - failure: the server will not allow the IDLE command
at this time at this time
BAD - command unknown or arguments invalid BAD - command unknown or arguments invalid
skipping to change at page 69, line 44 skipping to change at page 68, line 12
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, LSUB , STATUS, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, STATUS, and
and APPEND), the following commands are valid in the selected state: APPEND), the following commands are valid in the selected state:
CLOSE, UNSELECT, EXPUNGE, SEARCH, FETCH, STORE, COPY, MOVE, and UID. CLOSE, UNSELECT, EXPUNGE, SEARCH, FETCH, STORE, COPY, MOVE, and UID.
6.4.1. CLOSE Command 6.4.1. CLOSE Command
Arguments: none Arguments: none
Responses: no specific responses for this command Responses: no specific responses for this command
Result: OK - close completed, now in authenticated state Result: OK - close completed, now in authenticated state
BAD - command unknown or arguments invalid BAD - command unknown or arguments invalid
The CLOSE command permanently removes all messages that have the The CLOSE command permanently removes all messages that have the
\Deleted flag set from the currently selected mailbox, and returns to \Deleted flag set from the currently selected mailbox, and returns to
the authenticated state from the selected state. No untagged EXPUNGE the authenticated state from the selected state. No untagged EXPUNGE
responses are sent. responses are sent.
No messages are removed, and no error is given, if the mailbox is No messages are removed, and no error is given, if the mailbox is
selected by an EXAMINE command or is otherwise selected read-only. selected by an EXAMINE command or is otherwise selected read-only.
skipping to change at page 80, line 39 skipping to change at page 78, line 43
ENVELOPE The envelope structure of the message. This is computed by ENVELOPE The envelope structure of the message. This is computed by
the server by parsing the [RFC-5322] header into the component the server by parsing the [RFC-5322] header into the component
parts, defaulting various fields as necessary. parts, defaulting various fields as necessary.
FLAGS The flags that are set for this message. FLAGS The flags that are set for this message.
INTERNALDATE The internal date of the message. INTERNALDATE The internal date of the message.
RFC822 Functionally equivalent to BODY[], differing in the syntax of RFC822 Functionally equivalent to BODY[], differing in the syntax of
the resulting untagged FETCH data (RFC822 is returned). the resulting untagged FETCH data (RFC822 is returned). This
FETCH item is deprecated and will be removed in the next revision
of this document.
RFC822.HEADER Functionally equivalent to BODY.PEEK[HEADER], RFC822.HEADER Functionally equivalent to BODY.PEEK[HEADER],
differing in the syntax of the resulting untagged FETCH data differing in the syntax of the resulting untagged FETCH data
(RFC822.HEADER is returned). (RFC822.HEADER is returned). This FETCH item is deprecated and
will be removed in the next revision of this document.
RFC822.SIZE The [RFC-5322] size of the message. RFC822.SIZE The [RFC-5322] size of the message.
RFC822.TEXT Functionally equivalent to BODY[TEXT], differing in the RFC822.TEXT Functionally equivalent to BODY[TEXT], differing in the
syntax of the resulting untagged FETCH data (RFC822.TEXT is syntax of the resulting untagged FETCH data (RFC822.TEXT is
returned). returned). This FETCH item is deprecated and will be removed in
the next revision of this document.
UID The unique identifier for the message. UID The unique identifier for the message.
Example: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)]) Example: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])
S: * 2 FETCH .... S: * 2 FETCH ....
S: * 3 FETCH .... S: * 3 FETCH ....
S: * 4 FETCH .... S: * 4 FETCH ....
S: A654 OK FETCH completed S: A654 OK FETCH completed
6.4.6. STORE Command 6.4.6. STORE Command
skipping to change at page 100, line 5 skipping to change at page 98, line 5
Contents: name attributes Contents: name attributes
hierarchy delimiter hierarchy delimiter
name name
The LIST response occurs as a result of a LIST command. It returns a The LIST response occurs as a result of a LIST command. It returns a
single name that matches the LIST specification. There can be single name that matches the LIST specification. There can be
multiple LIST responses for a single LIST command. multiple LIST responses for a single LIST command.
The following base name attributes are defined: The following base name attributes are defined:
\NonExistent The "\NonExistent" attribute indicates that a mailbox
name does not refer to an existing mailbox. Note that this
attribute is not meaningful by itself, as mailbox names that match
the canonical LIST pattern but don't exist must not be returned
unless one of the two conditions listed below is also satisfied:
1. The mailbox name also satisfies the selection criteria (for
example, it is subscribed and the "SUBSCRIBED" selection
option has been specified).
2. "RECURSIVEMATCH" has been specified, and the mailbox name has
at least one descendant mailbox name that does not match the
LIST pattern and does match the selection criteria.
In practice, this means that the "\NonExistent" attribute is
usually returned with one or more of "\Subscribed", "\Remote",
"\HasChildren", or the CHILDINFO extended data item.
The "\NonExistent" attribute implies "\NoSelect".
\Noinferiors It is not possible for any child levels of hierarchy to \Noinferiors It is not possible for any child levels of hierarchy to
exist under this name; no child levels exist now and none can be exist under this name; no child levels exist now and none can be
created in the future. created in the future.
\Noselect It is not possible to use this name as a selectable \Noselect It is not possible to use this name as a selectable
mailbox. mailbox.
\HasChildren The presence of this attribute indicates that the \HasChildren The presence of this attribute indicates that the
mailbox has child mailboxes. A server SHOULD NOT set this mailbox has child mailboxes. A server SHOULD NOT set this
attribute if there are child mailboxes and the user does not have attribute if there are child mailboxes and the user does not have
skipping to change at page 100, line 38 skipping to change at page 99, line 12
mailbox has NO child mailboxes that are accessible to the mailbox has NO child mailboxes that are accessible to the
currently authenticated user. currently authenticated user.
\Marked The mailbox has been marked "interesting" by the server; the \Marked The mailbox has been marked "interesting" by the server; the
mailbox probably contains messages that have been added since the mailbox probably contains messages that have been added since the
last time the mailbox was selected. last time the mailbox was selected.
\Unmarked The mailbox does not contain any additional messages since \Unmarked The mailbox does not contain any additional messages since
the last time the mailbox was selected. the last time the mailbox was selected.
\Subscribed The mailbox name was subscribed to using the SUBSCRIBE
command.
\Remote The mailbox is a remote mailbox.
It is an error for the server to return both a \HasChildren and a It is an error for the server to return both a \HasChildren and a
\HasNoChildren attribute in the same LIST response. \HasNoChildren attribute in the same LIST response.
Note: the \HasNoChildren attribute should not be confused with the Note: the \HasNoChildren attribute should not be confused with the
\NoInferiors attribute, which indicates that no child mailboxes \NoInferiors attribute, which indicates that no child mailboxes
exist now and none can be created in the future. exist now and none can be created in the future.
If it is not feasible for the server to determine whether or not the If it is not feasible for the server to determine whether or not the
mailbox is "interesting", the server SHOULD NOT send either \Marked mailbox is "interesting", the server SHOULD NOT send either \Marked
or \Unmarked. The server MUST NOT send more than one of \Marked, or \Unmarked. The server MUST NOT send more than one of \Marked,
skipping to change at page 102, line 24 skipping to change at page 100, line 51
unlikely to also serve as Barb's \Sent mailbox. unlikely to also serve as Barb's \Sent mailbox.
The hierarchy delimiter is a character used to delimit levels of The hierarchy delimiter is a character used to delimit levels of
hierarchy in a mailbox name. A client can use it to create child hierarchy in a mailbox name. A client can use it to create child
mailboxes, and to search higher or lower levels of naming hierarchy. mailboxes, and to search higher or lower levels of naming hierarchy.
All children of a top-level hierarchy node MUST use the same All children of a top-level hierarchy node MUST use the same
separator character. A NIL hierarchy delimiter means that no separator character. A NIL hierarchy delimiter means that no
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 and LSUB commands. Unless be valid for use as a reference in LIST command. Unless \Noselect or
\Noselect 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.
Example: S: * LIST (\Noselect) "/" ~/Mail/foo Example: S: * LIST (\Noselect) "/" ~/Mail/foo
7.2.4. LSUB Response 7.2.4. NAMESPACE Response
Contents: name attributes
hierarchy delimiter
name
The LSUB response occurs as a result of an LSUB command. It returns
a single name that matches the LSUB specification. There can be
multiple LSUB responses for a single LSUB command. The data is
identical in format to the LIST response.
Example: S: * LSUB () "." #news.comp.mail.misc
7.2.5. NAMESPACE Response
Contents: the prefix and hierarchy delimiter to the server's Contents: the prefix and hierarchy delimiter to the server's
Personal Namespace(s), Other Users' Namespace(s), and Personal Namespace(s), Other Users' Namespace(s), and
Shared Namespace(s) Shared Namespace(s)
The NAMESPACE response occurs as a result of a NAMESPACE command. It The NAMESPACE response occurs as a result of a NAMESPACE command. It
contains the prefix and hierarchy delimiter to the server's Personal contains the prefix and hierarchy delimiter to the server's Personal
Namespace(s), Other Users' Namespace(s), and Shared Namespace(s) that Namespace(s), Other Users' Namespace(s), and Shared Namespace(s) that
the server wishes to expose. The response will contain a NIL for any the server wishes to expose. The response will contain a NIL for any
namespace class that is not available. Namespace-Response-Extensions namespace class that is not available. Namespace-Response-Extensions
ABNF non terminal is defined for extensibility and MAY be included in ABNF non terminal is defined for extensibility and MAY be included in
the response. Namespace-Response-Extensions which are not on the the response. Namespace-Response-Extensions which are not on the
IETF standards track, MUST be prefixed with an "X-". IETF standards track, MUST be prefixed with an "X-".
Example: S: * NAMESPACE (("" "/")) (("~" "/")) NIL Example: S: * NAMESPACE (("" "/")) (("~" "/")) NIL
7.2.6. STATUS Response 7.2.5. STATUS Response
Contents: name Contents: name
status parenthesized list status parenthesized list
The STATUS response occurs as a result of an STATUS command. It The STATUS response occurs as a result of an STATUS command. It
returns the mailbox name that matches the STATUS specification and returns the mailbox name that matches the STATUS specification and
the requested mailbox status information. the requested mailbox status information.
Example: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) Example: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)
7.2.7. ESEARCH Response 7.2.6. ESEARCH Response
Contents: one or more search-return-data pairs Contents: one or more search-return-data pairs
The ESEARCH response occurs as a result of a SEARCH or UID SEARCH The ESEARCH response occurs as a result of a SEARCH or UID SEARCH
command. command.
The ESEARCH response starts with an optional search correlator. If The ESEARCH response starts with an optional search correlator. If
it is missing, then the response was not caused by a particular IMAP it is missing, then the response was not caused by a particular IMAP
command, whereas if it is present, it contains the tag of the command command, whereas if it is present, it contains the tag of the command
that caused the response to be returned. that caused the response to be returned.
skipping to change at page 104, line 5 skipping to change at page 102, line 19
item name SHOULD appear only once in an ESEARCH response. item name SHOULD appear only once in an ESEARCH response.
[[TBD: describe the most common search data pairs returned.]] [[TBD: describe the most common search data pairs returned.]]
Example: S: * ESEARCH UID COUNT 5 ALL 4:19,21,28 Example: S: * ESEARCH UID COUNT 5 ALL 4:19,21,28
Example: S: * ESEARCH (TAG "a567") UID COUNT 5 ALL 4:19,21,28 Example: S: * ESEARCH (TAG "a567") UID COUNT 5 ALL 4:19,21,28
Example: S: * ESEARCH COUNT 5 ALL 1:17,21 Example: S: * ESEARCH COUNT 5 ALL 1:17,21
7.2.8. FLAGS Response 7.2.7. FLAGS Response
Contents: flag parenthesized list Contents: flag parenthesized list
The FLAGS response occurs as a result of a SELECT or EXAMINE command. The FLAGS response occurs as a result of a SELECT or EXAMINE command.
The flag parenthesized list identifies the flags (at a minimum, the The flag parenthesized list identifies the flags (at a minimum, the
system-defined flags) that are applicable for this mailbox. Flags system-defined flags) that are applicable for this mailbox. Flags
other than the system flags can also exist, depending on server other than the system flags can also exist, depending on server
implementation. implementation.
The update from the FLAGS response MUST be recorded by the client. The update from the FLAGS response MUST be recorded by the client.
skipping to change at page 117, line 7 skipping to change at page 115, line 7
; Servers MUST implement the STARTTLS, AUTH=PLAIN, ; Servers MUST implement the STARTTLS, AUTH=PLAIN,
; and LOGINDISABLED capabilities ; and LOGINDISABLED capabilities
; Servers which offer RFC 1730 compatibility MUST ; Servers which offer RFC 1730 compatibility MUST
; list "IMAP4" as the first capability. ; list "IMAP4" as the first capability.
CHAR8 = %x01-ff CHAR8 = %x01-ff
; any OCTET except NUL, %x00 ; any OCTET except NUL, %x00
charset = atom / quoted charset = atom / quoted
childinfo-extended-item = "CHILDINFO" SP "("
list-select-base-opt-quoted
*(SP list-select-base-opt-quoted) ")"
; Extended data item (mbox-list-extended-item)
; returned when the RECURSIVEMATCH
; selection option is specified.
; Note 1: the CHILDINFO tag can be returned
; with and without surrounding quotes, as per
; mbox-list-extended-item-tag production.
; Note 2: The selection options are always returned
; quoted, unlike their specification in
; the extended LIST command.
child-mbox-flag = "\HasChildren" / "\HasNoChildren"
; attributes for CHILDREN return option, at most one
; possible per LIST response
command = tag SP (command-any / command-auth / command-nonauth / command = tag SP (command-any / command-auth / command-nonauth /
command-select) CRLF command-select) CRLF
; Modal based on state ; Modal based on state
command-any = "CAPABILITY" / "LOGOUT" / "NOOP" / enable / x-command command-any = "CAPABILITY" / "LOGOUT" / "NOOP" / enable / x-command
; Valid in all states ; Valid in all states
command-auth = append / create / delete / examine / list / lsub / command-auth = append / create / delete / examine / list /
Namespace-Command / Namespace-Command /
rename / select / status / subscribe / unsubscribe / rename / select / status / subscribe / unsubscribe /
idle idle
; Valid only in Authenticated or Selected state ; Valid only in Authenticated or Selected state
command-nonauth = login / authenticate / "STARTTLS" command-nonauth = login / authenticate / "STARTTLS"
; Valid only when in Not Authenticated state ; Valid only when in Not Authenticated state
command-select = "CLOSE" / "UNSELECT" / "EXPUNGE" / copy / command-select = "CLOSE" / "UNSELECT" / "EXPUNGE" / copy /
move / fetch / store / search / uid move / fetch / store / search / uid
skipping to change at page 118, line 9 skipping to change at page 116, line 26
date-time = DQUOTE date-day-fixed "-" date-month "-" date-year date-time = DQUOTE date-day-fixed "-" date-month "-" date-year
SP time SP zone DQUOTE SP time SP zone DQUOTE
delete = "DELETE" SP mailbox delete = "DELETE" SP mailbox
; Use of INBOX gives a NO error ; Use of INBOX gives a NO error
digit-nz = %x31-39 digit-nz = %x31-39
; 1-9 ; 1-9
eitem-standard-tag = atom
; a tag for extended list data defined in a Standard
; Track or Experimental RFC.
eitem-vendor-tag = vendor-token "-" atom
; a vendor-specific tag for extended list data
enable = "ENABLE" 1*(SP capability) enable = "ENABLE" 1*(SP capability)
enable-data = "ENABLED" *(SP capability) enable-data = "ENABLED" *(SP capability)
envelope = "(" env-date SP env-subject SP env-from SP envelope = "(" env-date SP env-subject SP env-from SP
env-sender SP env-reply-to SP env-to SP env-cc SP env-sender SP env-reply-to SP env-to SP env-cc SP
env-bcc SP env-in-reply-to SP env-message-id ")" env-bcc SP env-in-reply-to SP env-message-id ")"
env-bcc = "(" 1*address ")" / nil env-bcc = "(" 1*address ")" / nil
skipping to change at page 118, line 48 skipping to change at page 117, line 23
*(SP search-return-data) *(SP search-return-data)
; ESEARCH response replaces SEARCH response ; ESEARCH response replaces SEARCH response
; from IMAP4rev1. ; from IMAP4rev1.
examine = "EXAMINE" SP mailbox examine = "EXAMINE" SP mailbox
fetch = "FETCH" SP sequence-set SP ("ALL" / "FULL" / "FAST" / fetch = "FETCH" SP sequence-set SP ("ALL" / "FULL" / "FAST" /
fetch-att / "(" fetch-att *(SP fetch-att) ")") fetch-att / "(" fetch-att *(SP fetch-att) ")")
fetch-att = "ENVELOPE" / "FLAGS" / "INTERNALDATE" / fetch-att = "ENVELOPE" / "FLAGS" / "INTERNALDATE" /
"RFC822" [".HEADER" / ".SIZE" / ".TEXT"] / "RFC822.SIZE" /
"BODY" ["STRUCTURE"] / "UID" / "BODY" ["STRUCTURE"] / "UID" /
"BODY" section [partial] / "BODY" section [partial] /
"BODY.PEEK" section [partial] / "BODY.PEEK" section [partial] /
"BINARY" [".PEEK"] section-binary [partial] / "BINARY" [".PEEK"] section-binary [partial] /
"BINARY.SIZE" section-binary "BINARY.SIZE" section-binary /
fetch-att-deprecated
fetch-att-deprecated = "RFC822" [".HEADER" / .TEXT"]
flag = "\Answered" / "\Flagged" / "\Deleted" / flag = "\Answered" / "\Flagged" / "\Deleted" /
"\Seen" / "\Draft" / flag-keyword / flag-extension "\Seen" / "\Draft" / flag-keyword / flag-extension
; Does not include "\Recent" ; Does not include "\Recent"
flag-extension = "\" atom flag-extension = "\" atom
; Future expansion. Client implementations ; Future expansion. Client implementations
; MUST accept flag-extension flags. Server ; MUST accept flag-extension flags. Server
; implementations MUST NOT generate ; implementations MUST NOT generate
; flag-extension flags except as defined by ; flag-extension flags except as defined by
skipping to change at page 119, line 41 skipping to change at page 118, line 18
header-fld-name = astring header-fld-name = astring
header-list = "(" header-fld-name *(SP header-fld-name) ")" header-list = "(" header-fld-name *(SP header-fld-name) ")"
idle = "IDLE" CRLF "DONE" idle = "IDLE" CRLF "DONE"
initial-resp = (base64 / "=") initial-resp = (base64 / "=")
; "initial response" defined in ; "initial response" defined in
; Section 5.1 of [RFC4422] ; Section 5.1 of [RFC4422]
list = "LIST" SP mailbox SP list-mailbox list = "LIST" [SP list-select-opts] SP mailbox SP mbox-or-pat
[SP list-return-opts]
list-mailbox = 1*list-char / string list-mailbox = 1*list-char / string
list-char = ATOM-CHAR / list-wildcards / resp-specials list-char = ATOM-CHAR / list-wildcards / resp-specials
list-return-opts = "RETURN" SP
"(" [return-option *(SP return-option)] ")"
; list return options, e.g., CHILDREN
list-select-base-opt = "SUBSCRIBED" / option-extension
; options that can be used by themselves
list-select-base-opt-quoted = DQUOTE list-select-base-opt DQUOTE
list-select-independent-opt = "REMOTE" / option-extension
; options that do not syntactically interact with
; other options
list-select-mod-opt = "RECURSIVEMATCH" / option-extension
; options that require a list-select-base-opt
; to also be present
list-select-opt = list-select-base-opt / list-select-independent-opt
/ list-select-mod-opt
; An option registration template is described in
; Section 9.3 of this document.
list-select-opts = "(" [
(*(list-select-opt SP) list-select-base-opt
*(SP list-select-opt))
/ (list-select-independent-opt
*(SP list-select-independent-opt))
] ")"
; Any number of options may be in any order.
; If a list-select-mod-opt appears, then a
; list-select-base-opt must also appear.
; This allows these:
; ()
; (REMOTE)
; (SUBSCRIBED)
; (SUBSCRIBED REMOTE)
; (SUBSCRIBED RECURSIVEMATCH)
; (SUBSCRIBED REMOTE RECURSIVEMATCH)
; But does NOT allow these:
; (RECURSIVEMATCH)
; (REMOTE RECURSIVEMATCH)
list-wildcards = "%" / "*" list-wildcards = "%" / "*"
literal = "{" number ["+"] "}" CRLF *CHAR8 literal = "{" number ["+"] "}" CRLF *CHAR8
; <number> represents the number of CHAR8s. ; <number> represents the number of CHAR8s.
; A non-synchronizing literal is distinguished from ; A non-synchronizing literal is distinguished from
; a synchronizing literal by presence of the "+" ; a synchronizing literal by presence of the "+"
; before the closing "}". ; before the closing "}".
; Non synchronizing literals are not allowed when ; Non synchronizing literals are not allowed when
; sent from server to the client. ; sent from server to the client.
literal8 = "~{" number "}" CRLF *OCTET literal8 = "~{" number "}" CRLF *OCTET
; <number> represents the number of OCTETs ; <number> represents the number of OCTETs
; in the response string. ; in the response string.
login = "LOGIN" SP userid SP password login = "LOGIN" SP userid SP password
lsub = "LSUB" SP mailbox SP list-mailbox
mailbox = "INBOX" / astring mailbox = "INBOX" / astring
; INBOX is case-insensitive. All case variants of ; INBOX is case-insensitive. All case variants of
; INBOX (e.g., "iNbOx") MUST be interpreted as INBOX ; INBOX (e.g., "iNbOx") MUST be interpreted as INBOX
; not as an astring. An astring which consists of ; not as an astring. An astring which consists of
; the case-insensitive sequence "I" "N" "B" "O" "X" ; the case-insensitive sequence "I" "N" "B" "O" "X"
; is considered to be INBOX and not an astring. ; is considered to be INBOX and not an astring.
; Refer to section 5.1 for further ; Refer to section 5.1 for further
; semantic details of mailbox names. ; semantic details of mailbox names.
mailbox-data = "FLAGS" SP flag-list / "LIST" SP mailbox-list / mailbox-data = "FLAGS" SP flag-list / "LIST" SP mailbox-list /
"LSUB" SP mailbox-list / esearch-response / esearch-response /
"STATUS" SP mailbox SP "(" [status-att-list] ")" / "STATUS" SP mailbox SP "(" [status-att-list] ")" /
number SP "EXISTS" / Namespace-Response number SP "EXISTS" / Namespace-Response
mailbox-list = "(" [mbx-list-flags] ")" SP mailbox-list = "(" [mbx-list-flags] ")" SP
(DQUOTE QUOTED-CHAR DQUOTE / nil) SP mailbox (DQUOTE QUOTED-CHAR DQUOTE / nil) SP mailbox
[SP mbox-list-extended]
; This is the list information pointed to by the ABNF
; item "mailbox-data", which is defined in [IMAP4]
mbox-list-extended = "(" [mbox-list-extended-item
*(SP mbox-list-extended-item)] ")"
mbox-list-extended-item = mbox-list-extended-item-tag SP
tagged-ext-val
mbox-list-extended-item-tag = astring
; The content MUST conform to either "eitem-vendor-tag"
; or "eitem-standard-tag" ABNF productions.
mbox-or-pat = list-mailbox / patterns
mbx-list-flags = *(mbx-list-oflag SP) mbx-list-sflag mbx-list-flags = *(mbx-list-oflag SP) mbx-list-sflag
*(SP mbx-list-oflag) / *(SP mbx-list-oflag) /
mbx-list-oflag *(SP mbx-list-oflag) mbx-list-oflag *(SP mbx-list-oflag)
mbx-list-oflag = "\Noinferiors" / flag-extension mbx-list-oflag = "\Noinferiors" / child-mbox-flag /
"\Subscribed" / "\Remote" / flag-extension
; Other flags; multiple possible per LIST response ; Other flags; multiple possible per LIST response
mbx-list-sflag = "\Noselect" / "\Marked" / "\Unmarked" mbx-list-sflag = "\NonExistent" / "\Noselect" / "\Marked" / "\Unmarked"
; Selectability flags; only one per LIST response ; Selectability flags; only one per LIST response
media-basic = ((DQUOTE ("APPLICATION" / "AUDIO" / "IMAGE" / media-basic = ((DQUOTE ("APPLICATION" / "AUDIO" / "IMAGE" /
"MESSAGE" / "VIDEO" / "FONT") DQUOTE) / string) SP "MESSAGE" / "VIDEO" / "FONT") DQUOTE) / string) SP
media-subtype media-subtype
; Defined in [MIME-IMT]. ; Defined in [MIME-IMT].
; FONT defined in RFC YYYY. ; FONT defined in RFC YYYY.
media-message = DQUOTE "MESSAGE" DQUOTE SP media-message = DQUOTE "MESSAGE" DQUOTE SP
DQUOTE ("RFC822" / "GLOBAL") DQUOTE DQUOTE ("RFC822" / "GLOBAL") DQUOTE
skipping to change at page 122, line 18 skipping to change at page 122, line 6
; (0 <= n < 4,294,967,296) ; (0 <= n < 4,294,967,296)
number64 = 1*DIGIT number64 = 1*DIGIT
; Unsigned 63-bit integer ; Unsigned 63-bit integer
; (0 <= n <= 9,223,372,036,854,775,807) ; (0 <= n <= 9,223,372,036,854,775,807)
nz-number = digit-nz *DIGIT nz-number = digit-nz *DIGIT
; Non-zero unsigned 32-bit integer ; Non-zero unsigned 32-bit integer
; (0 < n < 4,294,967,296) ; (0 < n < 4,294,967,296)
password = astring option-extension = (option-standard-tag / option-vendor-tag)
[SP option-value]
option-standard-tag = atom
; an option defined in a Standards Track or
; Experimental RFC
option-val-comp = astring /
option-val-comp *(SP option-val-comp) /
"(" option-val-comp ")"
option-value = "(" option-val-comp ")"
option-vendor-tag = vendor-token "-" atom
; a vendor-specific option, non-standard
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
patterns = "(" list-mailbox *(SP list-mailbox) ")"
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 123, line 38 skipping to change at page 123, line 45
"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
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 /
"NEW" / "OLD" / "ON" SP date / "SEEN" / "NEW" / "OLD" / "ON" SP date / "SEEN" /
"SINCE" SP date / "SUBJECT" SP astring / "SINCE" SP date / "SUBJECT" SP astring /
"TEXT" SP astring / "TO" SP astring / "TEXT" SP astring / "TO" SP astring /
"UNANSWERED" / "UNDELETED" / "UNFLAGGED" / "UNANSWERED" / "UNDELETED" / "UNFLAGGED" /
"UNKEYWORD" SP flag-keyword / "UNSEEN" / "UNKEYWORD" SP flag-keyword / "UNSEEN" /
; Above this line were in [IMAP2] ; Above this line were in [IMAP2]
skipping to change at page 136, line 38 skipping to change at page 136, line 38
Servers advertising both IMAP4rev1 and IMAP4rev2 SHOULD NOT generate Servers advertising both IMAP4rev1 and IMAP4rev2 SHOULD 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 A.1. Mailbox International Naming Convention for compatibility with
IMAP4rev1
By convention, international mailbox names in IMAP4rev2 are specified Support for the Mailbox International Naming Convention described in
this section is not required for IMAP4rev2-only clients and servers.
By convention, international mailbox names in IMAP4rev1 are specified
using a modified version of the UTF-7 encoding described in [UTF-7]. using a modified version of the UTF-7 encoding described in [UTF-7].
Modified UTF-7 may also be usable in servers that implement an Modified UTF-7 may also be usable in servers that implement an
earlier version of this protocol. earlier version of this protocol.
In modified UTF-7, printable US-ASCII characters, except for "&", In modified UTF-7, printable US-ASCII characters, except for "&",
represent themselves; that is, characters with octet values 0x20-0x25 represent themselves; that is, characters with octet values 0x20-0x25
and 0x27-0x7e. The character "&" (0x26) is represented by the two- and 0x27-0x7e. The character "&" (0x26) is represented by the two-
octet sequence "&-". octet sequence "&-".
All other characters (octet values 0x00-0x1f and 0x7f-0xff) are All other characters (octet values 0x00-0x1f and 0x7f-0xff) are
skipping to change at page 139, line 20 skipping to change at page 139, line 24
8. Deprecate features: What should we do with NEW search key (which 8. Deprecate features: What should we do with NEW search key (which
implies RECENT): deprecate it or just redefine it to ignore implies RECENT): deprecate it or just redefine it to ignore
RECENT state? RECENT state?
9. Drop UTF-7, all mailboxes are always in UTF-8 - done. 9. Drop UTF-7, all mailboxes are always in UTF-8 - done.
10. Revise IANA registration of IMAP extensions and give advice on 10. Revise IANA registration of IMAP extensions and give advice on
use of "X-" convention. use of "X-" convention.
11. Allow word-based searching (as per Chris Newman)? 11. Allow word-based searching (as per Chris Newman)? Need to
discuss header field search, where exact/substring match is
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) and MOVE (RFC 6851) extensions. Also folded RFC 5530 and
FETCH side of the BINARY extension (RFC 3516). 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
skipping to change at page 140, line 16 skipping to change at page 140, line 22
11. RECENT response on SELECT/EXAMINE, \Recent flag, RECENT STATUS 11. RECENT response on SELECT/EXAMINE, \Recent flag, RECENT STATUS
item are now deprecated. item are now deprecated.
12. Clarified that the server doesn't need to send a new 12. Clarified that the server doesn't need to send a new
PERMANENTFLAGS response code when a new keyword was successfully PERMANENTFLAGS response code when a new keyword was successfully
added and the server advertised \* earlier for the same mailbox. added and the server advertised \* earlier for the same mailbox.
13. Removed the CHECK command. Clients should use NOOP instead. 13. Removed the CHECK command. Clients should use NOOP instead.
14. Replaced DIGEST-MD5 SASL mechanism with SCRAM-SHA-256. DIGEST- 14. RFC822, RFC822.HEADER and RFC822.TEXT FETCH data items are
deprecated, but supported in this document.
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
(SUBSCRIBED) instead.
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 for extensive feedback. Thank you to Timo Sirainen, Bron Gondwana and Arnt Gulbrandsen for
extensive feedback.
This document incorporate text from RFC 4315, RFC 4466, RFC 4731, RFC This document incorporate text from RFC 4315, RFC 4466, RFC 4731, RFC
5161, RFC 6154 so work done by authors/editors of these documents is 5161, RFC 6154 so work done by authors/editors of these documents is
appreciated. appreciated.
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> 80
+FLAGS.SILENT <flag list> 81 +FLAGS.SILENT <flag list> 80
- -
-FLAGS <flag list> 82 -FLAGS <flag list> 80
-FLAGS.SILENT <flag list> 82 -FLAGS.SILENT <flag list> 80
A A
ALERT (response code) 89 ALERT (response code) 87
ALL (fetch item) 77 ALL (fetch item) 75
ALL (search key) 73 ALL (search key) 72
ALL (search result option) 72 ALL (search result option) 70
ALREADYEXISTS (response code) 89 ALREADYEXISTS (response code) 87
ANSWERED (search key) 73 ANSWERED (search key) 72
APPEND (command) 65 APPEND (command) 63
APPENDUID (response code) 89 APPENDUID (response code) 87
AUTHENTICATE (command) 28 AUTHENTICATE (command) 28
AUTHENTICATIONFAILED (response code) 90 AUTHENTICATIONFAILED (response code) 88
AUTHORIZATIONFAILED (response code) 90 AUTHORIZATIONFAILED (response code) 88
B B
BAD (response) 97 BAD (response) 95
BADCHARSET (response code) 90 BADCHARSET (response code) 88
BCC <string> (search key) 73 BCC <string> (search key) 72
BEFORE <date> (search key) 73 BEFORE <date> (search key) 72
BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 78 BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 76
BINARY.SIZE[<section-binary>] (fetch item) 78 BINARY.SIZE[<section-binary>] (fetch item) 76
BINARY.SIZE[<section-binary>] (fetch result) 106 BINARY.SIZE[<section-binary>] (fetch result) 104
BINARY[<section-binary>]<<number>> (fetch result) 105 BINARY[<section-binary>]<<number>> (fetch result) 104
BINARY[<section-binary>]<<partial>> (fetch item) 77 BINARY[<section-binary>]<<partial>> (fetch item) 75
BODY (fetch item) 78 BODY (fetch item) 76
BODY (fetch result) 106 BODY (fetch result) 105
BODY <string> (search key) 74 BODY <string> (search key) 72
BODY.PEEK[<section>]<<partial>> (fetch item) 80 BODY.PEEK[<section>]<<partial>> (fetch item) 78
BODYSTRUCTURE (fetch item) 80 BODYSTRUCTURE (fetch item) 78
BODYSTRUCTURE (fetch result) 107 BODYSTRUCTURE (fetch result) 105
BODY[<section>]<<origin octet>> (fetch result) 106 BODY[<section>]<<origin octet>> (fetch result) 105
BODY[<section>]<<partial>> (fetch item) 78 BODY[<section>]<<partial>> (fetch item) 76
BYE (response) 97 BYE (response) 95
Body Structure (message attribute) 13 Body Structure (message attribute) 13
C C
CANNOT (response code) 90 CANNOT (response code) 88
CAPABILITY (command) 24 CAPABILITY (command) 24
CAPABILITY (response code) 90 CAPABILITY (response code) 88
CAPABILITY (response) 98 CAPABILITY (response) 96
CC <string> (search key) 74 CC <string> (search key) 72
CLIENTBUG (response code) 91 CLIENTBUG (response code) 89
CLOSE (command) 69 CLOSE (command) 68
CLOSED (response code) 91 CLOSED (response code) 89
CONTACTADMIN (response code) 91 CONTACTADMIN (response code) 89
COPY (command) 82 COPY (command) 80
COPYUID (response code) 91 COPYUID (response code) 89
CORRUPTION (response code) 92 CORRUPTION (response code) 90
COUNT (search result option) 72 COUNT (search result option) 71
CREATE (command) 36 CREATE (command) 36
D D
DELETE (command) 37 DELETE (command) 37
DELETED (search key) 74 DELETED (search key) 72
DRAFT (search key) 74 DRAFT (search key) 72
E E
ENABLE (command) 32 ENABLE (command) 32
ENVELOPE (fetch item) 80 ENVELOPE (fetch item) 78
ENVELOPE (fetch result) 109 ENVELOPE (fetch result) 108
ESEARCH (response) 103 ESEARCH (response) 101
EXAMINE (command) 35 EXAMINE (command) 35
EXPIRED (response code) 92 EXPIRED (response code) 90
EXPUNGE (command) 70 EXPUNGE (command) 69
EXPUNGE (response) 104 EXPUNGE (response) 103
EXPUNGEISSUED (response code) 92 EXPUNGEISSUED (response code) 90
Envelope Structure (message attribute) 13 Envelope Structure (message attribute) 13
F F
FAST (fetch item) 77 FAST (fetch item) 75
FETCH (command) 77 FETCH (command) 75
FETCH (response) 105 FETCH (response) 104
FLAGGED (search key) 74 FLAGGED (search key) 72
FLAGS (fetch item) 80 FLAGS (fetch item) 78
FLAGS (fetch result) 111 FLAGS (fetch result) 109
FLAGS (response) 104 FLAGS (response) 102
FLAGS <flag list> (store command data item) 81 FLAGS <flag list> (store command data item) 79
FLAGS.SILENT <flag list> (store command data item) 81 FLAGS.SILENT <flag list> (store command data item) 79
FROM <string> (search key) 74 FROM <string> (search key) 72
FULL (fetch item) 77 FULL (fetch item) 75
Flags (message attribute) 11 Flags (message attribute) 11
H H
HEADER (part specifier) 78 HEADER (part specifier) 76
HEADER <field-name> <string> (search key) 74 HEADER <field-name> <string> (search key) 72
HEADER.FIELDS (part specifier) 78 HEADER.FIELDS (part specifier) 76
HEADER.FIELDS.NOT (part specifier) 78 HEADER.FIELDS.NOT (part specifier) 76
I I
IDLE (command) 67 IDLE (command) 66
INTERNALDATE (fetch item) 80 INTERNALDATE (fetch item) 78
INTERNALDATE (fetch result) 111 INTERNALDATE (fetch result) 109
INUSE (response code) 92 INUSE (response code) 90
Internal Date (message attribute) 12 Internal Date (message attribute) 12
K K
KEYWORD <flag> (search key) 74 KEYWORD <flag> (search key) 72
Keyword (type of flag) 12 Keyword (type of flag) 12
L L
LARGER <n> (search key) 74 LARGER <n> (search key) 72
LIMIT (response code) 93 LIMIT (response code) 91
LIST (command) 41 LIST (command) 41
LIST (response) 99 LIST (response) 97
LOGOUT (command) 26 LOGOUT (command) 26
LSUB (command) 58
LSUB (response) 102
M M
MAX (search result option) 72 MAX (search result option) 70
MAY (specification requirement term) 5 MAY (specification requirement term) 5
MESSAGES (status item) 64 MESSAGES (status item) 63
MIME (part specifier) 79 MIME (part specifier) 77
MIN (search result option) 72 MIN (search result option) 70
MOVE (command) 83 MOVE (command) 81
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) 59 NAMESPACE (command) 57
NAMESPACE (response) 102 NAMESPACE (response) 101
NEW (search key) 74 NEW (search key) 72
NO (response) 96 NO (response) 94
NONEXISTENT (response code) 93 NONEXISTENT (response code) 91
NOOP (command) 25 NOOP (command) 25
NOPERM (response code) 93 NOPERM (response code) 91
NOT <search-key> (search key) 74 NOT <search-key> (search key) 73
NOT RECOMMENDED (specification requirement term) 5 NOT RECOMMENDED (specification requirement term) 5
O O
OK (response) 96 OK (response) 94
ON <date> (search key) 74 ON <date> (search key) 73
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) 73
OVERQUOTA (response code) 93 OVERQUOTA (response code) 91
P P
PARSE (response code) 94 PARSE (response code) 92
PERMANENTFLAGS (response code) 94 PERMANENTFLAGS (response code) 92
PREAUTH (response) 97 PREAUTH (response) 95
PRIVACYREQUIRED (response code) 94 PRIVACYREQUIRED (response code) 92
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) 92
READ-WRITE (response code) 94 READ-WRITE (response code) 92
RECOMMENDED (specification requirement term) 5 RECOMMENDED (specification requirement term) 5
RENAME (command) 38 RENAME (command) 38
REQUIRED (specification requirement term) 5 REQUIRED (specification requirement term) 5
RFC822 (fetch item) 80 RFC822 (fetch item) 78
RFC822 (fetch result) 111 RFC822 (fetch result) 109
RFC822.HEADER (fetch item) 80 RFC822.HEADER (fetch item) 78
RFC822.HEADER (fetch result) 111 RFC822.HEADER (fetch result) 109
RFC822.SIZE (fetch item) 80 RFC822.SIZE (fetch item) 79
RFC822.SIZE (fetch result) 111 RFC822.SIZE (fetch result) 109
RFC822.TEXT (fetch item) 80 RFC822.TEXT (fetch item) 79
RFC822.TEXT (fetch result) 111 RFC822.TEXT (fetch result) 109
S S
SEARCH (command) 71 SEARCH (command) 69
SEEN (search key) 74 SEEN (search key) 73
SELECT (command) 34 SELECT (command) 34
SENTBEFORE <date> (search key) 74 SENTBEFORE <date> (search key) 73
SENTON <date> (search key) 74 SENTON <date> (search key) 73
SENTSINCE <date> (search key) 75 SENTSINCE <date> (search key) 73
SERVERBUG (response code) 94 SERVERBUG (response code) 92
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) 73
SIZE (status item) 65 SIZE (status item) 63
SMALLER <n> (search key) 75 SMALLER <n> (search key) 73
STARTTLS (command) 27 STARTTLS (command) 27
STATUS (command) 63 STATUS (command) 62
STATUS (response) 103 STATUS (response) 101
STORE (command) 81 STORE (command) 79
SUBJECT <string> (search key) 75 SUBJECT <string> (search key) 73
SUBSCRIBE (command) 40 SUBSCRIBE (command) 40
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) 76
TEXT <string> (search key) 75 TEXT <string> (search key) 73
TO <string> (search key) 75 TO <string> (search key) 73
TRYCREATE (response code) 95 TRYCREATE (response code) 93
U U
UID (command) 85 UID (command) 83
UID (fetch item) 80 UID (fetch item) 79
UID (fetch result) 111 UID (fetch result) 109
UID <sequence set> (search key) 75 UID <sequence set> (search key) 73
UIDNEXT (response code) 95 UIDNEXT (response code) 93
UIDNEXT (status item) 64 UIDNEXT (status item) 63
UIDNOTSTICKY (response code) 95 UIDNOTSTICKY (response code) 93
UIDVALIDITY (response code) 95 UIDVALIDITY (response code) 93
UIDVALIDITY (status item) 64 UIDVALIDITY (status item) 63
UNANSWERED (search key) 75 UNANSWERED (search key) 73
UNAVAILABLE (response code) 95 UNAVAILABLE (response code) 93
UNDELETED (search key) 75 UNDELETED (search key) 73
UNDRAFT (search key) 75 UNDRAFT (search key) 73
UNFLAGGED (search key) 75 UNFLAGGED (search key) 73
UNKEYWORD <flag> (search key) 75 UNKEYWORD <flag> (search key) 74
UNKNOWN-CTE (response code) 95 UNKNOWN-CTE (response code) 93
UNSEEN (search key) 75 UNSEEN (search key) 74
UNSEEN (status item) 64 UNSEEN (status item) 63
UNSELECT (command) 70 UNSELECT (command) 68
UNSUBSCRIBE (command) 41 UNSUBSCRIBE (command) 41
Unique Identifier (UID) (message attribute) 9 Unique Identifier (UID) (message attribute) 9
X X
X<atom> (command) 87 X<atom> (command) 85
[ [
[RFC-5322] Size (message attribute) 13 [RFC-5322] Size (message attribute) 13
\ \
\All (mailbox name attribute) 101 \All (mailbox name attribute) 99
\Answered (system flag) 11 \Answered (system flag) 11
\Archive (mailbox name attribute) 101 \Archive (mailbox name attribute) 99
\Deleted (system flag) 11 \Deleted (system flag) 11
\Draft (system flag) 12 \Draft (system flag) 12
\Drafts (mailbox name attribute) 101 \Drafts (mailbox name attribute) 99
\Flagged (mailbox name attribute) 101 \Flagged (mailbox name attribute) 100
\Flagged (system flag) 11 \Flagged (system flag) 11
\HasChildren (mailbox name attribute) 100 \HasChildren (mailbox name attribute) 98
\HasNoChildren (mailbox name attribute) 100 \HasNoChildren (mailbox name attribute) 98
\Junk (mailbox name attribute) 101 \Junk (mailbox name attribute) 100
\Marked (mailbox name attribute) 100 \Marked (mailbox name attribute) 99
\Noinferiors (mailbox name attribute) 100 \Noinferiors (mailbox name attribute) 98
\Noselect (mailbox name attribute) 100 \NonExistent (mailbox name attribute) 98
\Noselect (mailbox name attribute) 98
\Recent (system flag) 12 \Recent (system flag) 12
\Remote (mailbox name attribute) 99
\Seen (system flag) 11 \Seen (system flag) 11
\Sent (mailbox name attribute) 101 \Sent (mailbox name attribute) 100
\Trash (mailbox name attribute) 101 \Subscribed (mailbox name attribute) 99
\Unmarked (mailbox name attribute) 100 \Trash (mailbox name attribute) 100
\Unmarked (mailbox name attribute) 99
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
Barry Leiba (editor) Barry Leiba (editor)
Huawei Technologies Huawei Technologies
 End of changes. 107 change blocks. 
358 lines changed or deleted 440 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/