As per Relevance of the word complete, we have this rfc below:











Network Working Group M.
Request for Comments: 2060 University of
Obsoletes: 1730 December 1996
Category: Standards


INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev

Status of this

This document specifies an Internet standards track protocol for
Internet community, and requests discussion and suggestions
improvements. Please refer to the current edition of the "
Official Protocol Standards" (STD 1) for the standardization
and status of this protocol. Distribution of this memo is unlimited



The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1)
allows a client to access and manipulate electronic mail messages
a server. IMAP4rev1 permits manipulation of remote message folders
called "mailboxes", in a way that is functionally equivalent to
mailboxes. IMAP4rev1 also provides the capability for an
client to resynchronize with the server (see also [IMAP-DISC]).

IMAP4rev1 includes operations for creating, deleting, and
mailboxes; checking for new messages; permanently removing messages
setting and clearing flags; [RFC-822] and [MIME-IMB] parsing
searching; and selective fetching of message attributes, texts,
portions thereof. Messages in IMAP4rev1 are accessed by the use
numbers. These numbers are either message sequence numbers or
identifiers

IMAP4rev1 supports a single server. A mechanism for
configuration information to support multiple IMAP4rev1 servers
discussed in [ACAP].

IMAP4rev1 does not specify a means of posting mail; this function
handled by a mail transfer protocol such as [SMTP].

IMAP4rev1 is designed to be upwards compatible from the [IMAP2]
unpublished IMAP2bis protocols. In the course of the evolution
IMAP4rev1, some aspects in the earlier protocol have become obsolete
Obsolete commands, responses, and data formats which an IMAP4rev
implementation may encounter when used with an earlier
are described in [IMAP-OBSOLETE].





Crispin Standards Track [Page 1]

RFC 2060 IMAP4rev1 December 1996


Other compatibility issues with IMAP2bis, the most common variant
the earlier protocol, are discussed in [IMAP-COMPAT]. A
discussion of compatibility issues with rare (and presumed extinct
variants of [IMAP2] is in [IMAP-HISTORICAL]; this document
primarily of historical interest

Table of

IMAP4rev1 Protocol Specification .................................. 4
1. How to Read This Document ................................. 4
1.1. Organization of This Document ............................. 4
1.2. Conventions Used in This Document ......................... 4
2. Protocol Overview ......................................... 5
2.1. Link Level ................................................ 5
2.2. Commands and Responses .................................... 6
2.2.1. Client Protocol Sender and Server Protocol Receiver ....... 6
2.2.2. Server Protocol Sender and Client Protocol Receiver ....... 7
2.3. Message Attributes ........................................ 7
2.3.1. Message Numbers ........................................... 7
2.3.1.1. Unique Identifier (UID) Message Attribute ......... 7
2.3.1.2. Message Sequence Number Message Attribute ......... 9
2.3.2. Flags Message Attribute .................................... 9
2.3.3. Internal Date Message Attribute ........................... 10
2.3.4. [RFC-822] Size Message Attribute .......................... 11
2.3.5. Envelope Structure Message Attribute ...................... 11
2.3.6. Body Structure Message Attribute .......................... 11
2.4. Message Texts ............................................. 11
3. State and Flow Diagram .................................... 11
3.1. Non-Authenticated State ................................... 11
3.2. Authenticated State ....................................... 11
3.3. Selected State ............................................ 12
3.4. Logout State .............................................. 12
4. Data Formats .............................................. 12
4.1. Atom ...................................................... 13
4.2. Number .................................................... 13
4.3. String ..................................................... 13
4.3.1. 8-bit and Binary Strings .................................. 13
4.4. Parenthesized List ........................................ 14
4.5. NIL ....................................................... 14
5. Operational Considerations ................................ 14
5.1. Mailbox Naming ............................................ 14
5.1.1. Mailbox Hierarchy Naming .................................. 14
5.1.2. Mailbox Namespace Naming Convention ....................... 14
5.1.3. Mailbox International Naming Convention ................... 15
5.2. Mailbox Size and Message Status Updates ................... 16
5.3. Response when no Command in Progress ...................... 16
5.4. Autologout Timer .......................................... 16
5.5. Multiple Commands in Progress ............................. 17



Crispin Standards Track [Page 2]

RFC 2060 IMAP4rev1 December 1996


6. Client Commands ........................................... 17
6.1. Client Commands - Any State ............................... 18
6.1.1. CAPABILITY Command ........................................ 18
6.1.2. NOOP Command .............................................. 19
6.1.3. LOGOUT Command ............................................ 20
6.2. Client Commands - Non-Authenticated State ................. 20
6.2.1. AUTHENTICATE Command ...................................... 21
6.2.2. LOGIN Command ............................................. 22
6.3. Client Commands - Authenticated State ..................... 22
6.3.1. SELECT Command ............................................ 23
6.3.2. EXAMINE Command ........................................... 24
6.3.3. CREATE Command ............................................ 25
6.3.4. DELETE Command ............................................ 26
6.3.5. RENAME Command ............................................ 27
6.3.6. SUBSCRIBE Command ......................................... 29
6.3.7. UNSUBSCRIBE Command ....................................... 30
6.3.8. LIST Command .............................................. 30
6.3.9. LSUB Command .............................................. 32
6.3.10. STATUS Command ............................................ 33
6.3.11. APPEND Command ............................................ 34
6.4. Client Commands - Selected State .......................... 35
6.4.1. CHECK Command ............................................. 36
6.4.2. CLOSE Command ............................................. 36
6.4.3. EXPUNGE Command ........................................... 37
6.4.4. SEARCH Command ............................................ 37
6.4.5. FETCH Command ............................................. 41
6.4.6. STORE Command ............................................. 45
6.4.7. COPY Command .............................................. 46
6.4.8. UID Command ............................................... 47
6.5. Client Commands - Experimental/Expansion .................. 48
6.5.1. X Command ........................................... 48
7. Server Responses .......................................... 48
7.1. Server Responses - Status Responses ....................... 49
7.1.1. OK Response ............................................... 51
7.1.2. NO Response ............................................... 51
7.1.3. BAD Response .............................................. 52
7.1.4. PREAUTH Response .......................................... 52
7.1.5. BYE Response .............................................. 52
7.2. Server Responses - Server and Mailbox Status .............. 53
7.2.1. CAPABILITY Response ....................................... 53
7.2.2. LIST Response .............................................. 54
7.2.3. LSUB Response ............................................. 55
7.2.4 STATUS Response ........................................... 55
7.2.5. SEARCH Response ........................................... 55
7.2.6. FLAGS Response ............................................ 56
7.3. Server Responses - Mailbox Size ........................... 56
7.3.1. EXISTS Response ........................................... 56
7.3.2. RECENT Response ........................................... 57



Crispin Standards Track [Page 3]

RFC 2060 IMAP4rev1 December 1996


7.4. Server Responses - Message Status ......................... 57
7.4.1. EXPUNGE Response .......................................... 57
7.4.2. FETCH Response ............................................ 58
7.5. Server Responses - Command Continuation Request ........... 63
8. Sample IMAP4rev1 connection ............................... 63
9. Formal Syntax ............................................. 64
10. Author's Note ............................................. 74
11. Security Considerations ................................... 74
12. Author's Address .......................................... 75
Appendices ........................................................ 76
A. References ................................................ 76
B. Changes from RFC 1730 ..................................... 77
C. Key Word Index ............................................ 79


IMAP4rev1 Protocol

1. How to Read This

1.1. Organization of This

This document is written from the point of view of the implementor
an IMAP4rev1 client or server. Beyond the protocol overview
section 2, it is not optimized for someone trying to understand
operation of the protocol. The material in sections 3 through 5
provides the general context and definitions with which IMAP4rev
operates

Sections 6, 7, and 9 describe the IMAP commands, responses,
syntax, respectively. The relationships among these are such that
is almost impossible to understand any of them separately.
particular, do not attempt to deduce command syntax from the
section alone; instead refer to the Formal Syntax section

1.2. Conventions Used in This

In examples, "C:" and "S:" indicate lines sent by the client
server respectively

The following terms are used in this document to signify
requirements of this specification

1) MUST, or the adjective REQUIRED, means that the definition
an absolute requirement of the specification

2) MUST NOT that the definition is an absolute prohibition of
specification




Crispin Standards Track [Page 4]

RFC 2060 IMAP4rev1 December 1996


3) SHOULD means that there may exist valid reasons in
circumstances to ignore a particular item, but the
implications MUST be understood and carefully weighed
choosing a different course

4) SHOULD NOT means that there may exist valid reasons
particular circumstances when the particular behavior
acceptable or even useful, but the full implications SHOULD
understood and the case carefully weighed before
any behavior described with this label

5) MAY, or the adjective OPTIONAL, means that an item is
optional. One vendor may choose to include the item because
particular marketplace requires it or because the vendor
that it enhances the product while another vendor may omit
same item. An implementation which does not include
particular option MUST be prepared to interoperate with
implementation which does include the option

"Can" is used instead of "may" when referring to a
circumstance or situation, as opposed to an optional facility
the protocol

"User" is used to refer to a human user, whereas "client"
to the software being run by the user

"Connection" refers to the entire sequence of client/
interaction from the initial establishment of the
connection until its termination. "Session" refers to
sequence of client/server interaction from the time that a
is selected (SELECT or EXAMINE command) until the time
selection ends (SELECT or EXAMINE of another mailbox,
command, or connection termination).

Characters are 7-bit US-ASCII unless otherwise specified.
character sets are indicated using a "CHARSET", as described
[MIME-IMT] and defined in [CHARSET]. CHARSETs have
additional semantics in addition to defining character set;
to these documents for more detail

2. Protocol

2.1. Link

The IMAP4rev1 protocol assumes a reliable data stream such
provided by TCP. When TCP is used, an IMAP4rev1 server listens
port 143.




Crispin Standards Track [Page 5]

RFC 2060 IMAP4rev1 December 1996


2.2. Commands and

An IMAP4rev1 connection consists of the establishment of
client/server network connection, an initial greeting from
server, and client/server interactions. These client/
interactions consist of a client command, server data, and a
completion result response

All interactions transmitted by client and server are in the form
lines; that is, strings that end with a CRLF. The protocol
of an IMAP4rev1 client or server is either reading a line, or
reading a sequence of octets with a known count followed by a line

2.2.1. Client Protocol Sender and Server Protocol

The client command begins an operation. Each client command
prefixed with an identifier (typically a short alphanumeric string
e.g. A0001, A0002, etc.) called a "tag". A different tag
generated by the client for each command

There are two cases in which a line from the client does
represent a complete command. In one case, a command argument
quoted with an octet count (see the description of literal in
under Data Formats); in the other case, the command arguments
server feedback (see the AUTHENTICATE command). In either case,
server sends a command continuation request response if it is
for the octets (if appropriate) and the remainder of the command
This response is prefixed with the token "+".

Note: If, instead, the server detected an error in the command,
sends a BAD completion response with tag matching the command (
described below) to reject the command and prevent the client
sending any more of the command

It is also possible for the server to send a completion
for some other command (if multiple commands are in progress),
untagged data. In either case, the command continuation
is still pending; the client takes the appropriate action for
response, and reads another response from the server. In
cases, the client MUST send a complete command (
receiving all command continuation request responses and
continuations for the command) before initiating a new command

The protocol receiver of an IMAP4rev1 server reads a command
from the client, parses the command and its arguments, and
server data and a server command completion result response





Crispin Standards Track [Page 6]

RFC 2060 IMAP4rev1 December 1996


2.2.2. Server Protocol Sender and Client Protocol

Data transmitted by the server to the client and status
that do not indicate command completion are prefixed with the
"*", and are called untagged responses

Server data MAY be sent as a result of a client command, or MAY
sent unilaterally by the server. There is no syntactic
between server data that resulted from a specific command and
data that were sent unilaterally

The server completion result response indicates the success
failure of the operation. It is tagged with the same tag as
client command which began the operation. Thus, if more than
command is in progress, the tag in a server completion
identifies the command to which the response applies. There
three possible server completion responses: OK (indicating success),
NO (indicating failure), or BAD (indicating protocol error such
unrecognized command or command syntax error).

The protocol receiver of an IMAP4rev1 client reads a response
from the server. It then takes action on the response based upon
first token of the response, which can be a tag, a "*", or a "+".

A client MUST be prepared to accept any server response at all times
This includes server data that was not requested. Server data
be recorded, so that the client can reference its recorded
rather than sending a command to the server to request the data.
the case of certain server data, the data MUST be recorded

This topic is discussed in greater detail in the Server
section

2.3. Message

In addition to message text, each message has several
associated with it. These attributes may be retrieved
or in conjunction with other attributes or message texts

2.3.1. Message

Messages in IMAP4rev1 are accessed by one of two numbers; the
identifier and the message sequence number

2.3.1.1. Unique Identifier (UID) Message

A 32-bit value assigned to each message, which when used with
unique identifier validity value (see below) forms a 64-bit



Crispin Standards Track [Page 7]

RFC 2060 IMAP4rev1 December 1996


that is permanently guaranteed not to refer to any other message
the mailbox. Unique identifiers are assigned in a strictly
fashion in the mailbox; as each message is added to the mailbox it
assigned a higher UID than the message(s) which were
previously

Unlike message sequence numbers, unique identifiers are
necessarily contiguous. Unique identifiers also persist
sessions. This permits a client to resynchronize its state from
previous session with the server (e.g. disconnected or offline
clients); this is discussed further in [IMAP-DISC].

Associated with every mailbox is a unique identifier validity value
which is sent in an UIDVALIDITY response code in an OK
response at mailbox selection time. If unique identifiers from
earlier session fail to persist to this session, the
identifier validity value MUST be greater than the one used in
earlier session

Note: Unique identifiers MUST be strictly ascending in the
at all times. If the physical message store is re-ordered by
non-IMAP agent, this requires that the unique identifiers in
mailbox be regenerated, since the former unique identifers are
longer strictly ascending as a result of the re-ordering.
instance in which unique identifiers are regenerated is if
message store has no mechanism to store unique identifiers
Although this specification recognizes that this may
unavoidable in certain server environments, it STRONGLY
message store implementation techniques that avoid this problem

Another cause of non-persistance is if the mailbox is deleted
a new mailbox with the same name is created at a later date,
the name is the same, a client may not know that this is a
mailbox unless the unique identifier validity is different.
good value to use for the unique identifier validity value is
32-bit representation of the creation date/time of the mailbox
It is alright to use a constant such as 1, but only if
guaranteed that unique identifiers will never be reused, even
the case of a mailbox being deleted (or renamed) and a new
by the same name created at some future time

The unique identifier of a message MUST NOT change during
session, and SHOULD NOT change between sessions. However, if it
not possible to preserve the unique identifier of a message in
subsequent session, each subsequent session MUST have a new
identifier validity value that is larger than any that was
previously




Crispin Standards Track [Page 8]

RFC 2060 IMAP4rev1 December 1996


2.3.1.2. Message Sequence Number Message

A relative position from 1 to the number of messages in the mailbox
This position MUST be ordered by ascending unique identifier.
each new message is added, it is assigned a message sequence
that is 1 higher than the number of messages in the mailbox
that new message was added

Message sequence numbers can be reassigned during the session.
example, when a message is permanently removed (expunged) from
mailbox, the message sequence number for all subsequent messages
decremented. Similarly, a new message can be assigned a
sequence number that was once held by some other message prior to
expunge

In addition to accessing messages by relative position in
mailbox, message sequence numbers can be used in
calculations. For example, if an untagged "EXISTS 11" is received
and previously an untagged "8 EXISTS" was received, three
messages have arrived with message sequence numbers of 9, 10, and 11.
Another example; if message 287 in a 523 message mailbox has
12345, there are exactly 286 messages which have lesser UIDs and 236
messages which have greater UIDs

2.3.2. Flags Message

A list of zero or more named tokens associated with the message.
flag is set by its addition to this list, and is cleared by
removal. There are two types of flags in IMAP4rev1. A flag
either type may be permanent or session-only

A system flag is a flag name that is pre-defined in
specification. All system flags begin with "\". Certain
flags (\Deleted and \Seen) have special semantics
elsewhere. The currently-defined system flags are

\Seen Message has been

\Answered Message has been

\Flagged Message is "flagged" for urgent/special

\Deleted Message is "deleted" for removal by later

\Draft Message has not completed composition (marked as
draft).





Crispin Standards Track [Page 9]

RFC 2060 IMAP4rev1 December 1996


\Recent Message is "recently" arrived in this mailbox.
session is the first session to have been
about this message; subsequent sessions will not
\Recent set for this message. This flag can not
altered by the client

If it is not possible to determine whether or
this session is the first session to be
about a message, then that message SHOULD
considered recent

If multiple connections have the same
selected simultaneously, it is undefined which
these connections will see newly-arrives
with \Recent set and which will see it
\Recent set

A keyword is defined by the server implementation. Keywords
not begin with "\". Servers MAY permit the client to define
keywords in the mailbox (see the description of
PERMANENTFLAGS response code for more information).

A flag may be permanent or session-only on a per-flag basis
Permanent flags are those which the client can add or
from the message flags permanently; that is, subsequent
will see any change in permanent flags. Changes to
flags are valid only in that session

Note: The \Recent system flag is a special case of
session flag. \Recent can not be used as an argument in
STORE command, and thus can not be changed at all

2.3.3. Internal Date Message

The internal date and time of the message on the server. This is
the date and time in the [RFC-822] header, but rather a date and
which reflects when the message was received. In the case
messages delivered via [SMTP], this SHOULD be the date and time
final delivery of the message as defined by [SMTP]. In the case
messages delivered by the IMAP4rev1 COPY command, this SHOULD be
internal date and time of the source message. In the case
messages delivered by the IMAP4rev1 APPEND command, this SHOULD
the date and time as specified in the APPEND command description
All other cases are implementation defined







Crispin Standards Track [Page 10]

RFC 2060 IMAP4rev1 December 1996


2.3.4. [RFC-822] Size Message

The number of octets in the message, as expressed in [RFC-822]
format

2.3.5. Envelope Structure Message

A parsed representation of the [RFC-822] envelope information (not
be confused with an [SMTP] envelope) of the message

2.3.6. Body Structure Message

A parsed representation of the [MIME-IMB] body structure
of the message

2.4. Message

In addition to being able to fetch the full [RFC-822] text of
message, IMAP4rev1 permits the fetching of portions of the
message text. Specifically, it is possible to fetch the [RFC-822]
message header, [RFC-822] message body, a [MIME-IMB] body part, or
[MIME-IMB] header

3. State and Flow

An IMAP4rev1 server is in one of four states. Most commands
valid in only certain states. It is a protocol error for the
to attempt a command while the command is in an inappropriate state
In this case, a server will respond with a BAD or NO (depending
server implementation) command completion result

3.1. Non-Authenticated

In non-authenticated state, the client MUST supply
credentials before most commands will be permitted. This state
entered when a connection starts unless the connection has been pre
authenticated

3.2. Authenticated

In authenticated state, the client is authenticated and MUST select
mailbox to access before commands that affect messages will
permitted. This state is entered when a pre-authenticated
starts, when acceptable authentication credentials have
provided, or after an error in selecting a mailbox






Crispin Standards Track [Page 11]

RFC 2060 IMAP4rev1 December 1996


3.3. Selected

In selected state, a mailbox has been selected to access. This
is entered when a mailbox has been successfully selected

3.4. Logout

In logout state, the connection is being terminated, and the
will close the connection. This state can be entered as a result
a client request or by unilateral server decision

+--------------------------------------+
|initial connection and server greeting
+--------------------------------------+
|| (1) || (2) || (3)
VV || ||
+-----------------+ || ||
|non-authenticated| || ||
+-----------------+ || ||
|| (7) || (4) || ||
|| VV VV ||
|| +----------------+ ||
|| | authenticated |<=++ ||
|| +----------------+ || ||
|| || (7) || (5) || (6) ||
|| || VV || ||
|| || +--------+ || ||
|| || |selected|==++ ||
|| || +--------+ ||
|| || || (7) ||
VV VV VV
+--------------------------------------+
| logout and close connection |
+--------------------------------------+

(1) connection without pre-authentication (OK greeting
(2) pre-authenticated connection (PREAUTH greeting
(3) rejected connection (BYE greeting
(4) successful LOGIN or AUTHENTICATE
(5) successful SELECT or EXAMINE
(6) CLOSE command, or failed SELECT or EXAMINE
(7) LOGOUT command, server shutdown, or connection

4. Data

IMAP4rev1 uses textual commands and responses. Data in IMAP4rev1
be in one of several forms: atom, number, string, parenthesized list
or NIL



Crispin Standards Track [Page 12]

RFC 2060 IMAP4rev1 December 1996


4.1.

An atom consists of one or more non-special characters

4.2.

A number consists of one or more digit characters, and represents
numeric value

4.3.

A string is in one of two forms: literal and quoted string.
literal form is the general form of string. The quoted string
is an alternative that avoids the overhead of processing a literal
the cost of limitations of characters that can be used in a
string

A literal is a sequence of zero or more octets (including CR and LF),
prefix-quoted with an octet count in the form of an open brace ("{"),
the number of octets, close brace ("}"), and CRLF. In the case
literals transmitted from server to client, the CRLF is
followed by the octet data. In the case of literals transmitted
client to server, the client MUST wait to receive a
continuation request (described later in this document)
sending the octet data (and the remainder of the command).

A quoted string is a sequence of zero or more 7-bit characters
excluding CR and LF, with double quote (<">) characters at each end

The empty string is represented as either "" (a quoted string
zero characters between double quotes) or as {0} followed by CRLF (
literal with an octet count of 0).

Note: Even if the octet count is 0, a client transmitting
literal MUST wait to receive a command continuation request

4.3.1. 8-bit and Binary

8-bit textual and binary mail is supported through the use of
[MIME-IMB] content transfer encoding. IMAP4rev1 implementations
transmit 8-bit or multi-octet characters in literals, but SHOULD
so only when the [CHARSET] is identified









Crispin Standards Track [Page 13]

RFC 2060 IMAP4rev1 December 1996


Although a BINARY body encoding is defined, unencoded binary
are not permitted. A "binary string" is any string with
characters. Implementations MUST encode binary data into a
form such as BASE64 before transmitting the data. A string with
excessive amount of CTL characters MAY also be considered to
binary

4.4. Parenthesized

Data structures are represented as a "parenthesized list"; a
of data items, delimited by space, and bounded at each end
parentheses. A parenthesized list can contain other
lists, using multiple levels of parentheses to indicate nesting

The empty list is represented as () -- a parenthesized list with
members

4.5.

The special atom "NIL" represents the non-existence of a
data item that is represented as a string or parenthesized list,
distinct from the empty string "" or the empty parenthesized list ().

5. Operational

5.1. Mailbox

The interpretation of mailbox names is implementation-dependent
However, the case-insensitive mailbox name INBOX is a special
reserved to mean "the primary mailbox for this user on this server".

5.1.1. Mailbox Hierarchy

If it is desired to export hierarchical mailbox names, mailbox
MUST be left-to-right hierarchical using a single character
separate levels of hierarchy. The same hierarchy separator
is used for all levels of hierarchy within a single name

5.1.2. Mailbox Namespace Naming

By convention, the first hierarchical element of any mailbox
which begins with "#" identifies the "namespace" of the remainder
the name. This makes it possible to disambiguate between
types of mailbox stores, each of which have their own namespaces







Crispin Standards Track [Page 14]

RFC 2060 IMAP4rev1 December 1996


For example, implementations which offer access to
newsgroups MAY use the "#news" namespace to partition the
newsgroup namespace from that of other mailboxes. Thus,
comp.mail.misc newsgroup would have an mailbox name
"#news.comp.mail.misc", and the name "comp.mail.misc" could
to a different object (e.g. a user's private mailbox).

5.1.3. Mailbox International Naming

By convention, international mailbox names are specified using
modified version of the UTF-7 encoding described in [UTF-7].
purpose of these modifications is to correct the following
with UTF-7:

1) UTF-7 uses the "+" character for shifting; this conflicts
the common use of "+" in mailbox names, in particular
newsgroup names

2) UTF-7's encoding is BASE64 which uses the "/" character;
conflicts with the use of "/" as a popular hierarchy delimiter

3) UTF-7 prohibits the unencoded usage of "\"; this conflicts
the use of "\" as a popular hierarchy delimiter

4) UTF-7 prohibits the unencoded usage of "~"; this conflicts
the use of "~" in some servers as a home directory indicator

5) UTF-7 permits multiple alternate forms to represent the
string; in particular, printable US-ASCII chararacters can
represented in encoded form

In modified UTF-7, printable US-ASCII characters except for "&"
represent themselves; that is, characters with octet values 0x20-0x25
and 0x27-0x7e. The character "&" (0x26) is represented by the two
octet sequence "&-".

All other characters (octet values 0x00-0x1f, 0x7f-0xff, and
Unicode 16-bit octets) are represented in modified BASE64, with
further modification from [UTF-7] that "," is used instead of "/".
Modified BASE64 MUST NOT be used to represent any printing US-
character which can represent itself

"&" is used to shift to modified BASE64 and "-" to shift back to US
ASCII. All names start in US-ASCII, and MUST end in US-ASCII (
is, a name that ends with a Unicode 16-bit octet MUST end with a "-
").





Crispin Standards Track [Page 15]

RFC 2060 IMAP4rev1 December 1996


For example, here is a mailbox name which mixes English, Japanese
and Chinese text: ~peter/mail/&ZeVnLIqe-/&U,BTFw

5.2. Mailbox Size and Message Status

At any time, a server can send data that the client did not request
Sometimes, such behavior is REQUIRED. For example, agents other
the server MAY add messages to the mailbox (e.g. new mail delivery),
change the flags of message in the mailbox (e.g. simultaneous
to the same mailbox by multiple agents), or even remove messages
the mailbox. A server MUST send mailbox size updates
if a mailbox size change is observed during the processing of
command. A server SHOULD send message flag updates automatically
without requiring the client to request such updates explicitly
Special rules exist for server notification of a client about
removal of messages to prevent synchronization errors; see
description of the EXPUNGE response for more detail

Regardless of what implementation decisions a client makes
remembering data from the server, a client implementation MUST
mailbox size updates. It MUST NOT assume that any command
initial mailbox selection will return the size of the mailbox

5.3. Response when no Command in

Server implementations are permitted to send an untagged
(except for EXPUNGE) while there is no command in progress.
implementations that send such responses MUST deal with flow
considerations. Specifically, they MUST either (1) verify that
size of the data does not exceed the underlying transport's
window size, or (2) use non-blocking writes

5.4. Autologout

If a server has an inactivity autologout timer, that timer MUST be
at least 30 minutes' duration. The receipt of ANY command from
client during that interval SHOULD suffice to reset the
timer













Crispin Standards Track [Page 16]

RFC 2060 IMAP4rev1 December 1996


5.5. Multiple Commands in

The client MAY send another command without waiting for
completion result response of a command, subject to ambiguity
(see below) and flow control constraints on the underlying
stream. Similarly, a server MAY begin processing another
before processing the current command to completion, subject
ambiguity rules. However, any command continuation request
and command continuations MUST be negotiated before any
command is initiated

The exception is if an ambiguity would result because of a
that would affect the results of other commands. Clients MUST
send multiple commands without waiting if an ambiguity would result
If the server detects a possible ambiguity, it MUST execute
to completion in the order given by the client

The most obvious example of ambiguity is when a command would
the results of another command; for example, a FETCH of a message'
flags and a STORE of that same message's flags

A non-obvious ambiguity occurs with commands that permit an
EXPUNGE response (commands other than FETCH, STORE, and SEARCH),
since an untagged EXPUNGE response can invalidate sequence numbers
a subsequent command. This is not a problem for FETCH, STORE,
SEARCH commands because servers are prohibited from sending
responses while any of those commands are in progress. Therefore,
the client sends any command other than FETCH, STORE, or SEARCH,
MUST wait for a response before sending a command with
sequence numbers

For example, the following non-waiting command sequences are invalid

FETCH + NOOP +
STORE + COPY +
COPY +
CHECK +

The following are examples of valid non-waiting command sequences

FETCH + STORE + SEARCH +
STORE + COPY +

6. Client

IMAP4rev1 commands are described in this section. Commands
organized by the state in which the command is permitted.
which are permitted in multiple states are listed in the



Crispin Standards Track [Page 17]

RFC 2060 IMAP4rev1 December 1996


permitted state (for example, commands valid in authenticated
selected state are listed in the authenticated state commands).

Command arguments, identified by "Arguments:" in the
descriptions below, are described by function, not by syntax.
precise syntax of command arguments is described in the Formal
section

Some commands cause specific server responses to be returned;
are identified by "Responses:" in the command descriptions below
See the response descriptions in the Responses section
information on these responses, and the Formal Syntax section for
precise syntax of these responses. It is possible for server data
be transmitted as a result of any command; thus, commands that do
specifically require server data specify "no specific responses
this command" instead of "none".

The "Result:" in the command description refers to the
tagged status responses to a command, and any special
of these status responses

6.1. Client Commands - Any

The following commands are valid in any state: CAPABILITY, NOOP,
LOGOUT

6.1.1. CAPABILITY

Arguments:

Responses: REQUIRED untagged response:

Result: OK - capability
BAD - command unknown or arguments

The CAPABILITY command requests a listing of capabilities that
server supports. The server MUST send a single
CAPABILITY response with "IMAP4rev1" as one of the
capabilities before the (tagged) OK response. This listing
capabilities is not dependent upon connection state or user.
is therefore not necessary to issue a CAPABILITY command more
once in a connection









Crispin Standards Track [Page 18]

RFC 2060 IMAP4rev1 December 1996


A capability name which begins with "AUTH=" indicates that
server supports that particular authentication mechanism.
such names are, by definition, part of this specification.
example, the authorization capability for an
"blurdybloop" authenticator would be "AUTH=XBLURDYBLOOP" and
"XAUTH=BLURDYBLOOP" or "XAUTH=XBLURDYBLOOP".

Other capability names refer to extensions, revisions,
amendments to this specification. See the documentation of
CAPABILITY response for additional information. No capabilities
beyond the base IMAP4rev1 set defined in this specification,
enabled without explicit client action to invoke the capability

See the section entitled "Client Commands -
Experimental/Expansion" for information about the form of site
implementation-specific capabilities

Example: C: abcd
S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V
S: abcd OK CAPABILITY

6.1.2. NOOP

Arguments:

Responses: no specific responses for this command (but see below

Result: OK - noop
BAD - command unknown or arguments

The NOOP command always succeeds. It does nothing

Since any command can return a status update as untagged data,
NOOP command can be used as a periodic poll for new messages
message status updates during a period of inactivity. The
command can also be used to reset any inactivity autologout
on the server

Example: C: a002
S: a002 OK NOOP
. . .
C: a047
S: * 22
S: * 23
S: * 3
S: * 14 FETCH (FLAGS (\Seen \Deleted))
S: a047 OK NOOP




Crispin Standards Track [Page 19]

RFC 2060 IMAP4rev1 December 1996


6.1.3. LOGOUT

Arguments:

Responses: REQUIRED untagged response:

Result: OK - logout
BAD - command unknown or arguments

The LOGOUT command informs the server that the client is done
the connection. The server MUST send a BYE untagged
before the (tagged) OK response, and then close the
connection

Example: C: A023
S: * BYE IMAP4rev1 Server logging
S: A023 OK LOGOUT
(Server and client then close the connection

6.2. Client Commands - Non-Authenticated

In non-authenticated state, the AUTHENTICATE or LOGIN
establishes authentication and enter authenticated state.
AUTHENTICATE command provides a general mechanism for a variety
authentication techniques, whereas the LOGIN command uses
traditional user name and plaintext password pair

Server implementations MAY allow non-authenticated access to
mailboxes. The convention is to use a LOGIN command with the
"anonymous". A password is REQUIRED. It is implementation-
what requirements, if any, are placed on the password and what
restrictions are placed on anonymous users

Once authenticated (including as anonymous), it is not possible
re-enter non-authenticated state

In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),
the following commands are valid in non-authenticated state
AUTHENTICATE and LOGIN












Crispin Standards Track [Page 20]

RFC 2060 IMAP4rev1 December 1996


6.2.1. AUTHENTICATE

Arguments: authentication mechanism

Responses: continuation data can be

Result: OK - authenticate completed, now in authenticated
NO - authenticate failure: unsupported
mechanism, credentials
BAD - command unknown or arguments invalid
authentication exchange

The AUTHENTICATE command indicates an authentication mechanism
such as described in [IMAP-AUTH], to the server. If the
supports the requested authentication mechanism, it performs
authentication protocol exchange to authenticate and identify
client. It MAY also negotiate an OPTIONAL protection
for subsequent protocol interactions. If the
authentication mechanism is not supported, the server
reject the AUTHENTICATE command by sending a tagged NO response

The authentication protocol exchange consists of a series
server challenges and client answers that are specific to
authentication mechanism. A server challenge consists of
command continuation request response with the "+" token
by a BASE64 encoded string. The client answer consists of a
consisting of a BASE64 encoded string. If the client wishes
cancel an authentication exchange, it issues a line with a
"*". If the server receives such an answer, it MUST reject
AUTHENTICATE command by sending a tagged BAD response

A protection mechanism provides integrity and privacy
to the connection. If a protection mechanism is negotiated, it
applied to all subsequent data sent over the connection.
protection mechanism takes effect immediately following the
that concludes the authentication exchange for the client, and
CRLF of the tagged OK response for the server. Once
protection mechanism is in effect, the stream of command
response octets is processed into buffers of ciphertext.
buffer is transferred over the connection as a stream of
prepended with a four octet field in network byte order
represents the length of the following data. The
ciphertext buffer length is defined by the protection mechanism

Authentication mechanisms are OPTIONAL. Protection mechanisms
also OPTIONAL; an authentication mechanism MAY be
without any protection mechanism. If an AUTHENTICATE
fails with a NO response, the client MAY try



Crispin Standards Track [Page 21]

RFC 2060 IMAP4rev1 December 1996


authentication mechanism by issuing another AUTHENTICATE command
or MAY attempt to authenticate by using the LOGIN command.
other words, the client MAY request authentication types
decreasing order of preference, with the LOGIN command as a
resort

Example: S: * OK KerberosV4 IMAP4rev1
C: A001 AUTHENTICATE KERBEROS_V
S: + AmFYig==
C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4
+nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/
WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1
S: + or//EoAADZI
C: DiAF5A4gA+oOIALuBkAAmw==
S: A001 OK Kerberos V4 authentication

Note: the line breaks in the first client answer are for
clarity and are not in real authenticators

6.2.2. LOGIN

Arguments: user


Responses: no specific responses for this

Result: OK - login completed, now in authenticated
NO - login failure: user name or password
BAD - command unknown or arguments

The LOGIN command identifies the client to the server and
the plaintext password authenticating this user

Example: C: a001 LOGIN SMITH
S: a001 OK LOGIN

6.3. Client Commands - Authenticated

In authenticated state, commands that manipulate mailboxes as
entities are permitted. Of these commands, the SELECT and
commands will select a mailbox for access and enter selected state

In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),
the following commands are valid in authenticated state: SELECT
EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB
STATUS, and APPEND





Crispin Standards Track [Page 22]

RFC 2060 IMAP4rev1 December 1996


6.3.1. SELECT

Arguments: mailbox

Responses: REQUIRED untagged responses: FLAGS, EXISTS,
OPTIONAL OK untagged responses: UNSEEN,

Result: OK - select completed, now in selected
NO - select failure, now in authenticated state:
such mailbox, can't access
BAD - command unknown or arguments

The SELECT command selects a mailbox so that messages in
mailbox can be accessed. Before returning an OK to the client
the server MUST send the following untagged data to the client

FLAGS Defined flags in the mailbox. See the
of the FLAGS response for more detail

EXISTS The number of messages in the mailbox. See
description of the EXISTS response for more detail

RECENT The number of messages with the \Recent flag set
See the description of the RECENT response for
detail

OK [UIDVALIDITY ]
The unique identifier validity value. See
description of the UID command for more detail

to define the initial state of the mailbox at the client

The server SHOULD also send an UNSEEN response code in an
untagged response, indicating the message sequence number of
first unseen message in the mailbox

If the client can not change the permanent state of one or more
the flags listed in the FLAGS untagged response, the server
send a PERMANENTFLAGS response code in an OK untagged response
listing the flags that the client can change permanently

Only one mailbox can be selected at a time in a connection
simultaneous access to multiple mailboxes requires
connections. The SELECT command automatically deselects
currently selected mailbox before attempting the new selection
Consequently, if a mailbox is selected and a SELECT command
fails is attempted, no mailbox is selected




Crispin Standards Track [Page 23]

RFC 2060 IMAP4rev1 December 1996


If the client is permitted to modify the mailbox, the
SHOULD prefix the text of the tagged OK response with
"[READ-WRITE]" response code

If the client is not permitted to modify the mailbox but
permitted read access, the mailbox is selected as read-only,
the server MUST prefix the text of the tagged OK response
SELECT with the "[READ-ONLY]" response code. Read-only
through SELECT differs from the EXAMINE command in that
read-only mailboxes MAY permit the change of permanent state on
per-user (as opposed to global) basis. Netnews messages marked
a server-based .newsrc file are an example of such per-
permanent state that can be modified with read-only mailboxes

Example: C: A142 SELECT
S: * 172
S: * 1
S: * OK [UNSEEN 12] Message 12 is first
S: * OK [UIDVALIDITY 3857529045] UIDs
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft
S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)]
S: A142 OK [READ-WRITE] SELECT

6.3.2. EXAMINE

Arguments: mailbox

Responses: REQUIRED untagged responses: FLAGS, EXISTS,
OPTIONAL OK untagged responses: UNSEEN,

Result: OK - examine completed, now in selected
NO - examine failure, now in authenticated state:
such mailbox, can't access
BAD - command unknown or arguments

The EXAMINE command is identical to SELECT and returns the
output; however, the selected mailbox is identified as read-only
No changes to the permanent state of the mailbox,
per-user state, are permitted












Crispin Standards Track [Page 24]

RFC 2060 IMAP4rev1 December 1996


The text of the tagged OK response to the EXAMINE command
begin with the "[READ-ONLY]" response code

Example: C: A932 EXAMINE
S: * 17
S: * 2
S: * OK [UNSEEN 8] Message 8 is first
S: * OK [UIDVALIDITY 3857529045] UIDs
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft
S: * OK [PERMANENTFLAGS ()] No permanent flags
S: A932 OK [READ-ONLY] EXAMINE

6.3.3. CREATE

Arguments: mailbox

Responses: no specific responses for this

Result: OK - create
NO - create failure: can't create mailbox with that
BAD - command unknown or arguments

The CREATE command creates a mailbox with the given name. An
response is returned only if a new mailbox with that name has
created. It is an error to attempt to create INBOX or a
with a name that refers to an extant mailbox. Any error
creation will return a tagged NO response

If the mailbox name is suffixed with the server's
separator character (as returned from the server by a
command), this is a declaration that the client intends to
mailbox names under this name in the hierarchy.
implementations that do not require this declaration MUST
it

If the server's hierarchy separator character appears elsewhere
the name, the server SHOULD create any superior hierarchical
that are needed for the CREATE command to complete successfully
In other words, an attempt to create "foo/bar/zap" on a server
which "/" is the hierarchy separator character SHOULD create foo
and foo/bar/ if they do not already exist

If a new mailbox is created with the same name as a mailbox
was deleted, its unique identifiers MUST be greater than
unique identifiers used in the previous incarnation of the
UNLESS the new incarnation has a different unique
validity value. See the description of the UID command for
detail



Crispin Standards Track [Page 25]

RFC 2060 IMAP4rev1 December 1996


Example: C: A003 CREATE owatagusiam
S: A003 OK CREATE
C: A004 CREATE owatagusiam/
S: A004 OK CREATE

Note: the interpretation of this example depends on whether "/"
was returned as the hierarchy separator from LIST. If "/" is
hierarchy separator, a new level of hierarchy named "owatagusiam
with a member called "blurdybloop" is created. Otherwise,
mailboxes at the same hierarchy level are created

6.3.4. DELETE

Arguments: mailbox

Responses: no specific responses for this

Result: OK - delete
NO - delete failure: can't delete mailbox with that
BAD - command unknown or arguments

The DELETE command permanently removes the mailbox with the
name. A tagged OK response is returned only if the mailbox
been deleted. It is an error to attempt to delete INBOX or
mailbox name that does not exist

The DELETE command MUST NOT remove inferior hierarchical names
For example, if a mailbox "foo" has an inferior "foo.bar
(assuming "." is the hierarchy delimiter character),
"foo" MUST NOT remove "foo.bar". It is an error to attempt
delete a name that has inferior hierarchical names and also
the \Noselect mailbox name attribute (see the description of
LIST response for more details).

It is permitted to delete a name that has inferior
names and does not have the \Noselect mailbox name attribute.
this case, all messages in that mailbox are removed, and the
will acquire the \Noselect mailbox name attribute

The value of the highest-used unique identifier of the
mailbox MUST be preserved so that a new mailbox created with
same name will not reuse the identifiers of the
incarnation, UNLESS the new incarnation has a different
identifier validity value. See the description of the UID
for more detail






Crispin Standards Track [Page 26]

RFC 2060 IMAP4rev1 December 1996


Examples: C: A682 LIST "" *
S: * LIST () "/"
S: * LIST (\Noselect) "/"
S: * LIST () "/" foo/
S: A682 OK LIST
C: A683 DELETE
S: A683 OK DELETE
C: A684 DELETE
S: A684 NO Name "foo" has inferior hierarchical
C: A685 DELETE foo/
S: A685 OK DELETE
C: A686 LIST "" *
S: * LIST (\Noselect) "/"
S: A686 OK LIST
C: A687 DELETE
S: A687 OK DELETE


C: A82 LIST "" *
S: * LIST () "."
S: * LIST () "."
S: * LIST () "." foo.
S: A82 OK LIST
C: A83 DELETE
S: A83 OK DELETE
C: A84 DELETE
S: A84 OK DELETE
C: A85 LIST "" *
S: * LIST () "." foo.
S: A85 OK LIST
C: A86 LIST "" %
S: * LIST (\Noselect) "."
S: A86 OK LIST

6.3.5. RENAME

Arguments: existing mailbox
new mailbox

Responses: no specific responses for this

Result: OK - rename
NO - rename failure: can't rename mailbox with that name
can't rename to mailbox with that
BAD - command unknown or arguments

The RENAME command changes the name of a mailbox. A tagged
response is returned only if the mailbox has been renamed. It



Crispin Standards Track [Page 27]

RFC 2060 IMAP4rev1 December 1996


an error to attempt to rename from a mailbox name that does
exist or to a mailbox name that already exists. Any error
renaming will return a tagged NO response

If the name has inferior hierarchical names, then the
hierarchical names MUST also be renamed. For example, a rename
"foo" to "zap" will rename "foo/bar" (assuming "/" is
hierarchy delimiter character) to "zap/bar".

The value of the highest-used unique identifier of the old
name MUST be preserved so that a new mailbox created with the
name will not reuse the identifiers of the former incarnation
UNLESS the new incarnation has a different unique
validity value. See the description of the UID command for
detail

Renaming INBOX is permitted, and has special behavior. It
all messages in INBOX to a new mailbox with the given name
leaving INBOX empty. If the server implementation
inferior hierarchical names of INBOX, these are unaffected by
rename of INBOX

Examples: C: A682 LIST "" *
S: * LIST () "/"
S: * LIST (\Noselect) "/"
S: * LIST () "/" foo/
S: A682 OK LIST
C: A683 RENAME blurdybloop
S: A683 OK RENAME
C: A684 RENAME foo
S: A684 OK RENAME
C: A685 LIST "" *
S: * LIST () "/"
S: * LIST (\Noselect) "/"
S: * LIST () "/" zowie/
S: A685 OK LIST















Crispin Standards Track [Page 28]

RFC 2060 IMAP4rev1 December 1996


C: Z432 LIST "" *
S: * LIST () "."
S: * LIST () "." INBOX.
S: Z432 OK LIST
C: Z433 RENAME INBOX old-
S: Z433 OK RENAME
C: Z434 LIST "" *
S: * LIST () "."
S: * LIST () "." INBOX.
S: * LIST () "." old-
S: Z434 OK LIST

6.3.6. SUBSCRIBE

Arguments:

Responses: no specific responses for this

Result: OK - subscribe
NO - subscribe failure: can't subscribe to that
BAD - command unknown or arguments

The SUBSCRIBE command adds the specified mailbox name to
server's set of "active" or "subscribed" mailboxes as returned
the LSUB command. This command returns a tagged OK response
if the subscription is successful

A server MAY validate the mailbox argument to SUBSCRIBE to
that it exists. However, it MUST NOT unilaterally remove
existing mailbox name from the subscription list even if a
by that name no longer exists

Note: this requirement is because some server sites may
remove a mailbox with a well-known name (e.g. "system-alerts")
after its contents expire, with the intention of recreating
when new contents are appropriate

Example: C: A002 SUBSCRIBE #news.comp.mail.
S: A002 OK SUBSCRIBE












Crispin Standards Track [Page 29]

RFC 2060 IMAP4rev1 December 1996


6.3.7. UNSUBSCRIBE

Arguments: mailbox

Responses: no specific responses for this

Result: OK - unsubscribe
NO - unsubscribe failure: can't unsubscribe that
BAD - command unknown or arguments

The UNSUBSCRIBE command removes the specified mailbox name
the server's set of "active" or "subscribed" mailboxes as
by the LSUB command. This command returns a tagged OK
only if the unsubscription is successful

Example: C: A002 UNSUBSCRIBE #news.comp.mail.
S: A002 OK UNSUBSCRIBE

6.3..8. LIST

Arguments: reference
mailbox name with possible

Responses: untagged responses:

Result: OK - list
NO - list failure: can't list that reference or
BAD - command unknown or arguments

The LIST command returns a subset of names from the complete
of all names available to the client. Zero or more untagged
replies are returned, containing the name attributes,
delimiter, and name; see the description of the LIST reply
more detail

The LIST command SHOULD return its data quickly, without
delay. For example, it SHOULD NOT go to excess trouble
calculate \Marked or \Unmarked status or perform other processing
if each name requires 1 second of processing, then a list of 1200
names would take 20 minutes

An empty ("" string) reference name argument indicates that
mailbox name is interpreted as by SELECT. The returned
names MUST match the supplied mailbox name pattern. A non-
reference name argument is the name of a mailbox or a level
mailbox hierarchy, and indicates a context in which the
name is interpreted in an implementation-defined manner




Crispin Standards Track [Page 30]

RFC 2060 IMAP4rev1 December 1996


An empty ("" string) mailbox name argument is a special request
return the hierarchy delimiter and the root name of the name
in the reference. The value returned as the root MAY be null
the reference is non-rooted or is null. In all cases,
hierarchy delimiter is returned. This permits a client to get
hierarchy delimiter even when no mailboxes by that name
exist

The reference and mailbox name arguments are interpreted, in
implementation-dependent fashion, into a canonical form
represents an unambiguous left-to-right hierarchy. The
mailbox names will be in the interpreted form

Any part of the reference argument that is included in
interpreted form SHOULD prefix the interpreted form. It
also be in the same form as the reference name argument.
rule permits the client to determine if the returned mailbox
is in the context of the reference argument, or if something
the mailbox argument overrode the