draft-ietf-extra-imap4rev2-10.txt   draft-ietf-extra-imap4rev2-11.txt 
Network Working Group A. Melnikov, Ed. Network Working Group A. Melnikov, Ed.
Internet-Draft Isode Ltd Internet-Draft Isode Ltd
Obsoletes: 3501 (if approved) B. Leiba, Ed. Obsoletes: 3501 (if approved) B. Leiba, Ed.
Intended status: Standards Track Huawei Technologies Intended status: Standards Track Huawei Technologies
Expires: May 29, 2020 November 26, 2019 Expires: June 5, 2020 December 3, 2019
INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev2 INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev2
draft-ietf-extra-imap4rev2-10 draft-ietf-extra-imap4rev2-11
Abstract Abstract
The Internet Message Access Protocol, Version 4rev2 (IMAP4rev2) The Internet Message Access Protocol, Version 4rev2 (IMAP4rev2)
allows a client to access and manipulate electronic mail messages on allows a client to access and manipulate electronic mail messages on
a server. IMAP4rev2 permits manipulation of mailboxes (remote a server. IMAP4rev2 permits manipulation of mailboxes (remote
message folders) in a way that is functionally equivalent to local message folders) in a way that is functionally equivalent to local
folders. IMAP4rev2 also provides the capability for an offline folders. IMAP4rev2 also provides the capability for an offline
client to resynchronize with the server. client to resynchronize with the server.
skipping to change at page 1, line 47 skipping to change at page 1, line 47
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 29, 2020. This Internet-Draft will expire on June 5, 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 23 skipping to change at page 3, line 23
4.4. Parenthesized List . . . . . . . . . . . . . . . . . . . 18 4.4. Parenthesized List . . . . . . . . . . . . . . . . . . . 18
4.5. NIL . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.5. NIL . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5. Operational Considerations . . . . . . . . . . . . . . . . . 19 5. Operational Considerations . . . . . . . . . . . . . . . . . 19
5.1. Mailbox Naming . . . . . . . . . . . . . . . . . . . . . 19 5.1. Mailbox Naming . . . . . . . . . . . . . . . . . . . . . 19
5.1.1. Mailbox Hierarchy Naming . . . . . . . . . . . . . . 20 5.1.1. Mailbox Hierarchy Naming . . . . . . . . . . . . . . 20
5.1.2. Namespaces . . . . . . . . . . . . . . . . . . . . . 20 5.1.2. Namespaces . . . . . . . . . . . . . . . . . . . . . 20
5.2. Mailbox Size and Message Status Updates . . . . . . . . . 21 5.2. Mailbox Size and Message Status Updates . . . . . . . . . 21
5.3. Response when no Command in Progress . . . . . . . . . . 22 5.3. Response when no Command in Progress . . . . . . . . . . 22
5.4. Autologout Timer . . . . . . . . . . . . . . . . . . . . 22 5.4. Autologout Timer . . . . . . . . . . . . . . . . . . . . 22
5.5. Multiple Commands in Progress (Command Pipelining) . . . 22 5.5. Multiple Commands in Progress (Command Pipelining) . . . 22
6. Client Commands . . . . . . . . . . . . . . . . . . . . . . . 23 6. Client Commands . . . . . . . . . . . . . . . . . . . . . . . 24
6.1. Client Commands - Any State . . . . . . . . . . . . . . . 24 6.1. Client Commands - Any State . . . . . . . . . . . . . . . 24
6.1.1. CAPABILITY Command . . . . . . . . . . . . . . . . . 24 6.1.1. CAPABILITY Command . . . . . . . . . . . . . . . . . 24
6.1.2. NOOP Command . . . . . . . . . . . . . . . . . . . . 25 6.1.2. NOOP Command . . . . . . . . . . . . . . . . . . . . 25
6.1.3. LOGOUT Command . . . . . . . . . . . . . . . . . . . 26 6.1.3. LOGOUT Command . . . . . . . . . . . . . . . . . . . 26
6.2. Client Commands - Not Authenticated State . . . . . . . . 26 6.2. Client Commands - Not Authenticated State . . . . . . . . 26
6.2.1. STARTTLS Command . . . . . . . . . . . . . . . . . . 27 6.2.1. STARTTLS Command . . . . . . . . . . . . . . . . . . 27
6.2.2. AUTHENTICATE Command . . . . . . . . . . . . . . . . 28 6.2.2. AUTHENTICATE Command . . . . . . . . . . . . . . . . 28
6.2.3. LOGIN Command . . . . . . . . . . . . . . . . . . . . 31 6.2.3. LOGIN Command . . . . . . . . . . . . . . . . . . . . 31
6.3. Client Commands - Authenticated State . . . . . . . . . . 31 6.3. Client Commands - Authenticated State . . . . . . . . . . 32
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 . . . . . . . . . . . . . . . . . . . 36 6.3.3. EXAMINE Command . . . . . . . . . . . . . . . . . . . 36
6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 37 6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 37
6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 38 6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 38
6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 39 6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 39
6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 41 6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 41
6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 42 6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 42
6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 42 6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 42
6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 60 6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 60
6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 65 6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 65
6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 66 6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 66
6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 69 6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 69
6.4. Client Commands - Selected State . . . . . . . . . . . . 71 6.4. Client Commands - Selected State . . . . . . . . . . . . 71
6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 71 6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 71
6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 72 6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 72
6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 72 6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 72
6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 73 6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 73
6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 79 6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 85
6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 83 6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 89
6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 84 6.4.7. COPY Command . . . . . . . . . . . . . . . . . . . . 90
6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 85 6.4.8. MOVE Command . . . . . . . . . . . . . . . . . . . . 91
6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 87 6.4.9. UID Command . . . . . . . . . . . . . . . . . . . . . 93
6.5. Client Commands - Experimental/Expansion . . . . . . . . 88 6.5. Client Commands - Experimental/Expansion . . . . . . . . 95
6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 88 6.5.1. X<atom> Command . . . . . . . . . . . . . . . . . . . 95
7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 89 7. Server Responses . . . . . . . . . . . . . . . . . . . . . . 96
7.1. Server Responses - Status Responses . . . . . . . . . . . 90 7.1. Server Responses - Status Responses . . . . . . . . . . . 97
7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 98 7.1.1. OK Response . . . . . . . . . . . . . . . . . . . . . 105
7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 98 7.1.2. NO Response . . . . . . . . . . . . . . . . . . . . . 105
7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 99 7.1.3. BAD Response . . . . . . . . . . . . . . . . . . . . 106
7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 99 7.1.4. PREAUTH Response . . . . . . . . . . . . . . . . . . 106
7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 100 7.1.5. BYE Response . . . . . . . . . . . . . . . . . . . . 106
7.2. Server Responses - Server and Mailbox Status . . . . . . 100 7.2. Server Responses - Server and Mailbox Status . . . . . . 107
7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 100 7.2.1. The ENABLED Response . . . . . . . . . . . . . . . . 107
7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 101 7.2.2. CAPABILITY Response . . . . . . . . . . . . . . . . . 107
7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 102 7.2.3. LIST Response . . . . . . . . . . . . . . . . . . . . 108
7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 105 7.2.4. NAMESPACE Response . . . . . . . . . . . . . . . . . 112
7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 105 7.2.5. STATUS Response . . . . . . . . . . . . . . . . . . . 112
7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 106 7.2.6. ESEARCH Response . . . . . . . . . . . . . . . . . . 113
7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 106 7.2.7. FLAGS Response . . . . . . . . . . . . . . . . . . . 113
7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 107 7.3. Server Responses - Mailbox Size . . . . . . . . . . . . . 114
7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 107 7.3.1. EXISTS Response . . . . . . . . . . . . . . . . . . . 114
7.4. Server Responses - Message Status . . . . . . . . . . . . 107 7.4. Server Responses - Message Status . . . . . . . . . . . . 114
7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 107 7.4.1. EXPUNGE Response . . . . . . . . . . . . . . . . . . 114
7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 108 7.4.2. FETCH Response . . . . . . . . . . . . . . . . . . . 115
7.5. Server Responses - Command Continuation Request . . . . . 114 7.5. Server Responses - Command Continuation Request . . . . . 121
8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 114 8. Sample IMAP4rev2 connection . . . . . . . . . . . . . . . . . 121
9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 115 9. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 122
10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 132 10. Author's Note . . . . . . . . . . . . . . . . . . . . . . . . 139
11. Security Considerations . . . . . . . . . . . . . . . . . . . 132 11. Security Considerations . . . . . . . . . . . . . . . . . . . 139
11.1. STARTTLS Security Considerations . . . . . . . . . . . . 132 11.1. STARTTLS Security Considerations . . . . . . . . . . . . 140
11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 133 11.2. COPYUID and APPENDUID response codes . . . . . . . . . . 140
11.3. LIST command and Other Users' namespace . . . . . . . . 133 11.3. LIST command and Other Users' namespace . . . . . . . . 140
11.4. Other Security Considerations . . . . . . . . . . . . . 133 11.4. Other Security Considerations . . . . . . . . . . . . . 141
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 134 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 141
12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 134 12.1. Updates to IMAP4 Capabilities registry . . . . . . . . . 142
12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 135 12.2. GSSAPI/SASL service name . . . . . . . . . . . . . . . . 142
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 135 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 142
13.1. Normative References . . . . . . . . . . . . . . . . . . 135 13.1. Normative References . . . . . . . . . . . . . . . . . . 142
13.2. Informative References (related protocols) . . . . . . . 138 13.2. Informative References (related protocols) . . . . . . . 145
13.3. Informative References (historical aspects of IMAP and 13.3. Informative References (historical aspects of IMAP and
related protocols) . . . . . . . . . . . . . . . . . . . 139 related protocols) . . . . . . . . . . . . . . . . . . . 147
Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 140 Appendix A. Backward compatibility with IMAP4rev1 . . . . . . . 147
A.1. Mailbox International Naming Convention for compatibility A.1. Mailbox International Naming Convention for compatibility
with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 140 with IMAP4rev1 . . . . . . . . . . . . . . . . . . . . . 148
Appendix B. Backward compatibility with BINARY extension . . . . 142 Appendix B. Backward compatibility with BINARY extension . . . . 149
Appendix C. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 142 Appendix C. Changes from RFC 3501 / IMAP4rev1 . . . . . . . . . 150
Appendix D. Acknowledgement . . . . . . . . . . . . . . . . . . 144 Appendix D. Acknowledgement . . . . . . . . . . . . . . . . . . 152
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 150 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 157
1. How to Read This Document 1. How to Read This Document
1.1. Organization of This Document 1.1. Organization of This Document
This document is written from the point of view of the implementor of This document is written from the point of view of the implementor of
an IMAP4rev2 client or server. Beyond the protocol overview in an IMAP4rev2 client or server. Beyond the protocol overview in
section 2, it is not optimized for someone trying to understand the section 2, it is not optimized for someone trying to understand the
operation of the protocol. The material in sections 3 through 5 operation of the protocol. The material in sections 3 through 5
provides the general context and definitions with which IMAP4rev2 provides the general context and definitions with which IMAP4rev2
skipping to change at page 6, line 48 skipping to change at page 6, line 48
Appendix C and [IMAP-OBSOLETE]. Appendix C and [IMAP-OBSOLETE].
Other compatibility issues with IMAP2bis, the most common variant of Other compatibility issues with IMAP2bis, the most common variant of
the earlier protocol, are discussed in [IMAP-COMPAT]. A full the earlier protocol, are discussed in [IMAP-COMPAT]. A full
discussion of compatibility issues with rare (and presumed extinct) discussion of compatibility issues with rare (and presumed extinct)
variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is
primarily of historical interest. primarily of historical interest.
IMAP was originally developed for the older [RFC-822] standard, and IMAP was originally developed for the older [RFC-822] standard, and
as a consequence several fetch items in IMAP incorporate "RFC822" in as a consequence several fetch items in IMAP incorporate "RFC822" in
their name. With the exception of RFC822.SIZE, there are more modern their name. In all cases, "RFC822" should be interpreted as a
replacements; for example, the modern version of RFC822.HEADER is
BODY.PEEK[HEADER]. In all cases, "RFC822" should be interpreted as a
reference to the updated [RFC-5322] standard. reference to the updated [RFC-5322] standard.
2. Protocol Overview 2. Protocol Overview
2.1. Link Level 2.1. Link Level
The IMAP4rev2 protocol assumes a reliable data stream such as that The IMAP4rev2 protocol assumes a reliable data stream such as that
provided by TCP. When TCP is used, an IMAP4rev2 server listens on provided by TCP. When TCP is used, an IMAP4rev2 server listens on
port 143. port 143.
skipping to change at page 22, line 48 skipping to change at page 22, line 48
The client MAY send another command without waiting for the The client MAY send another command without waiting for the
completion result response of a command, subject to ambiguity rules completion result response of a command, subject to ambiguity rules
(see below) and flow control constraints on the underlying data (see below) and flow control constraints on the underlying data
stream. Similarly, a server MAY begin processing another command stream. Similarly, a server MAY begin processing another command
before processing the current command to completion, subject to before processing the current command to completion, subject to
ambiguity rules. However, any command continuation request responses ambiguity rules. However, any command continuation request responses
and command continuations MUST be negotiated before any subsequent and command continuations MUST be negotiated before any subsequent
command is initiated. command is initiated.
The exception is if an ambiguity would result because of a command The exception is if an ambiguity would result because of a command
that would affect the results of other commands. Clients MUST NOT that would affect the results of other commands.
send multiple commands without waiting if an ambiguity would result.
If the server detects a possible ambiguity, it MUST execute commands If the server detects a possible ambiguity, it MUST execute commands
to completion in the order given by the client. to completion in the order given by the client.
The most obvious example of ambiguity is when a command would affect The most obvious example of ambiguity is when a command would affect
the results of another command, e.g., a FETCH of a message's flags the results of another command, e.g., a FETCH of a message's flags
and a STORE of that same message's flags. and a STORE of that same message's flags.
A non-obvious ambiguity occurs with commands that permit an untagged A non-obvious ambiguity occurs with commands that permit an untagged
EXPUNGE response (commands other than FETCH, STORE, and SEARCH), EXPUNGE response (commands other than FETCH, STORE, and SEARCH),
since an untagged EXPUNGE response can invalidate sequence numbers in since an untagged EXPUNGE response can invalidate sequence numbers in
skipping to change at page 23, line 45 skipping to change at page 23, line 45
The following are examples of valid non-waiting command sequences: The following are examples of valid non-waiting command sequences:
FETCH + STORE + SEARCH + NOOP FETCH + STORE + SEARCH + NOOP
STORE + COPY + EXPUNGE STORE + COPY + EXPUNGE
UID SEARCH + UID SEARCH may be valid or invalid as a non-waiting UID SEARCH + UID SEARCH may be valid or invalid as a non-waiting
command sequence, depending upon whether or not the second UID command sequence, depending upon whether or not the second UID
SEARCH contains message sequence numbers. SEARCH contains message sequence numbers.
Use of SEARCH result variable (see Section 6.4.4.1) creates direct
dependency between two commands. See Section 6.4.4.2 for more
considerations about pipelining such dependent commands.
6. Client Commands 6. Client Commands
IMAP4rev2 commands are described in this section. Commands are IMAP4rev2 commands are described in this section. Commands are
organized by the state in which the command is permitted. Commands organized by the state in which the command is permitted. Commands
which are permitted in multiple states are listed in the minimum which are permitted in multiple states are listed in the minimum
permitted state (for example, commands valid in authenticated and permitted state (for example, commands valid in authenticated and
selected state are listed in the authenticated state commands). selected state are listed in the authenticated state commands).
Command arguments, identified by "Arguments:" in the command Command arguments, identified by "Arguments:" in the command
descriptions below, are described by function, not by syntax. The descriptions below, are described by function, not by syntax. The
skipping to change at page 73, line 30 skipping to change at page 73, line 30
Note: In this example, messages 3, 4, 7, and 11 had the \Deleted flag Note: In this example, messages 3, 4, 7, and 11 had the \Deleted flag
set. See the description of the EXPUNGE response for further set. See the description of the EXPUNGE response for further
explanation. explanation.
6.4.4. SEARCH Command 6.4.4. SEARCH Command
Arguments: OPTIONAL result specifier Arguments: OPTIONAL result specifier
OPTIONAL [CHARSET] specification OPTIONAL [CHARSET] specification
searching criteria (one or more) searching criteria (one or more)
Responses: REQUIRED untagged response: ESEARCH Responses: OPTIONAL untagged response: ESEARCH
Result: OK - search completed Result: OK - search completed
NO - search error: can't search that [CHARSET] or NO - search error: can't search that [CHARSET] or
criteria criteria
BAD - command unknown or arguments invalid BAD - command unknown or arguments invalid
The SEARCH command searches the mailbox for messages that match the The SEARCH command searches the mailbox for messages that match the
given searching criteria. given searching criteria.
The SEARCH command may contain result options. Result options The SEARCH command may contain result options. Result options
control what kind of information is returned about messages matching control what kind of information is returned about messages matching
the search criteria in an untagged ESEARCH response. If no result the search criteria in an untagged ESEARCH response. If no result
option is specified or empty list of options is specified "()", ALL option is specified or empty list of options is specified "()", ALL
is assumed (see below). is assumed (see below). The order of individual options is
arbitrary. Individual options may contain parameters enclosed in
The order of individual options is arbitrary. Individual options may parentheses (*). If an option has parameters, they consist of atoms
contain parameters enclosed in parentheses (*). If an option has and/or strings and/or lists in a specific order. Any options not
parameters, they consist of atoms and/or strings and/or lists in a defined by extensions that the server supports must be rejected with
specific order. Any options not defined by extensions that the a BAD response.
server supports must be rejected with a BAD response.
(*) - if an option has a mandatory parameter, which can always be (*) - if an option has a mandatory parameter, which can always be
represented as a number or a sequence-set, the option parameter does represented as a number or a sequence-set, the option parameter does
not need the enclosing (). See ABNF for more details. not need the enclosing (). See ABNF for more details.
This document specifies the following result options: This document specifies the following result options:
MIN MIN
Return the lowest message number/UID that satisfies the SEARCH Return the lowest message number/UID that satisfies the SEARCH
skipping to change at page 74, line 44 skipping to change at page 74, line 44
order. order.
If the SEARCH results in no matches, the server MUST NOT If the SEARCH results in no matches, the server MUST NOT
include the ALL result option in the ESEARCH response; however, include the ALL result option in the ESEARCH response; however,
it still MUST send the ESEARCH response. it still MUST send the ESEARCH response.
COUNT Return number of the messages that satisfy the SEARCH COUNT Return number of the messages that satisfy the SEARCH
criteria. This result option MUST always be included in the criteria. This result option MUST always be included in the
ESEARCH response. ESEARCH response.
SAVE
This option tells the server to remember the result of the
SEARCH or UID SEARCH command (as well as any command based on
SEARCH, e.g., SORT and THREAD [RFC5256]>) and store it in an
internal variable that we will reference as the "search result
variable". The client can use the "$" marker to reference the
content of this internal variable. The "$" marker can be used
instead of message sequence or UID sequence in order to
indicate that the server should substitute it with the list of
messages from the search result variable. Thus, the client can
use the result of the latest remembered SEARCH command as a
parameter to another command. See Section 6.4.4.1 for details
on how the value of the search result variable is determined,
how it is affected by other commands executed, and how SAVE
return option interacts with other return options.
In absence of any other SEARCH result option, the SAVE result
option also suppresses any ESEARCH response that would have
been otherwise returned by the SEARCH command.
Note: future extensions to this document can allow servers to return Note: future extensions to this document can allow servers to return
multiple ESEARCH responses for a single extended SEARCH command. multiple ESEARCH responses for a single extended SEARCH command.
However all options specified above MUST result in a single ESEARCH However all options specified above MUST result in a single ESEARCH
response. response.
These extensions will have to describe how results from multiple These extensions will have to describe how results from multiple
ESEARCH responses are to be amalgamated. ESEARCH responses are to be amalgamated.
Searching criteria consist of one or more search keys. Searching criteria consist of one or more search keys.
skipping to change at page 79, line 5 skipping to change at page 79, line 20
S: * ESEARCH (TAG "A285") UID MIN 7 MAX 3800 S: * ESEARCH (TAG "A285") UID MIN 7 MAX 3800
S: A285 OK SEARCH completed S: A285 OK SEARCH completed
The following example demonstrates returning the number of deleted The following example demonstrates returning the number of deleted
messages: messages:
Example: C: A286 SEARCH RETURN (COUNT) DELETED Example: C: A286 SEARCH RETURN (COUNT) DELETED
S: * ESEARCH (TAG "A286") COUNT 15 S: * ESEARCH (TAG "A286") COUNT 15
S: A286 OK SEARCH completed S: A286 OK SEARCH completed
6.4.4.1. SAVE result option and SEARCH result variable
Upon successful completion of a SELECT or an EXAMINE command (after
the tagged OK response), the current search result variable is reset
to the empty sequence.
A successful SEARCH command with the SAVE result option sets the
value of the search result variable to the list of messages found in
the SEARCH command. For example, if no messages were found, the
search result variable will contain the empty sequence.
Any of the following SEARCH commands MUST NOT change the search
result variable:
a SEARCH command that caused the server to return the BAD tagged
response,
a SEARCH command with no SAVE result option that caused the server
to return NO tagged response,
a successful SEARCH command with no SAVE result option.
A SEARCH command with the SAVE result option that caused the server
to return the NO tagged response sets the value of the search result
variable to the empty sequence.
When a message listed in the search result variable is EXPUNGEd, it
is automatically removed from the list. Implementors are reminded
that if the server stores the list as a list of message numbers, it
MUST automatically adjust them when notifying the client about
expunged messages, as described in Section 7.4.1.
If the server decides to send a new UIDVALIDITY value while the
mailbox is opened, this causes resetting of the search variable to
the empty sequence.
Note that even if the "$" marker contains the empty sequence of
messages, it must be treated by all commands accepting message sets
as parameters as a valid, but non-matching list of messages. For
example, the "FETCH $" command would return a tagged OK response and
no FETCH responses. See also the Example 5 in Section 6.4.4.4.
The SAVE result option doesn't change whether the server would return
items corresponding to MIN, MAX, ALL, or COUNT result options.
When the SAVE result option is combined with the MIN or MAX result
option, and both ALL and COUNT result options are absent, the
corresponding MIN/MAX is returned (if the search result is not
empty), but the "$" marker would contain a single message as returned
in the MIN/MAX return item.
If the SAVE result option is combined with both MIN and MAX result
options, and both ALL and COUNT result options are absent, the "$"
marker would contain zero, one or two messages as returned in the
MIN/MAX return items.
If the SAVE result option is combined with the ALL and/or COUNT
result option(s), the "$" marker would always contain all messages
found by the SEARCH or UID SEARCH command.
The following table summarizes the additional requirement on ESEARCH
server implementations described in this section.
+------------------------------+--------------------+
| Combination of Result option | "$" marker value |
+------------------------------+--------------------+
| SAVE MIN | MIN |
| SAVE MAX | MAX |
| SAVE MIN MAX | MIN & MAX |
| SAVE * [m] | all found messages |
+------------------------------+--------------------+
where '*' means "ALL" and/or "COUNT", and '[m]' means optional "MIN"
and/or "MAX"
Implementation note: server implementors should note that "$" can
reference IMAP message sequences or UID sequences, depending on the
context where it is used. For example, the "$" marker can be set as
a result of a SEARCH (SAVE) command and used as a parameter to a UID
FETCH command (which accepts a UID sequence, not a message sequence),
or the "$" marker can be set as a result of a UID SEARCH (SAVE)
command and used as a parameter to a FETCH command (which accepts a
message sequence, not a UID sequence). Server implementations need
to automatically map the "$" marker value to message numbers or UIDs,
depending on context where the "$" marker is used.
6.4.4.2. Multiple Commands in Progress
Use of a SEARCH RETURN (SAVE) command followed by a command using the
"$" marker creates direct dependency between the two commands. As
directed by Section 5.5, a server MUST execute the two commands in
the order they were received.
A client MAY pipeline a SEARCH RETURN (SAVE) command with one or more
command using the "$" marker, as long as this doesn't create an
ambiguity, as described in by Section 5.5. Examples 7-9 in
Section 6.4.4.4 explain this in more details.
6.4.4.3. Refusing to Save Search Results
In some cases, the server MAY refuse to save a SEARCH (SAVE) result,
for example, if an internal limit on the number of saved results is
reached. In this case, the server MUST return a tagged NO response
containing the NOTSAVED response code and set the search result
variable to the empty sequence, as described in Section 6.4.4.1.
6.4.4.4. Examples showing use of SAVE result option
Only in this section: explanatory comments in examples that start
with // are not part of the protocol.
1) The following example demonstrates how the client can use the
result of a SEARCH command to FETCH headers of interesting messages:
Example 1:
C: A282 SEARCH RETURN (SAVE) FLAGGED SINCE 1-Feb-1994
NOT FROM "Smith"
S: A282 OK SEARCH completed, result saved
C: A283 FETCH $ (UID INTERNALDATE FLAGS BODY.PEEK[HEADER])
S: * 2 FETCH (UID 14 ...
S: * 84 FETCH (UID 100 ...
S: * 882 FETCH (UID 1115 ...
S: A283 OK completed
The client can also pipeline the two commands:
Example 2:
C: A282 SEARCH RETURN (SAVE) FLAGGED SINCE 1-Feb-1994
NOT FROM "Smith"
C: A283 FETCH $ (UID INTERNALDATE FLAGS BODY.PEEK[HEADER])
S: A282 OK SEARCH completed
S: * 2 FETCH (UID 14 ...
S: * 84 FETCH (UID 100 ...
S: * 882 FETCH (UID 1115 ...
S: A283 OK completed
2) The following example demonstrates that the result of one SEARCH
command can be used as input to another SEARCH command:
Example 3:
C: A300 SEARCH RETURN (SAVE) SINCE 1-Jan-2004
NOT FROM "Smith"
S: A300 OK SEARCH completed
C: A301 UID SEARCH UID $ SMALLER 4096
S: * ESEARCH (TAG "A301") UID ALL 17,900,901
S: A301 OK completed
Note that the second command in Example 3 can be replaced with:
C: A301 UID SEARCH $ SMALLER 4096
and the result of the command would be the same.
3) The following example shows that the "$" marker can be combined
with other message numbers using the OR SEARCH criterion.
Example 4:
C: P282 SEARCH RETURN (SAVE) SINCE 1-Feb-1994
NOT FROM "Smith"
S: P282 OK SEARCH completed
C: P283 SEARCH CHARSET UTF-8 (OR $ 1,3000:3021) TEXT {8}
C: YYYYYYYY
S: * ESEARCH (TAG "P283") ALL 882,1102,3003,3005:3006
S: P283 OK completed
Note: Since this document format is restricted to 7-bit ASCII text,
it is not possible to show actual UTF-8 data. The "YYYYYYYY" is a
placeholder for what would be 8 octets of 8-bit data in an actual
transaction.
4) The following example demonstrates that a failed SEARCH sets the
search result variable to the empty list. The server doesn't
implement the KOI8-R charset.
Example 5:
C: B282 SEARCH RETURN (SAVE) SINCE 1-Feb-1994
NOT FROM "Smith"
S: B282 OK SEARCH completed
C: B283 SEARCH CHARSET KOI8-R (OR $ 1,3000:3021) TEXT {4}
C: XXXX
S: B283 NO [BADCHARSET UTF-8] KOI8-R is not supported
//After this command the saved result variable contains
//no messages. A client that wants to reissue the B283
//SEARCH command with another CHARSET would have to reissue
//the B282 command as well. One possible workaround for
//this is to include the desired CHARSET parameter
//in the earliest SEARCH RETURN (SAVE) command in a
//sequence of related SEARCH commands.
//A better approach might be to always use CHARSET UTF-8
//instead.
Note: Since this document format is restricted to 7-bit ASCII text,
it is not possible to show actual KOI8-R data. The "XXXX" is a
placeholder for what would be 4 octets of 8-bit data in an actual
transaction.
5) The following example demonstrates that it is not an error to use
the "$" marker when it contains no messages.
Example 6:
C: E282 SEARCH RETURN (SAVE) SINCE 28-Oct-2006
NOT FROM "Eric"
C: E283 COPY $ "Other Messages"
//The "$" contains no messages
S: E282 OK SEARCH completed
S: E283 OK COPY completed, nothing copied
Example 7:
C: F282 SEARCH RETURN (SAVE) KEYWORD $Junk
C: F283 COPY $ "Junk"
C: F284 STORE $ +FLAGS.Silent (\Deleted)
S: F282 OK SEARCH completed
S: F283 OK COPY completed
S: F284 OK STORE completed
Example 8:
C: G282 SEARCH RETURN (SAVE) KEYWORD $Junk
C: G283 SEARCH RETURN (ALL) SINCE 28-Oct-2006
FROM "Eric"
// The server can execute the two SEARCH commands
// in any order, as they don't have any dependency.
// For example, it may return:
S: * ESEARCH (TAG "G283") ALL 3:15,27,29:103
S: G283 OK SEARCH completed
S: G282 OK SEARCH completed
The following example demonstrates that the result of the second
SEARCH RETURN (SAVE) always overrides the result of the first.
Example 9:
C: H282 SEARCH RETURN (SAVE) KEYWORD $Junk
C: H283 SEARCH RETURN (SAVE) SINCE 28-Oct-2006
FROM "Eric"
S: H282 OK SEARCH completed
S: H283 OK SEARCH completed
// At this point "$" would contain results of H283
The following example demonstrates behavioral difference for
different combinations of ESEARCH result options. Explanatory
comments start with // and are not part of the protocol:
Example 10:
C: C282 SEARCH RETURN (ALL) SINCE 12-Feb-2006
NOT FROM "Smith"
S: * ESEARCH (TAG "C283") ALL 2,10:15,21
//$ value hasn't changed
S: C282 OK SEARCH completed
C: C283 SEARCH RETURN (ALL SAVE) SINCE 12-Feb-2006
NOT FROM "Smith"
S: * ESEARCH (TAG "C283") ALL 2,10:15,21
//$ value is 2,10:15,21
S: C283 OK SEARCH completed
C: C284 SEARCH RETURN (SAVE MIN) SINCE 12-Feb-2006
NOT FROM "Smith"
S: * ESEARCH (TAG "C284") MIN 2
//$ value is 2
S: C284 OK SEARCH completed
C: C285 SEARCH RETURN (MAX SAVE MIN) SINCE
12-Feb-2006 NOT FROM "Smith"
S: * ESEARCH (TAG "C285") MIN 2 MAX 21
//$ value is 2,21
S: C285 OK SEARCH completed
C: C286 SEARCH RETURN (MAX SAVE MIN COUNT)
SINCE 12-Feb-2006 NOT FROM "Smith"
S: * ESEARCH (TAG "C286") MIN 2 MAX 21 COUNT 8
//$ value is 2,10:15,21
S: C286 OK SEARCH completed
C: C286 SEARCH RETURN (ALL SAVE MIN) SINCE
12-Feb-2006 NOT FROM "Smith"
S: * ESEARCH (TAG "C286") MIN 2 ALL 2,10:15,21
//$ value is 2,10:15,21
S: C286 OK SEARCH completed
6.4.5. FETCH Command 6.4.5. FETCH Command
Arguments: sequence set Arguments: sequence set
message data item names or macro message data item names or macro
Responses: untagged responses: FETCH Responses: untagged responses: FETCH
Result: OK - fetch completed Result: OK - fetch completed
NO - fetch error: can't fetch that data NO - fetch error: can't fetch that data
BAD - command unknown or arguments invalid BAD - command unknown or arguments invalid
skipping to change at page 102, line 10 skipping to change at page 108, line 44
send a separate CAPABILITY command if it recognizes these automatic send a separate CAPABILITY command if it recognizes these automatic
capabilities. capabilities.
Example: S: * CAPABILITY IMAP4rev2 STARTTLS AUTH=GSSAPI XPIG-LATIN Example: S: * CAPABILITY IMAP4rev2 STARTTLS AUTH=GSSAPI XPIG-LATIN
7.2.3. LIST Response 7.2.3. LIST Response
Contents: name attributes Contents: name attributes
hierarchy delimiter hierarchy delimiter
name name
OPTIONAL extension data
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 \NonExistent The "\NonExistent" attribute indicates that a mailbox
name does not refer to an existing mailbox. Note that this name does not refer to an existing mailbox. Note that this
attribute is not meaningful by itself, as mailbox names that match attribute is not meaningful by itself, as mailbox names that match
skipping to change at page 105, line 21 skipping to change at page 112, line 7
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 command. Unless \Noselect or be valid for use as a reference in LIST command. Unless \Noselect or
\NonExistent is indicated, the name MUST also be valid as an argument \NonExistent is indicated, the name MUST also be valid as an argument
for commands, such as SELECT, that accept mailbox names. for commands, such as SELECT, that accept mailbox names.
The name might be followed by an OPTIONAL series of extended fields,
a parenthesized list of tagged data (also referred to as "extended
data item"). The first element of an extended field is a tag, which
identifies the type of data.
The server MAY return data in the extended fields that was not
directly solicited by the client in the corresponding LIST command.
For example, the client can enable extra extended fields by using
another IMAP extension that make use of the extended LIST responses.
The client MUST ignore all extended fields it doesn't recognize.
Example: S: * LIST (\Noselect) "/" ~/Mail/foo Example: S: * LIST (\Noselect) "/" ~/Mail/foo
Example: S: * LIST (\Marked) ":" Tables (tablecloth (("edge" "lacy")
("color" "red")) Sample "text")
S: * LIST () ":" Tables:new (tablecloth ("edge" "lacy")
Sample ("text" "more text"))
7.2.4. NAMESPACE Response 7.2.4. 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
skipping to change at page 127, line 37 skipping to change at page 134, line 37
[flag-perm *(SP flag-perm)] ")" / [flag-perm *(SP flag-perm)] ")" /
"READ-ONLY" / "READ-WRITE" / "TRYCREATE" / "READ-ONLY" / "READ-WRITE" / "TRYCREATE" /
"UIDNEXT" SP nz-number / "UIDVALIDITY" SP nz-number / "UIDNEXT" SP nz-number / "UIDVALIDITY" SP nz-number /
resp-code-apnd / resp-code-copy / "UIDNOTSTICKY" / resp-code-apnd / resp-code-copy / "UIDNOTSTICKY" /
"UNAVAILABLE" / "AUTHENTICATIONFAILED" / "UNAVAILABLE" / "AUTHENTICATIONFAILED" /
"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" / "NOTSAVED" /
"CLOSED" / "CLOSED" /
"UNKNOWN-CTE" / "UNKNOWN-CTE" /
atom [SP 1*<any TEXT-CHAR except "]">] atom [SP 1*<any TEXT-CHAR except "]">]
return-option = "SUBSCRIBED" / "CHILDREN" / status-option / return-option = "SUBSCRIBED" / "CHILDREN" / status-option /
option-extension option-extension
search = "SEARCH" [search-return-opts] search = "SEARCH" [search-return-opts]
SP search-program SP search-program
skipping to change at page 128, line 41 skipping to change at page 135, line 41
; Note that not every SEARCH return option ; Note that not every SEARCH return option
; is required to have the corresponding ; is required to have the corresponding
; ESEARCH return data. ; ESEARCH return data.
search-return-data = "MIN" SP nz-number / search-return-data = "MIN" SP nz-number /
"MAX" SP nz-number / "MAX" SP nz-number /
"ALL" SP sequence-set / "ALL" SP sequence-set /
"COUNT" SP number / "COUNT" SP number /
search-ret-data-ext search-ret-data-ext
; All return data items conform to ; All return data items conform to
; search-ret-data-ext syntax ; search-ret-data-ext syntax.
; Note that "$" marker is not allowed
; after the ALL return data item.
search-return-opts = SP "RETURN" SP "(" [search-return-opt search-return-opts = SP "RETURN" SP "(" [search-return-opt
*(SP search-return-opt)] ")" *(SP search-return-opt)] ")"
search-return-opt = "MIN" / "MAX" / "ALL" / "COUNT" / search-return-opt = "MIN" / "MAX" / "ALL" / "COUNT" /
"SAVE" /
search-ret-opt-ext search-ret-opt-ext
; conforms to generic search-ret-opt-ext ; conforms to generic search-ret-opt-ext
; syntax ; syntax
search-ret-opt-ext = search-modifier-name [SP search-mod-params] search-ret-opt-ext = search-modifier-name [SP search-mod-params]
search-return-value = tagged-ext-val search-return-value = tagged-ext-val
; Data for the returned search option. ; Data for the returned search option.
; A single "nz-number"/"number"/"number64" value ; A single "nz-number"/"number"/"number64" value
; can be returned as an atom (i.e., without ; can be returned as an atom (i.e., without
; quoting). A sequence-set can be returned ; quoting). A sequence-set can be returned
; as an atom as well. ; as an atom as well.
section = "[" [section-spec] "]" section = "[" [section-spec] "]"
section-binary = "[" [section-part] "]" section-binary = "[" [section-part] "]"
skipping to change at page 130, line 21 skipping to change at page 137, line 24
; Servers MAY coalesce overlaps and/or execute the ; Servers MAY coalesce overlaps and/or execute the
; sequence in any order. ; sequence in any order.
; Example: a message sequence number set of ; Example: a message sequence number set of
; 2,4:7,9,12:* for a mailbox with 15 messages is ; 2,4:7,9,12:* for a mailbox with 15 messages is
; equivalent to 2,4,5,6,7,9,12,13,14,15 ; equivalent to 2,4,5,6,7,9,12,13,14,15
; Example: a message sequence number set of *:4,5:7 ; Example: a message sequence number set of *:4,5:7
; for a mailbox with 10 messages is equivalent to ; for a mailbox with 10 messages is equivalent to
; 10,9,8,7,6,5,4,5,6,7 and MAY be reordered and ; 10,9,8,7,6,5,4,5,6,7 and MAY be reordered and
; overlap coalesced to be 4,5,6,7,8,9,10. ; overlap coalesced to be 4,5,6,7,8,9,10.
sequence-set =/ seq-last-command
; Allow for "result of the last command" indicator.
seq-last-command = "$"
status = "STATUS" SP mailbox SP status = "STATUS" SP mailbox SP
"(" status-att *(SP status-att) ")" "(" status-att *(SP status-att) ")"
status-att = "MESSAGES" / "UIDNEXT" / "UIDVALIDITY" / status-att = "MESSAGES" / "UIDNEXT" / "UIDVALIDITY" /
"UNSEEN" / "DELETED" / "SIZE" "UNSEEN" / "DELETED" / "SIZE"
status-att-val = ("MESSAGES" SP number) / status-att-val = ("MESSAGES" SP number) /
("UIDNEXT" SP nz-number) / ("UIDNEXT" SP nz-number) /
("UIDVALIDITY" SP nz-number) / ("UIDVALIDITY" SP nz-number) /
("UNSEEN" SP number) / ("UNSEEN" SP number) /
skipping to change at page 138, line 17 skipping to change at page 145, line 40
RFC 2683, September 1999, RFC 2683, September 1999,
<http://www.rfc-editor.org/info/rfc2683>. <http://www.rfc-editor.org/info/rfc2683>.
[IMAP-MULTIACCESS] [IMAP-MULTIACCESS]
Gahrns, M., "IMAP4 Multi-Accessed Mailbox Practice", Gahrns, M., "IMAP4 Multi-Accessed Mailbox Practice",
RFC 2180, July 1997, RFC 2180, July 1997,
<http://www.rfc-editor.org/info/rfc2180>. <http://www.rfc-editor.org/info/rfc2180>.
13.2. Informative References (related protocols) 13.2. Informative References (related protocols)
[RFC5256] Crispin, M. and K. Murchison, "Internet Message Access
Protocol - SORT and THREAD Extensions", RFC 5256,
DOI 10.17487/RFC5256, June 2008,
<https://www.rfc-editor.org/info/rfc5256>.
[RFC5258] Leiba, B. and A. Melnikov, "Internet Message Access [RFC5258] Leiba, B. and A. Melnikov, "Internet Message Access
Protocol version 4 - LIST Command Extensions", RFC 5258, Protocol version 4 - LIST Command Extensions", RFC 5258,
DOI 10.17487/RFC5258, June 2008, DOI 10.17487/RFC5258, June 2008,
<https://www.rfc-editor.org/info/rfc5258>. <https://www.rfc-editor.org/info/rfc5258>.
[RFC2193] Gahrns, M., "IMAP4 Mailbox Referrals", RFC 2193, [RFC2193] Gahrns, M., "IMAP4 Mailbox Referrals", RFC 2193,
DOI 10.17487/RFC2193, September 1997, DOI 10.17487/RFC2193, September 1997,
<https://www.rfc-editor.org/info/rfc2193>. <https://www.rfc-editor.org/info/rfc2193>.
[RFC3348] Gahrns, M. and R. Cheng, "The Internet Message Action [RFC3348] Gahrns, M. and R. Cheng, "The Internet Message Action
skipping to change at page 145, line 14 skipping to change at page 152, line 41
so work done by authors/editors of these documents is appreciated. so work done by authors/editors of these documents is appreciated.
Note that editors of this document were redacted from the above list. Note that editors of this document were redacted from the above list.
Index Index
$ $
$Forwarded (predefined flag) 12 $Forwarded (predefined flag) 12
$MDNSent (predefined flag) 12 $MDNSent (predefined flag) 12
+ +
+FLAGS <flag list> 83 +FLAGS <flag list> 90
+FLAGS.SILENT <flag list> 83 +FLAGS.SILENT <flag list> 90
- -
-FLAGS <flag list> 83 -FLAGS <flag list> 90
-FLAGS.SILENT <flag list> 83 -FLAGS.SILENT <flag list> 90
A A
ALERT (response code) 90 ALERT (response code) 97
ALL (fetch item) 79 ALL (fetch item) 86
ALL (search key) 75 ALL (search key) 76
ALL (search result option) 74 ALL (search result option) 74
ALREADYEXISTS (response code) 90 ALREADYEXISTS (response code) 97
ANSWERED (search key) 75 ANSWERED (search key) 76
APPEND (command) 66 APPEND (command) 66
APPENDUID (response code) 91 APPENDUID (response code) 97
AUTHENTICATE (command) 28 AUTHENTICATE (command) 28
AUTHENTICATIONFAILED (response code) 91 AUTHENTICATIONFAILED (response code) 98
AUTHORIZATIONFAILED (response code) 92 AUTHORIZATIONFAILED (response code) 98
B B
BAD (response) 99 BAD (response) 106
BADCHARSET (response code) 92 BADCHARSET (response code) 99
BCC <string> (search key) 76 BCC <string> (search key) 76
BEFORE <date> (search key) 76 BEFORE <date> (search key) 76
BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 80 BINARY.PEEK[<section-binary>]<<partial>> (fetch item) 86
BINARY.SIZE[<section-binary>] (fetch item) 80 BINARY.SIZE[<section-binary>] (fetch item) 86
BINARY.SIZE[<section-binary>] (fetch result) 109 BINARY.SIZE[<section-binary>] (fetch result) 116
BINARY[<section-binary>]<<number>> (fetch result) 108 BINARY[<section-binary>]<<number>> (fetch result) 115
BINARY[<section-binary>]<<partial>> (fetch item) 79 BINARY[<section-binary>]<<partial>> (fetch item) 86
BODY (fetch item) 80 BODY (fetch item) 87
BODY (fetch result) 109 BODY (fetch result) 116
BODY <string> (search key) 76 BODY <string> (search key) 76
BODY.PEEK[<section>]<<partial>> (fetch item) 82 BODY.PEEK[<section>]<<partial>> (fetch item) 89
BODYSTRUCTURE (fetch item) 82 BODYSTRUCTURE (fetch item) 89
BODYSTRUCTURE (fetch result) 110 BODYSTRUCTURE (fetch result) 117
BODY[<section>]<<origin octet>> (fetch result) 109 BODY[<section>]<<origin octet>> (fetch result) 116
BODY[<section>]<<partial>> (fetch item) 80 BODY[<section>]<<partial>> (fetch item) 87
BYE (response) 100 BYE (response) 106
Body Structure (message attribute) 13 Body Structure (message attribute) 13
C C
CANNOT (response code) 92 CANNOT (response code) 99
CAPABILITY (command) 24 CAPABILITY (command) 24
CAPABILITY (response code) 92 CAPABILITY (response code) 99
CAPABILITY (response) 101 CAPABILITY (response) 107
CC <string> (search key) 76 CC <string> (search key) 76
CLIENTBUG (response code) 92 CLIENTBUG (response code) 99
CLOSE (command) 71 CLOSE (command) 71
CLOSED (response code) 93 CLOSED (response code) 99
CONTACTADMIN (response code) 93 CONTACTADMIN (response code) 100
COPY (command) 84 COPY (command) 90
COPYUID (response code) 93 COPYUID (response code) 100
CORRUPTION (response code) 94 CORRUPTION (response code) 100
COUNT (search result option) 74 COUNT (search result option) 74
CREATE (command) 37 CREATE (command) 37
D D
DELETE (command) 38 DELETE (command) 38
DELETED (search key) 76 DELETED (search key) 76
DELETED (status item) 66 DELETED (status item) 66
DRAFT (search key) 76 DRAFT (search key) 76
E E
ENABLE (command) 32 ENABLE (command) 32
ENVELOPE (fetch item) 82 ENVELOPE (fetch item) 89
ENVELOPE (fetch result) 112 ENVELOPE (fetch result) 119
ESEARCH (response) 106 ESEARCH (response) 113
EXAMINE (command) 36 EXAMINE (command) 36
EXPIRED (response code) 94 EXPIRED (response code) 101
EXPUNGE (command) 72 EXPUNGE (command) 72
EXPUNGE (response) 107 EXPUNGE (response) 114
EXPUNGEISSUED (response code) 94 EXPUNGEISSUED (response code) 101
Envelope Structure (message attribute) 13 Envelope Structure (message attribute) 13
F F
FAST (fetch item) 79 FAST (fetch item) 86
FETCH (command) 79 FETCH (command) 85
FETCH (response) 108 FETCH (response) 115
FLAGGED (search key) 76 FLAGGED (search key) 76
FLAGS (fetch item) 82 FLAGS (fetch item) 89
FLAGS (fetch result) 113 FLAGS (fetch result) 120
FLAGS (response) 106 FLAGS (response) 113
FLAGS <flag list> (store command data item) 83 FLAGS <flag list> (store command data item) 90
FLAGS.SILENT <flag list> (store command data item) 83 FLAGS.SILENT <flag list> (store command data item) 90
FROM <string> (search key) 76 FROM <string> (search key) 76
FULL (fetch item) 79 FULL (fetch item) 86
Flags (message attribute) 11 Flags (message attribute) 11
H H
HEADER (part specifier) 80 HEADER (part specifier) 87
HEADER <field-name> <string> (search key) 76 HEADER <field-name> <string> (search key) 76
HEADER.FIELDS (part specifier) 80 HEADER.FIELDS (part specifier) 87
HEADER.FIELDS.NOT (part specifier) 80 HEADER.FIELDS.NOT (part specifier) 87
I I
IDLE (command) 69 IDLE (command) 69
INTERNALDATE (fetch item) 82 INTERNALDATE (fetch item) 89
INTERNALDATE (fetch result) 113 INTERNALDATE (fetch result) 120
INUSE (response code) 94 INUSE (response code) 101
Internal Date (message attribute) 12 Internal Date (message attribute) 12
K K
KEYWORD <flag> (search key) 76 KEYWORD <flag> (search key) 77
Keyword (type of flag) 12 Keyword (type of flag) 12
L L
LARGER <n> (search key) 76 LARGER <n> (search key) 77
LIMIT (response code) 95 LIMIT (response code) 101
LIST (command) 42 LIST (command) 42
LIST (response) 102 LIST (response) 108
LOGOUT (command) 26 LOGOUT (command) 26
M M
MAX (search result option) 74 MAX (search result option) 74
MAY (specification requirement term) 5 MAY (specification requirement term) 5
MESSAGES (status item) 66 MESSAGES (status item) 66
MIME (part specifier) 81 MIME (part specifier) 88
MIN (search result option) 74 MIN (search result option) 74
MOVE (command) 85 MOVE (command) 91
MUST (specification requirement term) 5 MUST (specification requirement term) 5
MUST NOT (specification requirement term) 5 MUST NOT (specification requirement term) 5
Message Sequence Number (message attribute) 11 Message Sequence Number (message attribute) 11
N N
NAMESPACE (command) 60 NAMESPACE (command) 60
NAMESPACE (response) 105 NAMESPACE (response) 112
NO (response) 98 NO (response) 105
NONEXISTENT (response code) 95 NONEXISTENT (response code) 102
NOOP (command) 25 NOOP (command) 25
NOPERM (response code) 95 NOPERM (response code) 102
NOT <search-key> (search key) 76 NOT <search-key> (search key) 77
NOT RECOMMENDED (specification requirement term) 5 NOT RECOMMENDED (specification requirement term) 5
O O
OK (response) 98 OK (response) 105
ON <date> (search key) 76 ON <date> (search key) 77
OPTIONAL (specification requirement term) 5 OPTIONAL (specification requirement term) 5
OR <search-key1> <search-key2> (search key) 76 OR <search-key1> <search-key2> (search key) 77
OVERQUOTA (response code) 95 OVERQUOTA (response code) 102
P P
PARSE (response code) 96 PARSE (response code) 102
PERMANENTFLAGS (response code) 96 PERMANENTFLAGS (response code) 102
PREAUTH (response) 99 PREAUTH (response) 106
PRIVACYREQUIRED (response code) 96 PRIVACYREQUIRED (response code) 103
Permanent Flag (class of flag) 12 Permanent Flag (class of flag) 12
Predefined keywords 12 Predefined keywords 12
R R
READ-ONLY (response code) 96 READ-ONLY (response code) 103
READ-WRITE (response code) 97 READ-WRITE (response code) 103
RECOMMENDED (specification requirement term) 5 RECOMMENDED (specification requirement term) 5
RENAME (command) 39 RENAME (command) 39
REQUIRED (specification requirement term) 5 REQUIRED (specification requirement term) 5
RFC822.SIZE (fetch item) 82 RFC822.SIZE (fetch item) 89
RFC822.SIZE (fetch result) 114 RFC822.SIZE (fetch result) 121
S S
SAVE (search result option) 74
SEARCH (command) 73 SEARCH (command) 73
SEEN (search key) 77 SEEN (search key) 77
SELECT (command) 34 SELECT (command) 34
SENTBEFORE <date> (search key) 77 SENTBEFORE <date> (search key) 77
SENTON <date> (search key) 77 SENTON <date> (search key) 77
SENTSINCE <date> (search key) 77 SENTSINCE <date> (search key) 77
SERVERBUG (response code) 97 SERVERBUG (response code) 103
SHOULD (specification requirement term) 5 SHOULD (specification requirement term) 5
SHOULD NOT (specification requirement term) 5 SHOULD NOT (specification requirement term) 5
SINCE <date> (search key) 77 SINCE <date> (search key) 77
SIZE (status item) 66 SIZE (status item) 66
SMALLER <n> (search key) 77 SMALLER <n> (search key) 77
STARTTLS (command) 27 STARTTLS (command) 27
STATUS (command) 65 STATUS (command) 65
STATUS (response) 105 STATUS (response) 112
STORE (command) 83 STORE (command) 89
SUBJECT <string> (search key) 77 SUBJECT <string> (search key) 77
SUBSCRIBE (command) 41 SUBSCRIBE (command) 41
Session Flag (class of flag) 12 Session Flag (class of flag) 12
System Flag (type of flag) 11 System Flag (type of flag) 11
T T
TEXT (part specifier) 80 TEXT (part specifier) 87
TEXT <string> (search key) 77 TEXT <string> (search key) 77
TO <string> (search key) 77 TO <string> (search key) 77
TRYCREATE (response code) 97 TRYCREATE (response code) 103
U U
UID (command) 87 UID (command) 93
UID (fetch item) 82 UID (fetch item) 89
UID (fetch result) 114 UID (fetch result) 121
UID <sequence set> (search key) 77 UID <sequence set> (search key) 78
UIDNEXT (response code) 97 UIDNEXT (response code) 104
UIDNEXT (status item) 66 UIDNEXT (status item) 66
UIDNOTSTICKY (response code) 97 UIDNOTSTICKY (response code) 104
UIDVALIDITY (response code) 97 UIDVALIDITY (response code) 104
UIDVALIDITY (status item) 66 UIDVALIDITY (status item) 66
UNANSWERED (search key) 77 UNANSWERED (search key) 78
UNAVAILABLE (response code) 98 UNAVAILABLE (response code) 104
UNDELETED (search key) 77 UNDELETED (search key) 78
UNDRAFT (search key) 77 UNDRAFT (search key) 78
UNFLAGGED (search key) 77 UNFLAGGED (search key) 78
UNKEYWORD <flag> (search key) 77 UNKEYWORD <flag> (search key) 78
UNKNOWN-CTE (response code) 98 UNKNOWN-CTE (response code) 104
UNSEEN (search key) 77 UNSEEN (search key) 78
UNSEEN (status item) 66 UNSEEN (status item) 66
UNSELECT (command) 72 UNSELECT (command) 72
UNSUBSCRIBE (command) 42 UNSUBSCRIBE (command) 42
Unique Identifier (UID) (message attribute) 9 Unique Identifier (UID) (message attribute) 9
X X
X<atom> (command) 88 X<atom> (command) 95
[ [
[RFC-5322] Size (message attribute) 13 [RFC-5322] Size (message attribute) 13
\ \
\All (mailbox name attribute) 103 \All (mailbox name attribute) 110
\Answered (system flag) 11 \Answered (system flag) 11
\Archive (mailbox name attribute) 104 \Archive (mailbox name attribute) 110
\Deleted (system flag) 12 \Deleted (system flag) 12
\Draft (system flag) 12 \Draft (system flag) 12
\Drafts (mailbox name attribute) 104 \Drafts (mailbox name attribute) 110
\Flagged (mailbox name attribute) 104 \Flagged (mailbox name attribute) 111
\Flagged (system flag) 11 \Flagged (system flag) 11
\HasChildren (mailbox name attribute) 102 \HasChildren (mailbox name attribute) 109
\HasNoChildren (mailbox name attribute) 103 \HasNoChildren (mailbox name attribute) 109
\Junk (mailbox name attribute) 104 \Junk (mailbox name attribute) 111
\Marked (mailbox name attribute) 103 \Marked (mailbox name attribute) 110
\Noinferiors (mailbox name attribute) 102 \Noinferiors (mailbox name attribute) 109
\NonExistent (mailbox name attribute) 102 \NonExistent (mailbox name attribute) 109
\Noselect (mailbox name attribute) 102 \Noselect (mailbox name attribute) 109
\Recent (system flag) 12 \Recent (system flag) 12
\Remote (mailbox name attribute) 103 \Remote (mailbox name attribute) 110
\Seen (system flag) 11 \Seen (system flag) 11
\Sent (mailbox name attribute) 104 \Sent (mailbox name attribute) 111
\Subscribed (mailbox name attribute) 103 \Subscribed (mailbox name attribute) 110
\Trash (mailbox name attribute) 104 \Trash (mailbox name attribute) 111
\Unmarked (mailbox name attribute) 103 \Unmarked (mailbox name attribute) 110
Authors' Addresses Authors' Addresses
Alexey Melnikov (editor) Alexey Melnikov (editor)
Isode Ltd Isode Ltd
14 Castle Mews 14 Castle Mews
Hampton, Middlesex TW12 2NP Hampton, Middlesex TW12 2NP
UK UK
Email: Alexey.Melnikov@isode.com Email: Alexey.Melnikov@isode.com
 End of changes. 73 change blocks. 
187 lines changed or deleted 517 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/