draft-ietf-extra-imap4rev2-22.txt   draft-ietf-extra-imap4rev2-23.txt 
Network Working Group A. Melnikov, Ed. Network Working Group A. Melnikov, Ed.
Internet-Draft Isode Ltd Internet-Draft Isode Ltd
Obsoletes: 3501 (if approved) B. Leiba, Ed. Obsoletes: 3501 (if approved) B. Leiba, Ed.
Intended status: Standards Track Futurewei Technologies Intended status: Standards Track Futurewei Technologies
Expires: July 4, 2021 December 31, 2020 Expires: July 8, 2021 January 4, 2021
Internet Message Access Protocol (IMAP) - Version 4rev2 Internet Message Access Protocol (IMAP) - Version 4rev2
draft-ietf-extra-imap4rev2-22 draft-ietf-extra-imap4rev2-23
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 48 skipping to change at page 1, line 48
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 July 4, 2021. This Internet-Draft will expire on July 8, 2021.
Copyright Notice Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the Copyright (c) 2021 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
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
skipping to change at page 3, line 42 skipping to change at page 3, line 42
6.3. Client Commands - Authenticated State . . . . . . . . . . 33 6.3. Client Commands - Authenticated State . . . . . . . . . . 33
6.3.1. ENABLE Command . . . . . . . . . . . . . . . . . . . 33 6.3.1. ENABLE Command . . . . . . . . . . . . . . . . . . . 33
6.3.2. SELECT Command . . . . . . . . . . . . . . . . . . . 35 6.3.2. SELECT Command . . . . . . . . . . . . . . . . . . . 35
6.3.3. EXAMINE Command . . . . . . . . . . . . . . . . . . . 37 6.3.3. EXAMINE Command . . . . . . . . . . . . . . . . . . . 37
6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 38 6.3.4. CREATE Command . . . . . . . . . . . . . . . . . . . 38
6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 39 6.3.5. DELETE Command . . . . . . . . . . . . . . . . . . . 39
6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 41 6.3.6. RENAME Command . . . . . . . . . . . . . . . . . . . 41
6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 43 6.3.7. SUBSCRIBE Command . . . . . . . . . . . . . . . . . . 43
6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 44 6.3.8. UNSUBSCRIBE Command . . . . . . . . . . . . . . . . . 44
6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 44 6.3.9. LIST Command . . . . . . . . . . . . . . . . . . . . 44
6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 62 6.3.10. NAMESPACE Command . . . . . . . . . . . . . . . . . . 63
6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 67 6.3.11. STATUS Command . . . . . . . . . . . . . . . . . . . 67
6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 68 6.3.12. APPEND Command . . . . . . . . . . . . . . . . . . . 68
6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 71 6.3.13. IDLE Command . . . . . . . . . . . . . . . . . . . . 71
6.4. Client Commands - Selected State . . . . . . . . . . . . 73 6.4. Client Commands - Selected State . . . . . . . . . . . . 73
6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 74 6.4.1. CLOSE Command . . . . . . . . . . . . . . . . . . . . 74
6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 74 6.4.2. UNSELECT Command . . . . . . . . . . . . . . . . . . 74
6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 75 6.4.3. EXPUNGE Command . . . . . . . . . . . . . . . . . . . 75
6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 75 6.4.4. SEARCH Command . . . . . . . . . . . . . . . . . . . 75
6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 87 6.4.5. FETCH Command . . . . . . . . . . . . . . . . . . . . 87
6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 92 6.4.6. STORE Command . . . . . . . . . . . . . . . . . . . . 92
skipping to change at page 5, line 37 skipping to change at page 5, line 37
is almost impossible to understand any of them separately. In is almost impossible to understand any of them separately. In
particular, do not attempt to deduce command syntax from the command particular, do not attempt to deduce command syntax from the command
section alone; instead refer to the Formal Syntax section. section alone; instead refer to the Formal Syntax section.
1.2. Conventions Used in This Document 1.2. Conventions Used in This Document
"Conventions" are basic principles or procedures. Document "Conventions" are basic principles or procedures. Document
conventions are noted in this section. conventions are noted in this section.
In examples, "C:" and "S:" indicate lines sent by the client and In examples, "C:" and "S:" indicate lines sent by the client and
server respectively. server respectively. Note that each line includes the terminating
CRLF.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP "OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here. capitals, as shown here.
The word "can" (not "may") is used to refer to a possible The word "can" (not "may") is used to refer to a possible
circumstance or situation, as opposed to an optional facility of the circumstance or situation, as opposed to an optional facility of the
protocol. protocol.
skipping to change at page 9, line 31 skipping to change at page 9, line 31
associated with it. These attributes can be retrieved individually associated with it. These attributes can be retrieved individually
or in conjunction with other attributes or message texts. or in conjunction with other attributes or message texts.
2.3.1. Message Numbers 2.3.1. Message Numbers
Messages in IMAP4rev2 are accessed by one of two numbers; the unique Messages in IMAP4rev2 are accessed by one of two numbers; the unique
identifier or the message sequence number. identifier or the message sequence number.
2.3.1.1. Unique Identifier (UID) Message Attribute 2.3.1.1. Unique Identifier (UID) Message Attribute
An unsigned non-zero 32-bit value assigned to each message, which A UID is an unsigned non-zero 32-bit value assigned to each message,
when used with the unique identifier validity value (see below) forms which when used with the unique identifier validity value (see below)
a 64-bit value that MUST NOT refer to any other message in the forms a 64-bit value that MUST NOT refer to any other message in the
mailbox or any subsequent mailbox with the same name forever. Unique mailbox or any subsequent mailbox with the same name forever. Unique
identifiers are assigned in a strictly ascending fashion in the identifiers are assigned in a strictly ascending fashion in the
mailbox; as each message is added to the mailbox it is assigned a mailbox; as each message is added to the mailbox it is assigned a
higher UID than the message(s) which were added previously. Unlike higher UID than the message(s) which were added previously. Unlike
message sequence numbers, unique identifiers are not necessarily message sequence numbers, unique identifiers are not necessarily
contiguous. contiguous.
The unique identifier of a message MUST NOT change during the The unique identifier of a message MUST NOT change during the
session, and SHOULD NOT change between sessions. Any change of session, and SHOULD NOT change between sessions. Any change of
unique identifiers between sessions MUST be detectable using the unique identifiers between sessions MUST be detectable using the
skipping to change at page 10, line 35 skipping to change at page 10, line 35
If unique identifiers from an earlier session fail to persist in this If unique identifiers from an earlier session fail to persist in this
session, the unique identifier validity value MUST be greater than session, the unique identifier validity value MUST be greater than
the one used in the earlier session. A good UIDVALIDITY value to use the one used in the earlier session. A good UIDVALIDITY value to use
is a 32-bit representation of the current date/time when the value is is a 32-bit representation of the current date/time when the value is
assigned: this ensures that the value is unique and always increases. assigned: this ensures that the value is unique and always increases.
Another possible alternative is a global counter that gets Another possible alternative is a global counter that gets
incremented every time a mailbox is created. incremented every time a mailbox is created.
Note: Ideally, unique identifiers SHOULD persist at all times. Note: Ideally, unique identifiers SHOULD persist at all times.
Although this specification recognizes that failure to persist can Although this specification recognizes that failure to persist can
be unavoidable in certain server environments, it STRONGLY be unavoidable in certain server environments, it strongly
ENCOURAGES message store implementation techniques that avoid this encourages message store implementation techniques that avoid this
problem. For example: problem. For example:
1. Unique identifiers MUST be strictly ascending in the mailbox 1. Unique identifiers MUST be strictly ascending in the mailbox
at all times. If the physical message store is re-ordered by at all times. If the physical message store is re-ordered by
a non-IMAP agent, this requires that the unique identifiers in a non-IMAP agent, this requires that the unique identifiers in
the mailbox be regenerated, since the former unique the mailbox be regenerated, since the former unique
identifiers are no longer strictly ascending as a result of identifiers are no longer strictly ascending as a result of
the re-ordering. the re-ordering.
2. If the message store has no mechanism to store unique 2. If the message store has no mechanism to store unique
skipping to change at page 11, line 20 skipping to change at page 11, line 20
server forever. In particular, the internal date, [RFC-5322] server forever. In particular, the internal date, [RFC-5322]
size, envelope, body structure, and message texts (all size, envelope, body structure, and message texts (all
BODY[...] fetch data items) must never change. This does not BODY[...] fetch data items) must never change. This does not
include message numbers, nor does it include attributes that include message numbers, nor does it include attributes that
can be set by a STORE command (e.g., FLAGS). When a message can be set by a STORE command (e.g., FLAGS). When a message
is expunged, its UID MUST NOT be reused under the same is expunged, its UID MUST NOT be reused under the same
UIDVALIDITY value. UIDVALIDITY value.
2.3.1.2. Message Sequence Number Message Attribute 2.3.1.2. Message Sequence Number Message Attribute
A relative position from 1 to the number of messages in the mailbox. A Message Sequence Number is a relative position from 1 to the number
This position MUST be ordered by ascending unique identifier. As of messages in the mailbox. This position MUST be ordered by
each new message is added, it is assigned a message sequence number ascending unique identifier. As each new message is added, it is
that is 1 higher than the number of messages in the mailbox before assigned a message sequence number that is 1 higher than the number
that new message was added. of messages in the mailbox before that new message was added.
Message sequence numbers can be reassigned during the session. For Message sequence numbers can be reassigned during the session. For
example, when a message is permanently removed (expunged) from the example, when a message is permanently removed (expunged) from the
mailbox, the message sequence number for all subsequent messages is mailbox, the message sequence number for all subsequent messages is
decremented. The number of messages in the mailbox is also decremented. The number of messages in the mailbox is also
decremented. Similarly, a new message can be assigned a message decremented. Similarly, a new message can be assigned a message
sequence number that was once held by some other message prior to an sequence number that was once held by some other message prior to an
expunge. expunge.
In addition to accessing messages by relative position in the In addition to accessing messages by relative position in the
mailbox, message sequence numbers can be used in mathematical mailbox, message sequence numbers can be used in mathematical
calculations. For example, if an untagged "11 EXISTS" is received, calculations. For example, if an untagged "11 EXISTS" is received,
and previously an untagged "8 EXISTS" was received, three new and previously an untagged "8 EXISTS" was received, three new
messages have arrived with message sequence numbers of 9, 10, and 11. messages have arrived with message sequence numbers of 9, 10, and 11.
Another example, if message 287 in a 523 message mailbox has UID Another example, if message 287 in a 523 message mailbox has UID
12345, there are exactly 286 messages which have lesser UIDs and 236 12345, there are exactly 286 messages which have lesser UIDs and 236
messages which have greater UIDs. messages which have greater UIDs.
2.3.2. Flags Message Attribute 2.3.2. Flags Message Attribute
A list of zero or more named tokens associated with the message. A A message has associated with it a list of zero or more named tokens,
flag is set by its addition to this list, and is cleared by its known as "flags". A flag is set by its addition to this list, and is
removal. There are two types of flags in IMAP4rev2. A flag of cleared by its removal. There are two types of flags in IMAP4rev2:
either type can be permanent or session-only. system flags, and keywords. A flag of either type can also be
permanent or session-only.
A system flag is a flag name that is pre-defined in this A system flag is a flag name that is pre-defined in this
specification and begin with "\". Certain system flags (\Deleted and specification and begins with "\". Certain system flags (\Deleted
\Seen) have special semantics described elsewhere in this document. and \Seen) have special semantics described elsewhere in this
The currently-defined system flags are: document. The currently-defined system flags are:
\Seen Message has been read \Seen Message has been read
\Answered Message has been answered \Answered Message has been answered
\Flagged Message is "flagged" for urgent/special attention \Flagged Message is "flagged" for urgent/special attention
\Deleted Message is "deleted" for removal by later EXPUNGE \Deleted Message is "deleted" for removal by later EXPUNGE
\Draft Message has not completed composition (marked as a draft). \Draft Message has not completed composition (marked as a draft).
\Recent This flag was in used in IMAP4rev1 and is now deprecated. \Recent This flag was in use in IMAP4rev1 and is now deprecated.
A keyword is defined by the server implementation. Keywords do not A keyword is defined by the server implementation. Keywords do not
begin with "\". Servers MAY permit the client to define new keywords begin with "\". Servers MAY permit the client to define new keywords
in the mailbox (see the description of the PERMANENTFLAGS response in the mailbox (see the description of the PERMANENTFLAGS response
code for more information). Some keywords that start with "$" are code for more information). Some keywords that start with "$" are
also defined in this specification. also defined in this specification.
This document defines several keywords that were not originally This document defines several keywords that were not originally
defined in RFC 3501, but which were found to be useful by client defined in RFC 3501, but which were found to be useful by client
implementations. These keywords SHOULD be supported (i.e. allowed in implementations. These keywords SHOULD be supported (i.e. allowed in
skipping to change at page 13, line 46 skipping to change at page 13, line 50
[RFC5788]. [RFC5788].
A flag can be permanent or session-only on a per-flag basis. A flag can be permanent or session-only on a per-flag basis.
Permanent flags are those which the client can add or remove from the Permanent flags are those which the client can add or remove from the
message flags permanently; that is, concurrent and subsequent message flags permanently; that is, concurrent and subsequent
sessions will see any change in permanent flags. Changes to session sessions will see any change in permanent flags. Changes to session
flags are valid only in that session. flags are valid only in that session.
2.3.3. Internal Date Message Attribute 2.3.3. Internal Date Message Attribute
The internal date and time of the message on the server. This is not An Internal Date message attribute is the internal date and time of
the date and time in the [RFC-5322] header, but rather a date and the message on the server. This is not the date and time in the
time which reflects when the message was received. In the case of [RFC-5322] header, but rather a date and time which reflects when the
messages delivered via [SMTP], this SHOULD be the date and time of message was received. In the case of messages delivered via [SMTP],
final delivery of the message as defined by [SMTP]. In the case of this is the date and time of final delivery of the message as defined
messages delivered by the IMAP4rev2 COPY or MOVE command, this SHOULD by [SMTP]. In the case of messages delivered by the IMAP4rev2 COPY
be the internal date and time of the source message. In the case of or MOVE command, this SHOULD be the internal date and time of the
messages delivered by the IMAP4rev2 APPEND command, this SHOULD be source message. In the case of messages delivered by the IMAP4rev2
the date and time as specified in the APPEND command description. APPEND command, this SHOULD be the date and time as specified in the
All other cases are implementation defined. APPEND command description. All other cases are implementation
defined.
2.3.4. [RFC-5322] Size Message Attribute 2.3.4. [RFC-5322] Size Message Attribute
The number of octets in the message, as expressed in [RFC-5322] An RFC 5322 size is the number of octets in the message, as expressed
format. in [RFC-5322] format.
2.3.5. Envelope Structure Message Attribute 2.3.5. Envelope Structure Message Attribute
A parsed representation of the [RFC-5322] header of the message. An Envelope Structure is a parsed representation of the [RFC-5322]
Note that the IMAP Envelope structure is not the same as an [SMTP] header of the message. Note that the IMAP Envelope structure is not
envelope. the same as an [SMTP] envelope.
2.3.6. Body Structure Message Attribute 2.3.6. Body Structure Message Attribute
A parsed representation of the [MIME-IMB] body structure information A Body Structure is a parsed representation of the [MIME-IMB] body
of the message. structure information of the message.
2.4. Message Texts 2.4. Message Texts
In addition to being able to fetch the full [RFC-5322] text of a In addition to being able to fetch the full [RFC-5322] text of a
message, IMAP4rev2 permits the fetching of portions of the full message, IMAP4rev2 permits the fetching of portions of the full
message text. Specifically, it is possible to fetch the [RFC-5322] message text. Specifically, it is possible to fetch the [RFC-5322]
message header, [RFC-5322] message body, a [MIME-IMB] body part, or a message header, [RFC-5322] message body, a [MIME-IMB] body part, or a
[MIME-IMB] header. [MIME-IMB] header.
3. State and Flow Diagram 3. State and Flow Diagram
skipping to change at page 18, line 7 skipping to change at page 18, line 7
A synchronizing literal is a sequence of zero or more octets A synchronizing literal is a sequence of zero or more octets
(including CR and LF), prefix-quoted with an octet count in the form (including CR and LF), prefix-quoted with an octet count in the form
of an open brace ("{"), the number of octets, close brace ("}"), and of an open brace ("{"), the number of octets, close brace ("}"), and
CRLF. In the case of synchronizing literals transmitted from server CRLF. In the case of synchronizing literals transmitted from server
to client, the CRLF is immediately followed by the octet data. In to client, the CRLF is immediately followed by the octet data. In
the case of synchronizing literals transmitted from client to server, the case of synchronizing literals transmitted from client to server,
the client MUST wait to receive a command continuation request the client MUST wait to receive a command continuation request
(described later in this document) before sending the octet data (and (described later in this document) before sending the octet data (and
the remainder of the command). the remainder of the command).
The non-synchronizing literal is an alternate form of synchronizing The non-synchronizing literal is an alternative form of synchronizing
literal, and it may appear in communication from client to server literal, and it may appear in communication from client to server
instead of the synchonizing form of literal. The non-synchronizing instead of the synchonizing form of literal. The non-synchronizing
literal form MUST NOT be sent from server to client. The non- literal form MUST NOT be sent from server to client. The non-
synchronizing literal is distinguished from the synchronizing literal synchronizing literal is distinguished from the synchronizing literal
by having a plus ("+") between the octet count and the closing brace by having a plus ("+") between the octet count and the closing brace
("}"). The server does not generate a command continuation request ("}"). The server does not generate a command continuation request
in response to a non-synchronizing literal, and clients are not in response to a non-synchronizing literal, and clients are not
required to wait before sending the octets of a non- synchronizing required to wait before sending the octets of a non- synchronizing
literal. Non-synchronizing literals MUST NOT be larger than 4096 literal. Non-synchronizing literals MUST NOT be larger than 4096
octets. Any literal larger than 4096 bytes MUST be sent as a octets. Any literal larger than 4096 bytes MUST be sent as a
skipping to change at page 22, line 35 skipping to change at page 22, line 35
For example, implementations which offer access to USENET For example, implementations which offer access to USENET
newsgroups MAY use the "#news" namespace to partition the USENET newsgroups MAY use the "#news" namespace to partition the USENET
newsgroup namespace from that of other mailboxes. Thus, the newsgroup namespace from that of other mailboxes. Thus, the
comp.mail.misc newsgroup would have a mailbox name of comp.mail.misc newsgroup would have a mailbox name of
"#news.comp.mail.misc", and the name "comp.mail.misc" can refer to "#news.comp.mail.misc", and the name "comp.mail.misc" can refer to
a different object (e.g., a user's private mailbox). a different object (e.g., a user's private mailbox).
Namespaces that include the "#" character are not IMAP URL [IMAP-URL] Namespaces that include the "#" character are not IMAP URL [IMAP-URL]
friendly requiring the "#" character to be represented as %23 when friendly requiring the "#" character to be represented as %23 when
within URLs. As such, server implementers MAY instead consider using within URLs. As such, server implementors MAY instead consider using
namespace prefixes that do not contain the "#" character. namespace prefixes that do not contain the "#" character.
5.1.2.2. Common namespace models 5.1.2.2. Common namespace models
Previous version of this protocol does not define a default server Previous version of this protocol does not define a default server
namespace. Two common namespace models have evolved: namespace. Two common namespace models have evolved:
The "Personal Mailbox" model, in which the default namespace that is The "Personal Mailbox" model, in which the default namespace that is
presented consists of only the user's personal mailboxes. To access presented consists of only the user's personal mailboxes. To access
shared mailboxes, the user must use an escape mechanism to reach shared mailboxes, the user must use an escape mechanism to reach
another namespace. another namespace.
The "Complete Hierarchy" model, in which the default namespace that The "Complete Hierarchy" model, in which the default namespace that
is presented includes the user's personal mailboxes along with any is presented includes the user's personal mailboxes along with any
other mailboxes they have access to. other mailboxes they have access to.
5.2. Mailbox Size and Message Status Updates 5.2. Mailbox Size and Message Status Updates
At any time, a server can send data that the client did not request. At any time, a server can send data that the client did not request.
Sometimes, such behavior is REQUIRED. For example, agents other than Sometimes, such behavior is required by this specification and/or
the server MAY add messages to the mailbox (e.g., new message extensions. For example, agents other than the server MAY add
delivery), change the flags of the messages in the mailbox (e.g., messages to the mailbox (e.g., new message delivery), change the
simultaneous access to the same mailbox by multiple agents), or even flags of the messages in the mailbox (e.g., simultaneous access to
remove messages from the mailbox. A server MUST send mailbox size the same mailbox by multiple agents), or even remove messages from
updates automatically if a mailbox size change is observed during the the mailbox. A server MUST send mailbox size updates automatically
processing of a command. A server SHOULD send message flag updates if a mailbox size change is observed during the processing of a
automatically, without requiring the client to request such updates command. A server SHOULD send message flag updates automatically,
explicitly. without requiring the client to request such updates explicitly.
Special rules exist for server notification of a client about the Special rules exist for server notification of a client about the
removal of messages to prevent synchronization errors; see the removal of messages to prevent synchronization errors; see the
description of the EXPUNGE response for more detail. In particular, description of the EXPUNGE response for more detail. In particular,
it is NOT permitted to send an EXISTS response that would reduce the it is NOT permitted to send an EXISTS response that would reduce the
number of messages in the mailbox; only the EXPUNGE response can do number of messages in the mailbox; only the EXPUNGE response can do
this. this.
Regardless of what implementation decisions a client makes on Regardless of what implementation decisions a client makes on
remembering data from the server, a client implementation MUST record remembering data from the server, a client implementation MUST record
skipping to change at page 23, line 43 skipping to change at page 23, line 43
(except for EXPUNGE) while there is no command in progress. Server (except for EXPUNGE) while there is no command in progress. Server
implementations that send such responses MUST deal with flow control implementations that send such responses MUST deal with flow control
considerations. Specifically, they MUST either (1) verify that the considerations. Specifically, they MUST either (1) verify that the
size of the data does not exceed the underlying transport's available size of the data does not exceed the underlying transport's available
window size, or (2) use non-blocking writes. window size, or (2) use non-blocking writes.
5.4. Autologout Timer 5.4. Autologout Timer
If a server has an inactivity autologout timer that applies to If a server has an inactivity autologout timer that applies to
sessions after authentication, the duration of that timer MUST be at sessions after authentication, the duration of that timer MUST be at
least 30 minutes. The receipt of ANY command from the client during least 30 minutes. The receipt of any command from the client during
that interval SHOULD suffice to reset the autologout timer. that interval resets the autologout timer.
5.5. Multiple Commands in Progress (Command Pipelining) 5.5. Multiple Commands in Progress (Command Pipelining)
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
skipping to change at page 28, line 5 skipping to change at page 28, line 5
6.2. Client Commands - Not Authenticated State 6.2. Client Commands - Not Authenticated State
In the not authenticated state, the AUTHENTICATE or LOGIN command In the not authenticated state, the AUTHENTICATE or LOGIN command
establishes authentication and enters the authenticated state. The establishes authentication and enters the authenticated state. The
AUTHENTICATE command provides a general mechanism for a variety of AUTHENTICATE command provides a general mechanism for a variety of
authentication techniques, privacy protection, and integrity authentication techniques, privacy protection, and integrity
checking; whereas the LOGIN command uses a traditional user name and checking; whereas the LOGIN command uses a traditional user name and
plaintext password pair and has no means of establishing privacy plaintext password pair and has no means of establishing privacy
protection or integrity checking. protection or integrity checking.
The STARTTLS command is an alternate form of establishing session The STARTTLS command is an alternative form of establishing session
privacy protection and integrity checking, but does not by itself privacy protection and integrity checking, but does not by itself
establish authentication or enter the authenticated state. establish authentication or enter the authenticated state.
Server implementations MAY allow access to certain mailboxes without Server implementations MAY allow access to certain mailboxes without
establishing authentication. This can be done by means of the establishing authentication. This can be done by means of the
ANONYMOUS [SASL] authenticator described in [ANONYMOUS]. An older ANONYMOUS [SASL] authenticator described in [ANONYMOUS]. An older
convention is a LOGIN command using the userid "anonymous"; in this convention is a LOGIN command using the userid "anonymous"; in this
case, a password is required although the server may choose to accept case, a password is required although the server may choose to accept
any password. The restrictions placed on anonymous users are any password. The restrictions placed on anonymous users are
implementation-dependent. implementation-dependent.
skipping to change at page 34, line 30 skipping to change at page 34, line 30
specifically permitted to be enabled using ENABLE, the server MUST specifically permitted to be enabled using ENABLE, the server MUST
ignore the argument. (Note that knowing about an extension ignore the argument. (Note that knowing about an extension
doesn't necessarily imply supporting that extension.) doesn't necessarily imply supporting that extension.)
o If the argument is an extension that is supported by the server o If the argument is an extension that is supported by the server
and that needs to be enabled, the server MUST enable the extension and that needs to be enabled, the server MUST enable the extension
for the duration of the connection. Note that once an extension for the duration of the connection. Note that once an extension
is enabled, there is no way to disable it. is enabled, there is no way to disable it.
If the ENABLE command is successful, the server MUST send an untagged If the ENABLE command is successful, the server MUST send an untagged
ENABLED response Section 7.2.1. ENABLED response Section 7.2.1, which includes all enabled extensions
as specified above. The ENABLED response is sent even if no
extensions were enabled.
Clients SHOULD only include extensions that need to be enabled by the Clients SHOULD only include extensions that need to be enabled by the
server. For example, a client can enable IMAP4rev2 specific server. For example, a client can enable IMAP4rev2 specific
behaviour when both IMAP4rev1 and IMAP4rev2 are advertised in the behaviour when both IMAP4rev1 and IMAP4rev2 are advertised in the
CAPABILITY response. Future RFCs may add to this list. CAPABILITY response. Future RFCs may add to this list.
The ENABLE command is only valid in the authenticated state, before The ENABLE command is only valid in the authenticated state, before
any mailbox is selected. Clients MUST NOT issue ENABLE once they any mailbox is selected. Clients MUST NOT issue ENABLE once they
SELECT/EXAMINE a mailbox; however, server implementations don't have SELECT/EXAMINE a mailbox; however, server implementations don't have
to check that no mailbox is selected or was previously selected to check that no mailbox is selected or was previously selected
skipping to change at page 39, line 23 skipping to change at page 39, line 23
If the server's hierarchy separator character appears elsewhere in If the server's hierarchy separator character appears elsewhere in
the name, the server SHOULD create any superior hierarchical names the name, the server SHOULD create any superior hierarchical names
that are needed for the CREATE command to be successfully completed. that are needed for the CREATE command to be successfully completed.
In other words, an attempt to create "foo/bar/zap" on a server in In other words, an attempt to create "foo/bar/zap" on a server in
which "/" is the hierarchy separator character SHOULD create foo/ and which "/" is the hierarchy separator character SHOULD create foo/ and
foo/bar/ if they do not already exist. foo/bar/ if they do not already exist.
If a new mailbox is created with the same name as a mailbox which was If a new mailbox is created with the same name as a mailbox which was
deleted, its unique identifiers MUST be greater than any unique deleted, its unique identifiers MUST be greater than any unique
identifiers used in the previous incarnation of the mailbox UNLESS identifiers used in the previous incarnation of the mailbox unless
the new incarnation has a different unique identifier validity value. the new incarnation has a different unique identifier validity value.
See the description of the UID command for more detail. See the description of the UID command for more detail.
Example: C: A003 CREATE owatagusiam/ Example: C: A003 CREATE owatagusiam/
S: A003 OK CREATE completed S: A003 OK CREATE completed
C: A004 CREATE owatagusiam/blurdybloop C: A004 CREATE owatagusiam/blurdybloop
S: A004 OK CREATE completed S: A004 OK CREATE completed
C: A005 CREATE NonNormalized C: A005 CREATE NonNormalized
S: * LIST () "/" "Normalized" ("OLDNAME" ("NonNormalized")) S: * LIST () "/" "Normalized" ("OLDNAME" ("NonNormalized"))
S: A005 OK CREATE completed S: A005 OK CREATE completed
skipping to change at page 40, line 34 skipping to change at page 40, line 34
command by returning a tagged NO response. The NO response SHOULD command by returning a tagged NO response. The NO response SHOULD
include the HASCHILDREN response code. Alternatively the server MAY include the HASCHILDREN response code. Alternatively the server MAY
allow the DELETE command, but sets the \Noselect mailbox name allow the DELETE command, but sets the \Noselect mailbox name
attribute for that name. attribute for that name.
If the server returns OK response, all messages in that mailbox are If the server returns OK response, all messages in that mailbox are
removed by the DELETE command. removed by the DELETE command.
The value of the highest-used unique identifier of the deleted The value of the highest-used unique identifier of the deleted
mailbox MUST be preserved so that a new mailbox created with the same mailbox MUST be preserved so that a new mailbox created with the same
name will not reuse the identifiers of the former incarnation, UNLESS name will not reuse the identifiers of the former incarnation, unless
the new incarnation has a different unique identifier validity value. the new incarnation has a different unique identifier validity value.
See the description of the UID command for more detail. See the description of the UID command for more detail.
If the server decides to convert (normalize) the mailbox name, it If the server decides to convert (normalize) the mailbox name, it
SHOULD return an untagged LIST with the "\NonExistent" attribute and SHOULD return an untagged LIST with the "\NonExistent" attribute and
OLDNAME extended data item, with the OLDNAME value being the supplied OLDNAME extended data item, with the OLDNAME value being the supplied
mailbox name and the name parameter being the normalized mailbox mailbox name and the name parameter being the normalized mailbox
name. (See Section 6.3.9.7 for more details.) name. (See Section 6.3.9.7 for more details.)
Mailboxes deleted in one IMAP session MAY be announced to other IMAP Mailboxes deleted in one IMAP session MAY be announced to other IMAP
skipping to change at page 42, line 22 skipping to change at page 42, line 22
If the server's hierarchy separator character appears in the name, If the server's hierarchy separator character appears in the name,
the server SHOULD create any superior hierarchical names that are the server SHOULD create any superior hierarchical names that are
needed for the RENAME command to complete successfully. In other needed for the RENAME command to complete successfully. In other
words, an attempt to rename "foo/bar/zap" to baz/rag/zowie on a words, an attempt to rename "foo/bar/zap" to baz/rag/zowie on a
server in which "/" is the hierarchy separator character in the server in which "/" is the hierarchy separator character in the
corresponding namespace SHOULD create baz/ and baz/rag/ if they do corresponding namespace SHOULD create baz/ and baz/rag/ if they do
not already exist. not already exist.
The value of the highest-used unique identifier of the old mailbox The value of the highest-used unique identifier of the old mailbox
name MUST be preserved so that a new mailbox created with the same name MUST be preserved so that a new mailbox created with the same
name will not reuse the identifiers of the former incarnation, UNLESS name will not reuse the identifiers of the former incarnation, unless
the new incarnation has a different unique identifier validity value. the new incarnation has a different unique identifier validity value.
See the description of the UID command for more detail. See the description of the UID command for more detail.
Renaming INBOX is permitted, and has special behavior. (Note that Renaming INBOX is permitted (i.e. it doesn't result in a tagged BAD
some servers disallow renaming INBOX, so clients need to be able to response), and has special behavior. (Note that some servers
handle such RENAME failing). It moves all messages in INBOX to a new disallow renaming INBOX by returning a tagged NO response, so clients
mailbox with the given name, leaving INBOX empty. If the server need to be able to handle such RENAME failing). It moves all
implementation supports inferior hierarchical names of INBOX, these messages in INBOX to a new mailbox with the given name, leaving INBOX
are unaffected by a rename of INBOX. empty. If the server implementation supports inferior hierarchical
names of INBOX, these are unaffected by a rename of INBOX.
If the server allows creation of mailboxes with names that are not If the server allows creation of mailboxes with names that are not
valid Net-Unicode names, the server normalizes both the existing valid Net-Unicode names, the server normalizes both the existing
mailbox name parameter and the new mailbox name parameter. If the mailbox name parameter and the new mailbox name parameter. If the
normalized version of any of these 2 parameters differs from the normalized version of any of these 2 parameters differs from the
corresponding supplied version, the server SHOULD return an untagged corresponding supplied version, the server SHOULD return an untagged
LIST response with OLDNAME extended data item, with the OLDNAME value LIST response with OLDNAME extended data item, with the OLDNAME value
being the supplied existing mailbox name and the name parameter being being the supplied existing mailbox name and the name parameter being
the normalized new mailbox name (see Section 6.3.9.7). This would the normalized new mailbox name (see Section 6.3.9.7). This would
allow the client to correlate supplied name with the normalized name. allow the client to correlate supplied name with the normalized name.
skipping to change at page 45, line 10 skipping to change at page 45, line 11
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 mailbox
name
BAD - command unknown or arguments invalid BAD - command unknown or arguments invalid
The LIST command returns a subset of names from the complete set of The LIST command returns a subset of mailbox names from the complete
all names available to the client. Zero or more untagged LIST set of all mailbox names available to the client. Zero or more
replies are returned, containing the name attributes, hierarchy untagged LIST replies are returned, containing the name attributes,
delimiter, name, and possible extension information; see the hierarchy delimiter, name, and possible extension information; see
description of the LIST reply for more detail. the 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 or more of the following The extended syntax is being used if one or more of the following
skipping to change at page 47, line 11 skipping to change at page 47, line 15
Any part of the reference argument that is included in the Any part of the reference argument that is included in the
interpreted form SHOULD prefix the interpreted form. It SHOULD also interpreted form SHOULD prefix the interpreted form. It SHOULD also
be in the same form as the reference name argument. This rule be in the same form as the reference name argument. This rule
permits the client to determine if the returned mailbox name is in permits the client to determine if the returned mailbox name is in
the context of the reference argument, or if something about the the context of the reference argument, or if something about the
mailbox argument overrode the reference argument. Without this rule, mailbox argument overrode the reference argument. Without this rule,
the client would have to have knowledge of the server's naming the client would have to have knowledge of the server's naming
semantics including what characters are "breakouts" that override a semantics including what characters are "breakouts" that override a
naming context. naming context.
For example, here are some examples of how references Here are some examples of how references
and mailbox names might be interpreted on a UNIX-based and mailbox names might be interpreted on a UNIX-based
server: server:
Reference Mailbox Name Interpretation Reference Mailbox Name Interpretation
------------ ------------ -------------- ------------ ------------ --------------
~smith/Mail/ foo.* ~smith/Mail/foo.* ~smith/Mail/ foo.* ~smith/Mail/foo.*
archive/ % archive/% archive/ % archive/%
#news. comp.mail.* #news.comp.mail.* #news. comp.mail.* #news.comp.mail.*
~smith/Mail/ /usr/doc/foo /usr/doc/foo ~smith/Mail/ /usr/doc/foo /usr/doc/foo
archive/ ~fred/Mail/* ~fred/Mail/* archive/ ~fred/Mail/* ~fred/Mail/*
skipping to change at page 53, line 47 skipping to change at page 54, line 10
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.8. 11 in Section 6.3.9.8.
The returned selection criteria allow the client to distinguish a The returned selection criteria allow the client to distinguish a
solicited response from an unsolicited one, as well as to distinguish solicited response from an unsolicited one, as well as to distinguish
among solicited responses caused by multiple pipelined LIST commands among solicited responses caused by multiple pipelined LIST commands
that specify different criteria. that specify different criteria.
Servers SHOULD ONLY return a non-matching mailbox name along with Servers SHOULD only return a non-matching mailbox name along with
CHILDINFO if at least one matching child is not also being returned. CHILDINFO if at least one matching child is not also being returned.
That is, servers SHOULD suppress redundant CHILDINFO responses. That is, servers SHOULD suppress redundant CHILDINFO responses.
Examples 8 and 10 in Section 6.3.9.8 demonstrate the difference Examples 8 and 10 in Section 6.3.9.8 demonstrate the difference
between present CHILDINFO extended data item and the "\HasChildren" between present CHILDINFO extended data item and the "\HasChildren"
attribute. attribute.
The following table summarizes interaction between the "\NonExistent" The following table summarizes interaction between the "\NonExistent"
attribute and CHILDINFO (the first column indicates whether the attribute and CHILDINFO (the first column indicates whether the
parent mailbox exists): parent mailbox exists):
skipping to change at page 54, line 51 skipping to change at page 55, line 12
deleted (with DELETE command). (When a mailbox is deleted the deleted (with DELETE command). (When a mailbox is deleted the
"\NonExistent" attribute is also included.) IMAP extensions can "\NonExistent" attribute is also included.) IMAP extensions can
specify other conditions when OLDNAME extended data item should be specify other conditions when OLDNAME extended data item should be
included. included.
If the server allows de-normalized mailbox names (see Section 5.1) in If the server allows de-normalized mailbox names (see Section 5.1) in
SELECT/EXAMINE, CREATE, RENAME or DELETE, it SHOULD return an SELECT/EXAMINE, CREATE, RENAME or DELETE, it SHOULD return an
unsolicited LIST response that includes OLDNAME extended data item, unsolicited LIST response that includes OLDNAME extended data item,
whenever the supplied mailbox name differs from the resulting whenever the supplied mailbox name differs from the resulting
normalized mailbox name. From the client point of view this is normalized mailbox name. From the client point of view this is
indistinguishable from another user renaming of deleting the mailbox, indistinguishable from another user renaming or deleting the mailbox,
as specified in the previous paragraph. as specified in the previous paragraph.
A deleted mailbox can be announced like this: A deleted mailbox can be announced like this:
S: * LIST (\NonExistent) "." "INBOX.DeletedMailbox" S: * LIST (\NonExistent) "." "INBOX.DeletedMailbox"
Example of a renamed mailbox: Example of a renamed mailbox:
S: * LIST () "/" "NewMailbox" ("OLDNAME" ("OldMailbox")) S: * LIST () "/" "NewMailbox" ("OLDNAME" ("OldMailbox"))
skipping to change at page 62, line 36 skipping to change at page 63, line 15
6.3.10. NAMESPACE Command 6.3.10. NAMESPACE Command
Arguments: none Arguments: none
Responses: REQUIRED untagged responses: NAMESPACE Responses: REQUIRED untagged responses: NAMESPACE
Result: OK - command completed Result: OK - command completed
NO - Can't complete the command NO - Can't complete the command
BAD - arguments invalid BAD - arguments invalid
The NAMESPACE command causes a single ungagged NAMESPACE response to The NAMESPACE command causes a single untagged 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. The Namespace-Response-Extensions ABNF non that is not available. The Namespace-Response-Extensions ABNF non
terminal is defined for extensibility and MAY be included in the terminal is defined for extensibility and MAY be included in the
NAMESPACE response. NAMESPACE response.
Example 1: Example 1:
skipping to change at page 64, line 25 skipping to change at page 64, line 47
where there MAY be multiples of these, and a client MUST be prepared where there MAY be multiples of these, and a client MUST be prepared
for them. If a client is configured such that it is required to for them. If a client is configured such that it is required to
create a certain mailbox, there can be circumstances where it is create a certain mailbox, there can be circumstances where it is
unclear which Personal Namespaces it should create the mailbox in. unclear which Personal Namespaces it should create the mailbox in.
In these situations a client SHOULD let the user select which In these situations a client SHOULD let the user select which
namespaces to create the mailbox in or just use the first personal namespaces to create the mailbox in or just use the first personal
namespace. namespace.
Example 6: Example 6:
In this example, a server supports 2 Personal Namespaces. In In this example, a server supports two Personal Namespaces. In
addition to the regular Personal Namespace, the user has an addition to the regular Personal Namespace, the user has an
additional personal namespace to allow access to mailboxes in an MH additional personal namespace to allow access to mailboxes in an MH
format mailstore. format mailstore.
The client is configured to save a copy of all mail sent by the user The client is configured to save a copy of all mail sent by the user
into a mailbox called 'Sent Mail'. Furthermore, after a message is into a mailbox called 'Sent Mail'. Furthermore, after a message is
deleted from a mailbox, the client is configured to move that message deleted from a mailbox, the client is configured to move that message
to a mailbox called 'Deleted Items'. to a mailbox called 'Deleted Items'.
Note that this example demonstrates how some extension flags can be Note that this example demonstrates how some extension parameters can
passed to further describe the #mh namespace. be passed to further describe the #mh namespace. See the fictitious
"X-PARAM" extension parameter.
C: A001 NAMESPACE C: A001 NAMESPACE
S: * NAMESPACE (("" "/")("#mh/" "/" "X-PARAM" S: * NAMESPACE (("" "/")("#mh/" "/" "X-PARAM"
("FLAG1" "FLAG2"))) NIL NIL ("FLAG1" "FLAG2"))) NIL NIL
S: A001 OK NAMESPACE command completed S: A001 OK NAMESPACE command completed
< It is desired to keep only one copy of sent mail. < It is desired to keep only one copy of sent mail.
It is unclear which Personal Namespace the client It is unclear which Personal Namespace the client
should use to create the 'Sent Mail' mailbox. should use to create the 'Sent Mail' mailbox.
The user is prompted to select a namespace and only The user is prompted to select a namespace and only
skipping to change at page 68, line 6 skipping to change at page 68, line 12
mailboxes other than the currently selected mailbox. Because the mailboxes other than the currently selected mailbox. Because the
STATUS command can cause the mailbox to be opened internally, and STATUS command can cause the mailbox to be opened internally, and
because this information is available by other means on the because this information is available by other means on the
selected mailbox, the STATUS command SHOULD NOT be used on the selected mailbox, the STATUS command SHOULD NOT be used on the
currently selected mailbox. However, servers MUST be able to currently selected mailbox. However, servers MUST be able to
execute STATUS command on the selected mailbox. (This might also execute STATUS command on the selected mailbox. (This might also
implicitly happen when STATUS return option is used in a LIST implicitly happen when STATUS return option is used in a LIST
command). command).
The STATUS command MUST NOT be used as a "check for new messages The STATUS command MUST NOT be used as a "check for new messages
in the selected mailbox" operation (refer to sections Section 7, in the selected mailbox" operation (refer to Section 7 and
Section 7.3.1 for more information about the proper method for new Section 7.3.1 for more information about the proper method for new
message checking). message checking).
STATUS SIZE (see below) can take a significant amount of time, STATUS SIZE (see below) can take a significant amount of time,
depending upon server implementation. Clients should use STATUS depending upon server implementation. Clients should use STATUS
SIZE cautiously. SIZE cautiously.
The currently defined status data items that can be requested are: The currently defined status data items that can be requested are:
MESSAGES The number of messages in the mailbox. MESSAGES The number of messages in the mailbox.
skipping to change at page 69, line 11 skipping to change at page 69, line 18
The APPEND command appends the literal argument as a new message to The APPEND command appends the literal argument as a new message to
the end of the specified destination mailbox. This argument SHOULD the end of the specified destination mailbox. This argument SHOULD
be in the format of an [RFC-5322] or [I18N-HDRS] message. 8-bit be in the format of an [RFC-5322] or [I18N-HDRS] message. 8-bit
characters are permitted in the message. A server implementation characters are permitted in the message. A server implementation
that is unable to preserve 8-bit data properly MUST be able to that is unable to preserve 8-bit data properly MUST be able to
reversibly convert 8-bit APPEND data to 7-bit using a [MIME-IMB] reversibly convert 8-bit APPEND data to 7-bit using a [MIME-IMB]
content transfer encoding. content transfer encoding.
Note: There may be exceptions, e.g., draft messages, in which Note: There may be exceptions, e.g., draft messages, in which
required [RFC-5322] header lines are omitted in the message required [RFC-5322] header fields are omitted in the message
literal argument to APPEND. The full implications of doing so literal argument to APPEND. The full implications of doing so
must be understood and carefully weighed. must be understood and carefully weighed.
If a flag parenthesized list is specified, the flags SHOULD be set in If a flag parenthesized list is specified, the flags SHOULD be set in
the resulting message; otherwise, the flag list of the resulting the resulting message; otherwise, the flag list of the resulting
message is set to empty by default. message is set to empty by default.
If a date-time is specified, the internal date SHOULD be set in the If a date-time is specified, the internal date SHOULD be set in the
resulting message; otherwise, the internal date of the resulting resulting message; otherwise, the internal date of the resulting
message is set to the current date and time by default. message is set to the current date and time by default.
skipping to change at page 72, line 10 skipping to change at page 72, line 10
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
Without the IDLE command a client requires to poll the server for Without the IDLE command a client would need to poll the server for
changes to the selected mailbox (new mail, deletions, flag changes). changes to the selected mailbox (new mail, deletions, flag changes).
It's often more desirable to have the server transmit updates to the It's often more desirable to have the server transmit updates to the
client in real time. This allows a user to see new mail immediately. client in real time. This allows a user to see new mail immediately.
The IDLE command allows a client to tell the server that it's ready The IDLE command allows a client to tell the server that it's ready
to accept such real-time updates. to accept such real-time updates.
The IDLE command is sent from the client to the server when the The IDLE command is sent from the client to the server when the
client is ready to accept unsolicited update messages. The server client is ready to accept unsolicited update messages. The server
requests a response to the IDLE command using the continuation ("+") requests a response to the IDLE command using the continuation ("+")
response. The IDLE command remains active until the client responds response. The IDLE command remains active until the client responds
to the continuation, and as long as an IDLE command is active, the to the continuation, and as long as an IDLE command is active, the
server is now free to send untagged EXISTS, EXPUNGE, FETCH, and other server is now free to send untagged EXISTS, EXPUNGE, FETCH, and other
responses at any time. If the server choose to send unsolicited responses at any time. If the server chooses to send unsolicited
FETCH responses, they MUST include UID FETCH item. FETCH responses, they MUST include UID FETCH item.
The IDLE command is terminated by the receipt of a "DONE" The IDLE command is terminated by the receipt of a "DONE"
continuation from the client; such response satisfies the server's continuation from the client; such response satisfies the server's
continuation request. At that point, the server MAY send any continuation request. At that point, the server MAY send any
remaining queued untagged responses and then MUST immediately send remaining queued untagged responses and then MUST immediately send
the tagged response to the IDLE command and prepare to process other the tagged response to the IDLE command and prepare to process other
commands. As for other commands, the processing of any new command commands. As for other commands, the processing of any new command
may cause the sending of unsolicited untagged responses, subject to may cause the sending of unsolicited untagged responses, subject to
the ambiguity limitations. The client MUST NOT send a command while the ambiguity limitations. The client MUST NOT send a command while
skipping to change at page 74, line 44 skipping to change at page 74, line 44
6.4.2. UNSELECT Command 6.4.2. UNSELECT Command
Arguments: none Arguments: none
Responses: no specific responses for this command Responses: no specific responses for this command
Result: OK - unselect completed, now in authenticated state Result: OK - unselect completed, now in authenticated state
BAD - no mailbox selected, or argument supplied but none BAD - no mailbox selected, or argument supplied but none
permitted permitted
The UNSELECT command frees server's resources associated with the The UNSELECT command frees session's resources associated with the
selected mailbox and returns the server to the authenticated state. selected mailbox and returns the server to the authenticated state.
This command performs the same actions as CLOSE, except that no This command performs the same actions as CLOSE, except that no
messages are permanently removed from the currently selected mailbox. messages are permanently removed from the currently selected mailbox.
Example: C: A342 UNSELECT Example: C: A342 UNSELECT
S: A342 OK Unselect completed S: A342 OK Unselect completed
6.4.3. EXPUNGE Command 6.4.3. EXPUNGE Command
Arguments: none Arguments: none
skipping to change at page 76, line 5 skipping to change at page 76, line 5
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). The order of individual options is is assumed (see below). The order of individual options is
arbitrary. Individual options may contain parameters enclosed in arbitrary. Individual options may contain parameters enclosed in
parentheses (*). If an option has parameters, they consist of atoms parentheses. (However, if an option has a mandatory parameter, which
can always be represented as a number or a sequence-set, the option
parameter does not need the enclosing parentheses. See the ABNF for
more details). If an option has parameters, they consist of atoms
and/or strings and/or lists in a specific order. Any options not and/or strings and/or lists in a specific order. Any options not
defined by extensions that the server supports must be rejected with defined by extensions that the server supports MUST be rejected with
a BAD response. a BAD response.
(*) - if an option has a mandatory parameter, which can always be
represented as a number or a sequence-set, the option parameter does
not need the enclosing (). See the 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
criteria. criteria.
If the SEARCH results in no matches, the server MUST NOT If the SEARCH results in no matches, the server MUST NOT
include the MIN result option in the ESEARCH response; however, include the MIN result option in the ESEARCH response; however,
it still MUST send the ESEARCH response. it still MUST send the ESEARCH response.
skipping to change at page 76, line 45 skipping to change at page 76, line 44
Return all message numbers/UIDs that satisfy the SEARCH Return all message numbers/UIDs that satisfy the SEARCH
criteria using the sequence-set syntax. Note, the client MUST criteria using the sequence-set syntax. Note, the client MUST
NOT assume that messages/UIDs will be listed in any particular NOT assume that messages/UIDs will be listed in any particular
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 the number of 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 SAVE
This option tells the server to remember the result of the This option tells the server to remember the result of the
SEARCH or UID SEARCH command (as well as any command based on SEARCH or UID SEARCH command (as well as any command based on
SEARCH, e.g., SORT and THREAD [RFC5256]>) and store it in an SEARCH, e.g., SORT and THREAD [RFC5256]>) and store it in an
internal variable that we will reference as the "search result internal variable that we will reference as the "search result
variable". The client can use the "$" marker to reference the variable". The client can use the "$" marker to reference the
content of this internal variable. The "$" marker can be used content of this internal variable. The "$" marker can be used
instead of message sequence or UID sequence in order to instead of message sequence or UID sequence in order to
indicate that the server should substitute it with the list of indicate that the server should substitute it with the list of
messages from the search result variable. Thus, the client can messages from the search result variable. Thus, the client can
use the result of the latest remembered SEARCH command as a use the result of the latest remembered SEARCH command as a
skipping to change at page 79, line 8 skipping to change at page 79, line 5
DELETED Messages with the \Deleted flag set. DELETED Messages with the \Deleted flag set.
DRAFT Messages with the \Draft flag set. DRAFT Messages with the \Draft flag set.
FLAGGED Messages with the \Flagged flag set. FLAGGED Messages with the \Flagged flag set.
FROM <string> Messages that contain the specified string in the FROM <string> Messages that contain the specified string in the
envelope structure's FROM field. envelope structure's FROM field.
HEADER <field-name> <string> Messages that have a header with the HEADER <field-name> <string> Messages that have a header field with
specified field-name (as defined in [RFC-5322]) and that contains the specified field-name (as defined in [RFC-5322]) and that
the specified string in the text of the header (what comes after contains the specified string in the text of the header field
the colon). If the string to search is zero-length, this matches (what comes after the colon). If the string to search is zero-
all messages that have a header line with the specified field-name length, this matches all messages that have a header field with
regardless of the contents. Servers should use substring search the specified field-name regardless of the contents. Servers
for this SEARCH item, as clients can use it for automatic should use substring search for this SEARCH item, as clients can
processing not initiated by end users. For example this can be use it for automatic processing not initiated by end users. For
used for searching for Message-ID or Content-Type header field example this can be used for searching for Message-ID or Content-
values that need to be exact, or for searches in header fields Type header field values that need to be exact, or for searches in
that the IMAP server might not know anything about. header fields that the IMAP server might not know anything about.
KEYWORD <flag> Messages with the specified keyword flag set. KEYWORD <flag> Messages with the specified keyword flag set.
LARGER <n> Messages with an [RFC-5322] size larger than the LARGER <n> Messages with an [RFC-5322] size larger than the
specified number of octets. specified number of octets.
NOT <search-key> Messages that do not match the specified search NOT <search-key> Messages that do not match the specified search
key. key.
ON <date> Messages whose internal date (disregarding time and ON <date> Messages whose internal date (disregarding time and
timezone) is within the specified date. timezone) is within the specified date.
OR <search-key1> <search-key2> Messages that match either search OR <search-key1> <search-key2> Messages that match either search
key. key.
SEEN Messages that have the \Seen flag set. SEEN Messages that have the \Seen flag set.
SENTBEFORE <date> Messages whose [RFC-5322] Date: header SENTBEFORE <date> Messages whose [RFC-5322] Date: header field
(disregarding time and timezone) is earlier than the specified (disregarding time and timezone) is earlier than the specified
date. date.
SENTON <date> Messages whose [RFC-5322] Date: header (disregarding SENTON <date> Messages whose [RFC-5322] Date: header field
time and timezone) is within the specified date. (disregarding time and timezone) is within the specified date.
SENTSINCE <date> Messages whose [RFC-5322] Date: header SENTSINCE <date> Messages whose [RFC-5322] Date: header field
(disregarding time and timezone) is within or later than the (disregarding time and timezone) is within or later than the
specified date. specified date.
SINCE <date> Messages whose internal date (disregarding time and SINCE <date> Messages whose internal date (disregarding time and
timezone) is within or later than the specified date. timezone) is within or later than the specified date.
SMALLER <n> Messages with an [RFC-5322] size smaller than the SMALLER <n> Messages with an [RFC-5322] size smaller than the
specified number of octets. specified number of octets.
SUBJECT <string> Messages that contain the specified string in the SUBJECT <string> Messages that contain the specified string in the
skipping to change at page 83, line 40 skipping to change at page 83, line 40
6.4.4.2. Multiple Commands in Progress 6.4.4.2. Multiple Commands in Progress
Use of a SEARCH RETURN (SAVE) command followed by a command using the Use of a SEARCH RETURN (SAVE) command followed by a command using the
"$" marker creates direct dependency between the two commands. As "$" marker creates direct dependency between the two commands. As
directed by Section 5.5, a server MUST execute the two commands in directed by Section 5.5, a server MUST execute the two commands in
the order they were received. the order they were received.
A client MAY pipeline a SEARCH RETURN (SAVE) command with one or more 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 command using the "$" marker, as long as this doesn't create an
ambiguity, as described in by Section 5.5. Examples 7-9 in ambiguity, as described in Section 5.5. Examples 7-9 in
Section 6.4.4.4 explain this in more details. Section 6.4.4.4 explain this in more details.
6.4.4.3. Refusing to Save Search Results 6.4.4.3. Refusing to Save Search Results
In some cases, the server MAY refuse to save a SEARCH (SAVE) result, 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 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 reached. In this case, the server MUST return a tagged NO response
containing the NOTSAVED response code and set the search result containing the NOTSAVED response code and set the search result
variable to the empty sequence, as described in Section 6.4.4.1. variable to the empty sequence, as described in Section 6.4.4.1.
skipping to change at page 102, line 36 skipping to change at page 102, line 36
completion of the CLOSE or the UNSELECT command (or similar), completion of the CLOSE or the UNSELECT command (or similar),
whose purpose is to close the currently selected mailbox whose purpose is to close the currently selected mailbox
without opening a new one. without opening a new one.
CONTACTADMIN CONTACTADMIN
The user should contact the system administrator or support The user should contact the system administrator or support
desk. desk.
C: e login "fred" "foo" C: e login "fred" "foo"
S: e OK [CONTACTADMIN] S: e NO [CONTACTADMIN]
COPYUID COPYUID
Followed by the UIDVALIDITY of the destination mailbox, a UID Followed by the UIDVALIDITY of the destination mailbox, a UID
set containing the UIDs of the message(s) in the source mailbox set containing the UIDs of the message(s) in the source mailbox
that were copied to the destination mailbox and containing the that were copied to the destination mailbox and containing the
UIDs assigned to the copied message(s) in the destination UIDs assigned to the copied message(s) in the destination
mailbox, indicates that the message(s) have been copied to the mailbox, indicates that the message(s) have been copied to the
destination mailbox with the stated UID(s). destination mailbox with the stated UID(s).
skipping to change at page 122, line 48 skipping to change at page 122, line 48
are in the following order: personal name, [SMTP] at-domain- are in the following order: personal name, [SMTP] at-domain-
list (source route, obs-route), mailbox name, and host name. list (source route, obs-route), mailbox name, and host name.
[RFC-5322] group syntax is indicated by a special form of [RFC-5322] group syntax is indicated by a special form of
address structure in which the host name field is NIL. If the address structure in which the host name field is NIL. If the
mailbox name field is also NIL, this is an end of group marker mailbox name field is also NIL, this is an end of group marker
(semi-colon in RFC 822 syntax). If the mailbox name field is (semi-colon in RFC 822 syntax). If the mailbox name field is
non-NIL, this is a start of group marker, and the mailbox name non-NIL, this is a start of group marker, and the mailbox name
field holds the group name phrase. field holds the group name phrase.
If the Date, Subject, In-Reply-To, and Message-ID header lines If the Date, Subject, In-Reply-To, and Message-ID header fields
are absent in the [RFC-5322] header, the corresponding member are absent in the [RFC-5322] header, the corresponding member
of the envelope is NIL; if these header lines are present but of the envelope is NIL; if these header fields are present but
empty the corresponding member of the envelope is the empty empty the corresponding member of the envelope is the empty
string. string.
Note: some servers may return a NIL envelope member in the Note: some servers may return a NIL envelope member in the
"present but empty" case. Clients SHOULD treat NIL and "present but empty" case. Clients SHOULD treat NIL and
empty string as identical. empty string as identical.
Note: [RFC-5322] requires that all messages have a valid Note: [RFC-5322] requires that all messages have a valid
Date header. Therefore, for a well-formed message the date Date header field. Therefore, for a well-formed message the
member in the envelope can not be NIL or the empty string. date member in the envelope can not be NIL or the empty
However it can be NIL for a malformed or a draft message. string. However it can be NIL for a malformed or a draft
message.
Note: [RFC-5322] requires that the In-Reply-To and Message- Note: [RFC-5322] requires that the In-Reply-To and Message-
ID headers, if present, have non-empty content. Therefore, ID header fields, if present, have non-empty content.
for a well-formed message the in-reply-to and message-id Therefore, for a well-formed message the in-reply-to and
members in the envelope can not be the empty string. message-id members in the envelope can not be the empty
However they can still be the empty string for a malformed string. However they can still be the empty string for a
message. malformed message.
If the From, To, Cc, and Bcc header lines are absent in the If the From, To, Cc, and Bcc header fields are absent in the
[RFC-5322] header, or are present but empty, the corresponding [RFC-5322] header, or are present but empty, the corresponding
member of the envelope is NIL. member of the envelope is NIL.
If the Sender or Reply-To lines are absent in the [RFC-5322] If the Sender or Reply-To header fields are absent in the
header, or are present but empty, the server sets the [RFC-5322] header, or are present but empty, the server sets
corresponding member of the envelope to be the same value as the corresponding member of the envelope to be the same value
the from member (the client is not expected to know to do as the from member (the client is not expected to know to do
this). this).
Note: [RFC-5322] requires that all messages have a valid Note: [RFC-5322] requires that all messages have a valid
From header. Therefore, for a well-formed message the from, From header field. Therefore, for a well-formed message the
sender, and reply-to members in the envelope can not be NIL. from, sender, and reply-to members in the envelope can not
However they can be NIL for a malformed or a draft message. be NIL. However they can be NIL for a malformed or a draft
message.
FLAGS A parenthesized list of flags that are set for this message. FLAGS A parenthesized list of flags that are set for this message.
INTERNALDATE A string representing the internal date of the message. INTERNALDATE A string representing the internal date of the message.
RFC822.SIZE A number expressing the [RFC-5322] size of the message. RFC822.SIZE A number expressing the [RFC-5322] size of the message.
UID A number expressing the unique identifier of the message. UID A number expressing the unique identifier of the message.
If the server chooses to send unsolicited FETCH responses, they MUST If the server chooses to send unsolicited FETCH responses, they MUST
skipping to change at page 158, line 6 skipping to change at page 158, line 6
Appendix G. Acknowledgement Appendix G. Acknowledgement
Earlier versions of this document were edited by Mark Crispin. Earlier versions of this document were edited by Mark Crispin.
Sadly, he is no longer available to help with this work. Editors of Sadly, he is no longer available to help with this work. Editors of
this revisions are hoping that Mark would have approved. this revisions are hoping that Mark would have approved.
Chris Newman has contributed text on I18N and use of UTF-8 in Chris Newman has contributed text on I18N and use of UTF-8 in
messages and mailbox names. messages and mailbox names.
Thank you to Tony Hansen for helping with the index generation. Thank you to Tony Hansen for helping with the index generation.
Thank you to Timo Sirainen, Bron Gondwana, Stephan Bosch and Arnt Thank you to Murray Kucherawy, Timo Sirainen, Bron Gondwana, Stephan
Gulbrandsen for extensive feedback. Bosch and Arnt Gulbrandsen for extensive feedback.
This document incorporate text from RFC 4315 (by Mark Crispin), RFC This document incorporate text from RFC 4315 (by Mark Crispin), RFC
4466 (by Cyrus Daboo), RFC 4731 (by Dave Cridland), RFC 5161 (by Arnt 4466 (by Cyrus Daboo), RFC 4731 (by Dave Cridland), RFC 5161 (by Arnt
Gulbrandsen), RFC 5465 (by Arnt Gulbrandsen and Curtis King), RFC Gulbrandsen), RFC 5465 (by Arnt Gulbrandsen and Curtis King), RFC
5530 (by Arnt Gulbrandsen), RFC 5819 (by Timo Sirainen), RFC 6154 (by 5530 (by Arnt Gulbrandsen), RFC 5819 (by Timo Sirainen), RFC 6154 (by
Jamie Nicolson), RFC 8438 (by Stephan Bosch) so work done by authors/ Jamie Nicolson), RFC 8438 (by Stephan Bosch) so work done by authors/
editors of these documents is appreciated. Note that editors of this editors of these documents is appreciated. Note that editors of this
document were redacted from the above list. document were redacted from the above list.
The CHILDREN return option was originally proposed by Mike Gahrns and The CHILDREN return option was originally proposed by Mike Gahrns and
skipping to change at page 158, line 32 skipping to change at page 158, line 32
Thank you to Damian Poddebniak for pointing out that the ENABLE Thank you to Damian Poddebniak for pointing out that the ENABLE
command should be a member of "command-auth" and not "command-any" command should be a member of "command-auth" and not "command-any"
ABNF production. ABNF production.
Index Index
$ $
$Forwarded (predefined flag) 12 $Forwarded (predefined flag) 12
$Junk (predefined flag) 12 $Junk (predefined flag) 12
$MDNSent (predefined flag) 12 $MDNSent (predefined flag) 12
$NotJunk (predefined flag) 12 $NotJunk (predefined flag) 13
$Phishing (predefined flag) 13 $Phishing (predefined flag) 13
+ +
+FLAGS <flag list> 92 +FLAGS <flag list> 92
+FLAGS.SILENT <flag list> 92 +FLAGS.SILENT <flag list> 92
- -
-FLAGS <flag list> 92 -FLAGS <flag list> 92
-FLAGS.SILENT <flag list> 92 -FLAGS.SILENT <flag list> 92
skipping to change at page 160, line 24 skipping to change at page 160, line 24
F F
FAST (fetch item) 88 FAST (fetch item) 88
FETCH (command) 87 FETCH (command) 87
FETCH (response) 118 FETCH (response) 118
FLAGGED (search key) 78 FLAGGED (search key) 78
FLAGS (fetch item) 90 FLAGS (fetch item) 90
FLAGS (fetch result) 123 FLAGS (fetch result) 123
FLAGS (response) 116 FLAGS (response) 116
FLAGS <flag list> (store command data item) 92 FLAGS <flag list> (store command data item) 92
FLAGS.SILENT <flag list> (store command data item) 92 FLAGS.SILENT <flag list> (store command data item) 92
FROM <string> (search key) 79 FROM <string> (search key) 78
FULL (fetch item) 88 FULL (fetch item) 88
Flags (message attribute) 11 Flags (message attribute) 11
H H
HASCHILDREN (response code) 103 HASCHILDREN (response code) 103
HEADER (part specifier) 90 HEADER (part specifier) 90
HEADER <field-name> <string> (search key) 79 HEADER <field-name> <string> (search key) 79
HEADER.FIELDS (part specifier) 90 HEADER.FIELDS (part specifier) 90
HEADER.FIELDS.NOT (part specifier) 90 HEADER.FIELDS.NOT (part specifier) 90
skipping to change at page 161, line 17 skipping to change at page 161, line 17
MAY (specification requirement term) 5 MAY (specification requirement term) 5
MESSAGES (status item) 68 MESSAGES (status item) 68
MIME (part specifier) 91 MIME (part specifier) 91
MIN (search result option) 76 MIN (search result option) 76
MOVE (command) 94 MOVE (command) 94
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) 62 NAMESPACE (command) 63
NAMESPACE (response) 115 NAMESPACE (response) 115
NO (response) 108 NO (response) 108
NONEXISTENT (response code) 104 NONEXISTENT (response code) 104
NOOP (command) 26 NOOP (command) 26
NOPERM (response code) 104 NOPERM (response code) 104
NOT <search-key> (search key) 79 NOT <search-key> (search key) 79
NOT RECOMMENDED (specification requirement term) 5 NOT RECOMMENDED (specification requirement term) 5
O O
OK (response) 107 OK (response) 107
skipping to change at page 162, line 19 skipping to change at page 162, line 19
SERVERBUG (response code) 106 SERVERBUG (response code) 106
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) 79 SINCE <date> (search key) 79
SIZE (status item) 68 SIZE (status item) 68
SMALLER <n> (search key) 79 SMALLER <n> (search key) 79
STARTTLS (command) 28 STARTTLS (command) 28
STATUS (command) 67 STATUS (command) 67
STATUS (response) 115 STATUS (response) 115
STORE (command) 92 STORE (command) 92
SUBJECT <string> (search key) 80 SUBJECT <string> (search key) 79
SUBSCRIBE (command) 43 SUBSCRIBE (command) 43
Session Flag (class of flag) 13 Session Flag (class of flag) 13
System Flag (type of flag) 11 System Flag (type of flag) 12
T T
TEXT (part specifier) 90 TEXT (part specifier) 90
TEXT <string> (search key) 80 TEXT <string> (search key) 80
TO <string> (search key) 80 TO <string> (search key) 80
TRYCREATE (response code) 106 TRYCREATE (response code) 106
U U
UID (command) 96 UID (command) 96
UID (fetch item) 90 UID (fetch item) 90
 End of changes. 63 change blocks. 
132 lines changed or deleted 142 lines changed or added

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