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











Network Working Group M.
Request for Comments: 1730 University of
Category: Standards Track December 1994


INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4



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 4 (IMAP4) allows
client to access and manipulate electronic mail messages on a server
IMAP4 permits manipulation of remote message folders,
"mailboxes", in a way that is functionally equivalent to
mailboxes. IMAP4 also provides the capability for an offline
to resynchronize with the server (see also [IMAP-DISC]).

IMAP4 includes operations for creating, deleting, and
mailboxes; checking for new messages; permanently removing messages
setting and clearing flags; RFC 822 and MIME parsing; searching;
selective fetching of message attributes, texts, and
thereof. Messages in IMAP4 are accessed by the use of numbers
These numbers are either message sequence numbers (relative
from 1 to the number of messages in the mailbox) or
identifiers (immutable, strictly ascending values assigned to
message, but which are not necessarily contiguous).

IMAP4 supports a single server. A mechanism for supporting
IMAP4 servers is discussed in [IMSP].

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

IMAP4 is designed to be upwards compatible from the [IMAP2] protocol
Compatibility issues are discussed in [IMAP-COMPAT].






Crispin [Page i

RFC 1730 IMAP4 December 1994





Table of



IMAP4 Protocol Specification ...................................... 1
1. Organization of this Document ............................. 1
1.1. How to Read This Document ................................. 1
1.2. Conventions Used in this Document ......................... 1
2. Protocol Overview ......................................... 1
2.1. Link Level ................................................ 1
2.2. Commands and Responses .................................... 1
2.2.1. Client Protocol Sender and Server Protocol Receiver ....... 2
2.2.2. Server Protocol Sender and Client Protocol Receiver ....... 2
3. State and Flow Diagram .................................... 4
3.1. Non-Authenticated State ................................... 4
3.2. Authenticated State ....................................... 4
3.3. Selected State ............................................ 4
3.4. Logout State .............................................. 4
4. Data Formats .............................................. 6
4.1. Atom ...................................................... 6
4.2. Number .................................................... 6
4.3. String .................................................... 6
4.3.1. 8-bit and Binary Strings .................................. 7
4.4. Parenthesized List ........................................ 7
4.5. NIL ....................................................... 7
5. Operational Considerations ................................ 8
5.1. Mailbox Naming ............................................ 8
5.2. Mailbox Size and Message Status Updates ................... 8
5.3. Response when no Command in Progress ...................... 8
5.4. Autologout Timer .......................................... 9
5.5. Multiple Commands in Progress ............................. 9
6. Client Commands ........................................... 10
6.1. Client Commands - Any State ............................... 10
6.1.1. CAPABILITY Command ........................................ 10
6.1.2. NOOP Command .............................................. 11
6.1.3. LOGOUT Command ............................................ 11
6.2. Client Commands - Non-Authenticated State ................. 12
6.2.1. AUTHENTICATE Command ...................................... 12
6.2.2. LOGIN Command ............................................. 14
6.3. Client Commands - Authenticated State ..................... 14
6.3.1. SELECT Command ............................................ 15
6.3.2. EXAMINE Command ........................................... 16
6.3.3. CREATE Command ............................................ 17
6.3.4. DELETE Command ............................................ 18
6.3.5. RENAME Command ............................................ 18



Crispin [Page ii

RFC 1730 IMAP4 December 1994


6.3.6. SUBSCRIBE Command ......................................... 19
6.3.7. UNSUBSCRIBE Command ....................................... 19
6.3.8. LIST Command .............................................. 20
6.3.9. LSUB Command .............................................. 22
6.3.10. APPEND Command ............................................ 22
6.4. Client Commands - Selected State .......................... 23
6.4.1. CHECK Command ............................................. 23
6.4.2. CLOSE Command ............................................. 24
6.4.3. EXPUNGE Command ........................................... 25
6.4.4. SEARCH Command ............................................ 25
6.4.5. FETCH Command ............................................. 29
6.4.6. PARTIAL Command ........................................... 32
6.4.7. STORE Command ............................................. 33
6.4.8. COPY Command .............................................. 34
6.4.9. UID Command ............................................... 35
6.5. Client Commands - Experimental/Expansion .................. 37
6.5.1. X Command ........................................... 37
7. Server Responses .......................................... 38
7.1. Server Responses - Status Responses ....................... 39
7.1.1. OK Response ............................................... 40
7.1.2. NO Response ............................................... 40
7.1.3. BAD Response .............................................. 41
7.1.4. PREAUTH Response .......................................... 41
7.1.5. BYE Response .............................................. 41
7.2. Server Responses - Server and Mailbox Status .............. 42
7.2.1. CAPABILITY Response ....................................... 42
7.2.2. LIST Response ............................................. 43
7.2.3. LSUB Response ............................................. 44
7.2.4. SEARCH Response ........................................... 44
7.2.5. FLAGS Response ............................................ 44
7.3. Server Responses - Message Status ......................... 45
7.3.1. EXISTS Response ........................................... 45
7.3.2. RECENT Response ........................................... 45
7.3.3. EXPUNGE Response .......................................... 45
7.3.4. FETCH Response ............................................ 46
7.3.5. Obsolete Responses ........................................ 51
7.4. Server Responses - Command Continuation Request ........... 51
8. Sample IMAP4 session ...................................... 52
9. Formal Syntax ............................................. 53
10. Author's Note ............................................. 64
11. Security Considerations ................................... 64
12. Author's Address .......................................... 64
Appendices ........................................................ 65
A. Obsolete Commands ......................................... 65
A.6.3.OBS.1. FIND ALL.MAILBOXES Command ........................ 65
A.6.3.OBS.2. FIND MAILBOXES Command ............................ 65
A.6.3.OBS.3. SUBSCRIBE MAILBOX Command ......................... 66
A.6.3.OBS.4. UNSUBSCRIBE MAILBOX Command ....................... 66



Crispin [Page iii

RFC 1730 IMAP4 December 1994


B. Obsolete Responses ........................................ 68
B.7.2.OBS.1. MAILBOX Response .................................. 68
B.7.3.OBS.1. COPY Response ..................................... 68
B.7.3.OBS.2. STORE Response .................................... 69
C. References ................................................ 70
E. IMAP4 Keyword Index ....................................... 71













































Crispin [Page iv

RFC 1730 IMAP4 December 1994


IMAP4 Protocol

1. Organization of this

1.1. How to Read This

This document is written from the point of view of the implementor
an IMAP4 client or server. Beyond the protocol overview in
2, it is not optimized for someone trying to understand the
of the protocol. The material in sections 3 through 5 provides
general context and definitions with which IMAP4 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, one should not attempt to deduce command syntax from
command section alone; one should instead refer to the formal
section


1.2. Conventions Used in this

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


2. Protocol

2.1. Link

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


2.2. Commands and

An IMAP4 session consists of the establishment of a client/
connection, an initial greeting from the server, and client/
interactions. These client/server interactions consist of a
command, server data, and a server 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 IMAP4 client or server is either reading a line, or is
a sequence of octets with a known count followed by a line






Crispin [Page 1]

RFC 1730 IMAP4 December 1994


2.2.1. Client Protocol Sender and Server Protocol

The client command begins an operation. Each client command
prefixed with a 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
command, it sends a BAD completion response with
matching the command (as described below) to reject
command and prevent the client from sending any more of
command

It is also possible for the server to send a
response for some other command (if multiple commands
in progress), or untagged data. In either case,
command continuation request is still pending; the
takes the appropriate action for the response, and
another response from the server

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


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



Crispin [Page 2]

RFC 1730 IMAP4 December 1994


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 IMAP4 client reads a response line
the server. It then takes action on the response based upon
first token of the response, which may be a tag, a "*", or a "+".
described above

A client MUST be prepared to accept any server response at all times
This includes server data that it may not have requested.
data SHOULD be recorded, so that the client can reference
recorded copy rather than sending a command to the server to
the data. In the case of certain server data, recording the data
mandatory

This topic is discussed in greater detail in the Server
section































Crispin [Page 3]

RFC 1730 IMAP4 December 1994


3. State and Flow

An IMAP4 server is in one of four states. Most commands are valid
only certain states. It is a protocol error for the client
attempt a command while the command is in an inappropriate state.
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 user must supply
credentials before most commands will be permitted. This state
entered when a connection starts unless the connection has
pre-authenticated


3.2. Authenticated

In authenticated state, the user 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


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 session is being terminated, and the server
close the connection. This state can be entered as a result of
client request or by unilateral server decision














Crispin [Page 4]

RFC 1730 IMAP4 December 1994


+--------------------------------------+
|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




















Crispin [Page 5]

RFC 1730 IMAP4 December 1994


4. Data

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


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 restrictions of what may be in a quoted 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 respresented 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
request







Crispin [Page 6]

RFC 1730 IMAP4 December 1994


4.3.1. 8-bit and Binary

8-bit textual and binary mail is supported through the use
[MIME-1] encoding. IMAP4 implementations MAY transmit 8-bit
multi-octet characters in literals, but should do so only when
character set is identified

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, although this is not required


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 may itself contain
parenthesized lists, using multiple levels of parentheses to
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 ().



















Crispin [Page 7]

RFC 1730 IMAP4 December 1994


5. Operational

5.1. Mailbox

The interpretation of mailbox names is implementation-dependent
However, the mailbox name INBOX is a special name reserved to
"the primary mailbox for this user on this server". If it is
to export hierarchical mailbox names, mailbox names must
left-to-right hierarchical using a single character to
levels of hierarchy. The same hierarchy separator character is
for all levels of hierarchy within a single name

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 details

Regardless of what implementation decisions a client may take
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










Crispin [Page 8]

RFC 1730 IMAP4 December 1994


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


5.5. Multiple Commands in

The client is not required to wait for the completion result
of a command before sending another command, subject to flow
constraints on the underlying data stream. Similarly, a server
not required to process a command to completion before
processing of the next command, unless an ambiguity would
because of a command that would affect the results of other commands
If there is such an ambiguity, the server executes commands
completion in the order given by the client

































Crispin [Page 9]

RFC 1730 IMAP4 December 1994


6. Client

IMAP4 commands are described in this section. Commands are
by the state in which the command is permitted. Commands which
permitted in multiple states are listed in the minimum
state (for example, commands valid in authenticated and
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 data to be returned; these
identified by "Data:" in the command descriptions below. See
response descriptions in the Responses section for information
these responses, and the Formal Syntax section for the precise
of these responses. It is possible for server data to be
as a result of any command; thus, commands that do not
require server data specify "no specific data for 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:

Data: mandatory 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 "IMAP4" as the first listed
before the (tagged) OK response. This listing of capabilities
not dependent upon connection state or user. It is therefore
necessary to issue a CAPABILITY command more than once in
session



Crispin [Page 10]

RFC 1730 IMAP4 December 1994


Capability names other than "IMAP4" refer to extensions
revisions, or amendments to this specification. See
documentation of the CAPABILITY response for
information. No capabilities are enabled without explicit
action to invoke the capability. See the section entitled "
Commands - Experimental/Expansion" for information about the
of site or implementation-specific capabilities

Example: C: abcd
S: * CAPABILITY IMAP
S: abcd OK CAPABILITY


6.1.2. NOOP

Arguments:

Data: no specific data 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 [Page 11]

RFC 1730 IMAP4 December 1994


6.1.3. LOGOUT

Arguments:

Data: mandatory untagged response:

Result: OK - logout
BAD - command unknown or arguments

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

Example: C: A023
S: * BYE IMAP4 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 [Page 12]

RFC 1730 IMAP4 December 1994


6.2.1. AUTHENTICATE

Arguments: authentication mechanism

Data: continuation data may 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
user. Optionally, it also negotiates a protection mechanism
subsequent protocol interactions. If the requested
mechanism is not supported, the server should reject
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 should issue a line with
single "*". If the server receives such an answer, it must
the AUTHENTICATE command by sending a tagged BAD response

A protection mechanism provides integrity and privacy
to the protocol session. If a protection mechanism is negotiated
it is applied to all subsequent data sent over the connection
The protection mechanism takes effect immediately following
CRLF that concludes the authentication exchange for the client
and the 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

The server is not required to support any
authentication mechanism, nor are authentication
required to support any protection mechanisms. If an
command fails with a NO response, the client may try



Crispin [Page 13]

RFC 1730 IMAP4 December 1994


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 IMAP4
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
editorial clarity and are not in real authenticators


6.2.2. LOGIN

Arguments: user


Data: no specific data 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 user 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







Crispin [Page 14]

RFC 1730 IMAP4 December 1994


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
and APPEND

6.3.1. SELECT

Arguments: mailbox

Data: mandatory 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

EXISTS The number of messages in the

RECENT The number of messages added to the mailbox
the previous time this mailbox was

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. If
is not possible to determine the messages that were added
the previous time a mailbox was read, then all messages SHOULD
considered recent

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 may change permanently

Only one mailbox may be selected at a time in a session
simultaneous access to multiple mailboxes requires



Crispin [Page 15]

RFC 1730 IMAP4 December 1994


sessions. 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

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

If the user 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 user's .newsrc file are an example of such per-user
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

Data: mandatory 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 [Page 16]

RFC 1730 IMAP4 December 1994


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

Data: no specific data 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 may, in
future, create mailbox names under this name in the hierarchy
Server implementations that do not require this declaration
ignore it

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

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




Crispin [Page 17]

RFC 1730 IMAP4 December 1994


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


6.3.4. DELETE

Arguments: mailbox

Data: no specific data 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. Any error in deletion
return a tagged NO response

The value of the highest-used unique indentifier 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

Example: C: A683 DELETE
S: A683 OK DELETE


6.3.5. RENAME

Arguments: existing mailbox
new mailbox

Data: no specific data 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





Crispin [Page 18]

RFC 1730 IMAP4 December 1994


The RENAME command changes the name of a mailbox. A tagged
response is returned only if the mailbox has been renamed. It
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

Renaming INBOX is permitted; a new, empty INBOX is created in
place

Example: C: Z4S9 RENAME blurdybloop
S: Z4S9 OK RENAME


6.3.6. SUBSCRIBE

Arguments:

Data: no specific data 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

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


6.3.7. UNSUBSCRIBE

Arguments: mailbox

Data: no specific data 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





Crispin [Page 19]

RFC 1730 IMAP4 December 1994


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


6.3.8. LIST

Arguments: reference
mailbox name with possible

Data: 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 user. Zero or more untagged
replies are returned, containing the name attributes,
delimiter, and name; see the description of the LIST reply
more detail

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

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 reference argument.
this rule, the client would have to have knowledge of the server'
naming semantics including what characters are "breakouts"
override a naming context









Crispin [Page 20]

RFC 1730 IMAP4 December 1994


For example, here are some examples of how
and mailbox names might be interpreted on a UNIX-
server

Reference Mailbox Name
------------ ------------ --------------
~smith/Mail/ foo.* ~smith/Mail/foo.*
archive/ % archive/%
#news. comp.mail.* #news.comp.mail.*
~smith/Mail/ /usr/doc/foo /usr/doc/
archive/ ~fred/Mail/* ~fred/Mail/*

The first three examples demonstrate interpretations
the context of the reference argument. Note
"~smith/Mail" should not be transformed into
like "/u2/users/smith/Mail", or it would be
for the client to determine that the interpretation
in the context of the reference

The character "*" is a wildcard, and matches zero or
characters at this position. The character "%" is similar to "*",
but it does not match a hierarchy delimiter. If the "%"
is the last character of a mailbox name argument, matching
of hierarchy are also returned. If these levels of hierarchy
not also selectable mailboxes, they are returned with
\Noselect mailbox name attribute (see the description of the
response for more detail).

Server implementations are permitted to "hide"
accessible mailboxes from the wildcard characters, by
certain characters or names from matching a wildcard in
situations. For example, a UNIX-based server might restrict
interpretation of "*" so that an initial "/" character does
match

The special name INBOX is included in the output from LIST if
matches the input arguments and INBOX is supported by this
for this user. The criteria for omitting INBOX is whether
INBOX will return failure; it is not relevant whether the user'
real INBOX resides on this or some other server

Example: C: A002 LIST "~/Mail/" "%"
S: * LIST (\Noselect) "/" ~/Mail/
S: * LIST () "/" ~/Mail/
S: A002 OK LIST






Crispin [Page 21]

RFC 1730 IMAP4 December 1994


6.3.9. LSUB

Arguments: reference
mailbox name with possible

Data: untagged responses:

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

The LSUB command returns a subset of names from the set of
that the user has declared as being "active" or "subscribed".
Zero or more untagged LSUB replies are returned. The arguments
LSUB are in the same form as those for LIST

Example: C: A002 LSUB "#news." "comp.mail.*"
S: * LSUB () "." #news.comp.mail.
S: * LSUB () "." #news.comp.mail.
S: A002 OK LSUB


6.3.10. APPEND

Arguments: mailbox
optional flag parenthesized
optional date/time
message

Data: no specific data for this

Result: OK - append
NO - append error: can't append to that mailbox,
in flags or date/time or message
BAD - command unknown or arguments

The APPEND command appends the literal argument as a new
in the specified destination mailbox. This argument is in
format of an [RFC-822] message. 8-bit characters are permitted
the message. A server implementation that is unable to
8-bit data properly MUST be able to reversibly convert 8-
APPEND data to 7-bit using [MIME-1] encoding

If a flag parenthesized list or date_time are specified, that
SHOULD be set in the resulting message; otherwise, the defaults
empty flags and the current date/time are used





Crispin [Page 22]

RFC 1730 IMAP4 December 1994


If the append is unsuccessful for any reason, the mailbox MUST
restored to its state before the APPEND attempt; no
appending is permitted. If the mailbox is currently selected,
normal new mail actions should occur

If the destination mailbox does not exist, a server MUST return
error, and MUST NOT automatically create the mailbox. Unless
is certain that the destination mailbox can not be created,
server MUST send the response code "[TRYCREATE]" as the prefix
the text of the tagged NO response. This gives a hint to
client that it can attempt a CREATE command and retry the
if the CREATE is successful

Example: C: A003 APPEND saved-messages (\Seen) {310}
C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST
C: From: Fred Foobar C: Subject: afternoon
C: To: mooch@owatagu.siam.
C: Message-Id: C: MIME-Version: 1.0
C: Content-Type: TEXT/PLAIN; CHARSET=US-
C
C: Hello Joe, do you think we can meet at 3:30 tomorrow
C
S: A003 OK APPEND

Note: the APPEND command is not used for message delivery
because it does not provide a mechanism to transfer [SMTP
envelope information



6.4. Client Commands - Selected

In selected state, commands that manipulate messages in a mailbox
permitted

In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),
and the authenticated state commands (SELECT, EXAMINE, CREATE
DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB,
ALL.MAILBOXES, FIND MAILBOXES, and APPEND), the following
are valid in the selected state: CHECK, CLOSE, EXPUNGE, SEARCH
FETCH, PARTIAL, STORE, COPY, and UID








Crispin [Page 23]

RFC 1730 IMAP4 December 1994


6.4.1. CHECK

Arguments:

Data: no specific data for this

Result: OK - check
BAD - command unknown or arguments

The CHECK command requests a checkpoint of the currently
mailbox. A checkpoint refers to any implementation-
housekeeping associated with the mailbox (e.g. resolving
server's in-memory state of the mailbox with the state on
disk) that is not normally executed as part of each command.
checkpoint may take a non-instantaneous amount of real time
complete. If a server implementation has no such
considerations, CHECK is equivalent to NOOP

There is no guarantee that an EXISTS untagged response will
as a result of CHECK. NOOP, not CHECK, should be used for
mail polling

Example: C: FXXZ
S: FXXZ OK CHECK


6.4.2. CLOSE

Arguments:

Data: no specific data for this

Result: OK - close completed, now in authenticated
NO - close failure: no mailbox
BAD - command unknown or arguments

The CLOSE command permanently removes from the currently
mailbox all messages that have the \Deleted flag set, and
to authenticated state from selected state. No untagged
responses are sent

No messages are removed, and no error is given, if the mailbox
selected by an EXAMINE command or is otherwise selected read-only

Even when a mailbox is selected, it is not required to send
CLOSE command before a SELECT, EXAMINE, or LOGOUT command.
SELECT, EXAMINE, and LOGOUT commands implicitly close
currently selected mailbox without doing an expunge. However



Crispin [Page 24]

RFC 1730 IMAP4 December 1994


when many messages are deleted, a CLOSE-LOGOUT or CLOSE-
sequence is considerably faster than an EXPUNGE-LOGOUT
EXPUNGE-SELECT because no untagged EXPUNGE responses (which
client would probably ignore) are sent

Example: C: A341
S: A341 OK CLOSE


6.4.3. EXPUNGE

Arguments:

Data: untagged responses:

Result: OK - expunge
NO - expunge failure: can't expunge (e.g.
denied
BAD - command unknown or arguments

The EXPUNGE command permanently removes from the
selected mailbox all messages that have the \Deleted flag set
Before returning an OK to the client, an untagged EXPUNGE
is sent for each message that is removed

Example: C: A202
S: * 3
S: * 3
S: * 5
S: * 8
S: A202 OK EXPUNGE

Note: in this example, messages 3, 4, 7, and 11 had
\Deleted flag set. See the description of the
response for further explanation
















Crispin [Page 25]

RFC 1730 IMAP4 December 1994


6.4.4. SEARCH

Arguments: optional character set
searching criteria (one or more

Data: mandatory untagged response:

Result: OK - search
NO - search error: can't search that character set

BAD - command unknown or arguments

The SEARCH command searches the mailbox for messages that
the given searching criteria. Searching criteria consist of
or more search keys. The untagged SEARCH response from the
contains a listing of message sequence numbers corresponding
those messages that match the searching criteria

When multiple keys are specified, the result is the
(AND function) of all the messages that match those keys.
example, the criteria DELETED FROM "SMITH" SINCE 1-Feb-1994
to all deleted messages from Smith that were placed in the
since February 1, 1994. A search key may also be a
list of one or more search keys (e.g. for use with the OR and
keys).

Server implementations MAY exclude [MIME-1] body parts
terminal content types other than TEXT and MESSAGE
consideration in SEARCH matching

The optional character set specification consists of the
"CHARSET" followed by a registered MIME character set.
indicates the character set of the strings that appear in
search criteria. [MIME-2] strings that appear in RFC 822/
message headers, and [MIME-1] content transfer encodings, MUST
decoded before matching. Except for US-ASCII, it is not
that any particular character set be supported. If the
does not support the specified character set, it MUST return
tagged NO response (not a BAD).

In all search keys that use strings, a message matches the key
the string is a substring of the field. The matching
case-insensitive








Crispin [Page 26]

RFC 1730 IMAP4 December 1994


The defined search keys are as follows. Refer to the
Syntax section for the precise syntactic definitions of
arguments

Messages with message sequence
corresponding to the specified message
number

ALL All messages in the mailbox; the default
key for ANDing

ANSWERED Messages with the \Answered flag set

BCC Messages that contain the specified string in
envelope structure's BCC field

BEFORE Messages whose internal date is earlier than
specified date

BODY Messages that contain the specified string in
body of the message

CC Messages that contain the specified string in
envelope structure's CC field

DELETED Messages with the \Deleted flag set

DRAFT Messages with the \Draft flag set

FLAGGED Messages with the \Flagged flag set

FROM Messages that contain the specified string in
envelope structure's FROM field

HEADER Messages that have a header with the
field-name (as defined in [RFC-822]) and
contains the specified string in the [RFC-822]
field-body

KEYWORD Messages with the specified keyword set

LARGER Messages with an RFC822.SIZE larger than
specified number of octets

NEW Messages that have the \Recent flag set but not
\Seen flag. This is functionally equivalent
"(RECENT UNSEEN)".



Crispin [Page 27]

RFC 1730 IMAP4 December 1994


NOT Messages that do not match the specified
key

OLD Messages that do not have the \Recent flag set
This is functionally equivalent to "NOT RECENT" (
opposed to "NOT NEW").

ON Messages whose internal date is within
specified date

OR
Messages that match either search key

RECENT Messages that have the \Recent flag set

SEEN Messages that have the \Seen flag set

SENTBEFORE Messages whose [RFC-822] Date: header is
than the specified date

SENTON Messages whose [RFC-822] Date: header is within
specified date

SENTSINCE Messages whose [RFC-822] Date: header is within
later than the specified date

SINCE Messages whose internal date is within or
than the specified date

SMALLER Messages with an RFC822.SIZE smaller than
specified number of octets

SUBJECT Messages that contain the specified string in
envelope structure's SUBJECT field

TEXT Messages that contain the specified string in
header or body of the message

TO Messages that contain the specified string in
envelope structure's TO field

UID Messages with unique identifiers corresponding
the specified unique identifier set



Crispin [Page 28]

RFC 1730 IMAP4 December 1994


UNANSWERED Messages that do not have the \Answered flag set

UNDELETED Messages that do not have the \Deleted flag set

UNDRAFT Messages that do not have the \Draft flag set

UNFLAGGED Messages that do not have the \Flagged flag set

UNKEYWORD Messages that do not have the specified
set

UNSEEN Messages that do not have the \Seen flag set


Example: C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM "Smith
S: * SEARCH 2 84 882
S: A282 OK SEARCH


6.4.5. FETCH

Arguments: message
message data item

Data: untagged responses:

Result: OK - fetch
NO - fetch error: can't fetch that
BAD - command unknown or arguments

The FETCH command retrieves data associated with a message in
mailbox. The data items to be fetched may be either a single
or a parenthesized list. The currently defined data items
can be fetched are

ALL Macro equivalent to: (FLAGS
RFC822.SIZE ENVELOPE

BODY Non-extensible form of BODYSTRUCTURE

BODY[
]
The text of a particular body section. The
specification is a set of one or more part
delimited by periods

Single-part messages only have a part 1.




Crispin [Page 29]

RFC 1730 IMAP4 December 1994


Multipart messages are assigned consecutive
numbers, as they occur in the message. If
particular part is of type message or multipart
its parts must be indicated by a period followed
the part number within that nested multipart part
It is not permitted to fetch a multipart
itself, only its individual members

A part of type MESSAGE and subtype RFC822 also
nested parts. These are the parts of the
part's body. Nested part 0 of a part of
MESSAGE and subtype RFC822 is the [RFC-822]
of the message

Every message has at least one part

Here is an example of a complex
with its associated
specifications

0 ([RFC-822] header of the message
MULTIPART/
1 TEXT/
2 APPLICATION/OCTET-
3 MESSAGE/RFC822
3.0 ([RFC-822] header of the message
3.1 TEXT/
3.2 APPLICATION/OCTET-
MULTIPART/
4.1 IMAGE/
4.2 MESSAGE/RFC822
4.2.0 ([RFC-822] header of the message
4.2.1 TEXT/
MULTIPART/
4.2.2.1 TEXT/
4.2.2.2 TEXT/

Note that there is no
specification for the Multi-part
(no section 4 or 4.2.2).

The \Seen flag is implicitly set; if this
the flags to change they should be included as
of the fetch responses

BODY.PEEK[
]
An alternate form of BODY[section] that does
implicitly set the \Seen flag



Crispin [Page 30]

RFC 1730 IMAP4 December 1994


BODYSTRUCTURE The [MIME-1] body structure of the message.
is computed by the server by parsing the [MIME-1]
header lines

ENVELOPE The envelope structure of the message. This
computed by the server by parsing the [RFC-822]
header into the component parts, defaulting
fields as necessary

FAST Macro equivalent to: (FLAGS
RFC822.SIZE

FLAGS The flags that are set for this message

FULL Macro equivalent to: (FLAGS
RFC822.SIZE ENVELOPE BODY

INTERNALDATE The date and time of final delivery of the
as defined by RFC 821.

RFC822 The message in [RFC-822] format. The \Seen flag
implicitly set; if this causes the flags to
they should be included as part of the
responses. This is the concatenation
RFC822.HEADER and RFC822.TEXT

RFC822.PEEK An alternate form of RFC822 that does
implicitly set the \Seen flag

RFC822.HEADER The [RFC-822] format header of the message
stored on the server including the delimiting
line between the header and the body

RFC822.HEADER.LINES All header lines (including continuation lines)
the [RFC-822] format header of the message with
field-name (as defined in [RFC-822]) that
any of the strings in header_list. The matching
case-insensitive but otherwise exact.
delimiting blank line between the header and
body is always included










Crispin [Page 31]

RFC 1730 IMAP4 December 1994


RFC822.HEADER.LINES.NOT All header lines (including continuation lines)
the [RFC-822] format header of the message with
field-name (as defined in [RFC-822]) that does
match any of the strings in header_list.
matching is case-insensitive but otherwise exact
The delimiting blank line between the header
the body is always included

RFC822.SIZE The number of octets in the message, as
in [RFC-822] format

RFC822.TEXT The text body of the message, omitting
[RFC-822] header. The \Seen flag is
set; if this causes the flags to change they
be included as part of the fetch responses

RFC822.TEXT.
An alternate form of RFC822.TEXT that does
implicitly set the \Seen flag

UID The unique identifier for the message


Example: C: A654 FETCH 2:4 (FLAGS RFC822.HEADER.LINES (DATE FROM))
S: * 2 FETCH ....
S: * 3 FETCH ....
S: * 4 FETCH ....
S: A003 OK FETCH


6.4.6. PARTIAL

Arguments: message sequence
message data item
position of first
number of

Data: untagged responses:

Result: OK - partial
NO - partial error: can't fetch that
BAD - command unknown or arguments

The PARTIAL command is