rfc1730.txt
上传用户:horngjaan
上传日期:2009-12-12
资源大小:2882k
文件大小:153k
- Network Working Group M. Crispin
- Request for Comments: 1730 University of Washington
- Category: Standards Track December 1994
- INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4
- Status of this Memo
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
- Abstract
- The Internet Message Access Protocol, Version 4 (IMAP4) allows a
- client to access and manipulate electronic mail messages on a server.
- IMAP4 permits manipulation of remote message folders, called
- "mailboxes", in a way that is functionally equivalent to local
- mailboxes. IMAP4 also provides the capability for an offline client
- to resynchronize with the server (see also [IMAP-DISC]).
- IMAP4 includes operations for creating, deleting, and renaming
- mailboxes; checking for new messages; permanently removing messages;
- setting and clearing flags; RFC 822 and MIME parsing; searching; and
- selective fetching of message attributes, texts, and portions
- thereof. Messages in IMAP4 are accessed by the use of numbers.
- These numbers are either message sequence numbers (relative position
- from 1 to the number of messages in the mailbox) or unique
- identifiers (immutable, strictly ascending values assigned to each
- message, but which are not necessarily contiguous).
- IMAP4 supports a single server. A mechanism for supporting multiple
- IMAP4 servers is discussed in [IMSP].
- IMAP4 does not specify a means of posting mail; this function is
- 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 Contents
- 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<atom> 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 Specification
- 1. Organization of this Document
- 1.1. How to Read This Document
- This document is written from the point of view of the implementor of
- an IMAP4 client or server. Beyond the protocol overview in section
- 2, it is not optimized for someone trying to understand the operation
- of the protocol. The material in sections 3 through 5 provides the
- general context and definitions with which IMAP4 operates.
- Sections 6, 7, and 9 describe the IMAP commands, responses, and
- syntax, respectively. The relationships among these are such that it
- is almost impossible to understand any of them separately. In
- particular, one should not attempt to deduce command syntax from the
- command section alone; one should instead refer to the formal syntax
- section.
- 1.2. Conventions Used in this Document
- In examples, "C:" and "S:" indicate lines sent by the client and
- server respectively.
- 2. Protocol Overview
- 2.1. Link Level
- The IMAP4 protocol assumes a reliable data stream such as provided by
- TCP. When TCP is used, an IMAP4 server listens on port 143.
- 2.2. Commands and Responses
- An IMAP4 session consists of the establishment of a client/server
- connection, an initial greeting from the server, and client/server
- interactions. These client/server interactions consist of a client
- command, server data, and a server completion result response.
- All interactions transmitted by client and server are in the form of
- lines; that is, strings that end with a CRLF. The protocol receiver
- of an IMAP4 client or server is either reading a line, or is reading
- 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 Receiver
- The client command begins an operation. Each client command is
- prefixed with a identifier (typically a short alphanumeric string,
- e.g. A0001, A0002, etc.) called a "tag". A different tag is
- generated by the client for each command.
- There are two cases in which a line from the client does not
- represent a complete command. In one case, a command argument is
- quoted with an octet count (see the description of literal in String
- under Data Formats); in the other case, the command arguments require
- server feedback (see the AUTHENTICATE command). In either case, the
- server sends a command continuation request response if it is ready
- 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, it sends a BAD completion response with tag
- matching the command (as described below) to reject the
- command and prevent the client from sending any more of the
- command.
- It is also possible for the server to send a completion
- response for some other command (if multiple commands are
- in progress), or untagged data. In either case, the
- command continuation request is still pending; the client
- takes the appropriate action for the response, and reads
- another response from the server.
- The protocol receiver of an IMAP4 server reads a command line from
- the client, parses the command and its arguments, and transmits
- server data and a server command completion result response.
- 2.2.2. Server Protocol Sender and Client Protocol Receiver
- Data transmitted by the server to the client and status responses
- that do not indicate command completion are prefixed with the token
- "*", and are called untagged responses.
- Server data may be sent as a result of a client command, or may be
- sent unilaterally by the server. There is no syntactic difference
- between server data that resulted from a specific command and server
- data that were sent unilaterally.
- The server completion result response indicates the success or
- failure of the operation. It is tagged with the same tag as the
- client command which began the operation. Thus, if more than one
- Crispin [Page 2]
- RFC 1730 IMAP4 December 1994
- command is in progress, the tag in a server completion response
- identifies the command to which the response applies. There are
- three possible server completion responses: OK (indicating success),
- NO (indicating failure), or BAD (indicating protocol error such as
- unrecognized command or command syntax error).
- The protocol receiver of an IMAP4 client reads a response line from
- the server. It then takes action on the response based upon the
- first token of the response, which may be a tag, a "*", or a "+". As
- 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. Server
- data SHOULD be recorded, so that the client can reference its
- recorded copy rather than sending a command to the server to request
- the data. In the case of certain server data, recording the data is
- mandatory.
- This topic is discussed in greater detail in the Server Responses
- section.
- Crispin [Page 3]
- RFC 1730 IMAP4 December 1994
- 3. State and Flow Diagram
- An IMAP4 server is in one of four states. Most commands are valid in
- only certain states. It is a protocol error for the client 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 upon
- server implementation) command completion result.
- 3.1. Non-Authenticated State
- In non-authenticated state, the user must supply authentication
- credentials before most commands will be permitted. This state is
- entered when a connection starts unless the connection has been
- pre-authenticated.
- 3.2. Authenticated State
- In authenticated state, the user is authenticated and must select a
- mailbox to access before commands that affect messages will be
- permitted. This state is entered when a pre-authenticated connection
- starts, when acceptable authentication credentials have been
- provided, or after an error in selecting a mailbox.
- 3.3. Selected State
- In selected state, a mailbox has been selected to access. This state
- is entered when a mailbox has been successfully selected.
- 3.4. Logout State
- In logout state, the session is being terminated, and the server will
- close the connection. This state can be entered as a result of a
- 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 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 command
- (5) successful SELECT or EXAMINE command
- (6) CLOSE command, or failed SELECT or EXAMINE command
- (7) LOGOUT command, server shutdown, or connection closed
- Crispin [Page 5]
- RFC 1730 IMAP4 December 1994
- 4. Data Formats
- IMAP4 uses textual commands and responses. Data in IMAP4 can be in
- one of several forms: atom, number, string, parenthesized list, or
- NIL.
- 4.1. Atom
- An atom consists of one or more non-special characters.
- 4.2. Number
- A number consists of one or more digit characters, and represents a
- numeric value.
- 4.3. String
- A string is in one of two forms: literal and quoted string. The
- literal form is the general form of string. The quoted string form
- is an alternative that avoids the overhead of processing a literal at
- 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 of
- literals transmitted from server to client, the CRLF is immediately
- followed by the octet data. In the case of literals transmitted from
- client to server, the client must wait to receive a command
- continuation request (described later in this document) before
- 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 with
- zero characters between double quotes) or as {0} followed by CRLF (a
- literal with an octet count of 0).
- Note: Even if the octet count is 0, a client transmitting a
- literal must wait to receive a command continuation
- request.
- Crispin [Page 6]
- RFC 1730 IMAP4 December 1994
- 4.3.1. 8-bit and Binary Strings
- 8-bit textual and binary mail is supported through the use of
- [MIME-1] encoding. IMAP4 implementations MAY transmit 8-bit or
- multi-octet characters in literals, but should do so only when the
- character set is identified.
- Although a BINARY body encoding is defined, unencoded binary strings
- are not permitted. A "binary string" is any string with NUL
- characters. Implementations MUST encode binary data into a textual
- form such as BASE64 before transmitting the data. A string with an
- excessive amount of CTL characters may also be considered to be
- binary, although this is not required.
- 4.4. Parenthesized List
- Data structures are represented as a "parenthesized list"; a sequence
- of data items, delimited by space, and bounded at each end by
- parentheses. A parenthesized list may itself contain other
- parenthesized lists, using multiple levels of parentheses to indicate
- nesting.
- The empty list is represented as () -- a parenthesized list with no
- members.
- 4.5. NIL
- The special atom "NIL" represents the non-existence of a particular
- data item that is represented as a string or parenthesized list, as
- distinct from the empty string "" or the empty parenthesized list ().
- Crispin [Page 7]
- RFC 1730 IMAP4 December 1994
- 5. Operational Considerations
- 5.1. Mailbox Naming
- The interpretation of mailbox names is implementation-dependent.
- However, the mailbox name INBOX is a special name reserved to mean
- "the primary mailbox for this user on this server". If it is desired
- to export hierarchical mailbox names, mailbox names must be
- left-to-right hierarchical using a single character to separate
- levels of hierarchy. The same hierarchy separator character is used
- for all levels of hierarchy within a single name.
- 5.2. Mailbox Size and Message Status Updates
- At any time, a server can send data that the client did not request.
- Sometimes, such behavior is required. For example, agents other than
- the server may add messages to the mailbox (e.g. new mail delivery),
- change the flags of message in the mailbox (e.g. simultaneous access
- to the same mailbox by multiple agents), or even remove messages from
- the mailbox. A server MUST send mailbox size updates automatically
- if a mailbox size change is observed during the processing of a
- 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 the
- removal of messages to prevent synchronization errors; see the
- description of the EXPUNGE response for more details.
- Regardless of what implementation decisions a client may take on
- remembering data from the server, a client implementation MUST record
- mailbox size updates. It MUST NOT assume that any command after
- initial mailbox selection will return the size of the mailbox.
- 5.3. Response when no Command in Progress
- Server implementations are permitted to send an untagged response
- (except for EXPUNGE) while there is no command in progress. Server
- implementations that send such responses MUST deal with flow control
- considerations. Specifically, they must either (1) verify that the
- size of the data does not exceed the underlying transport's available
- window size, or (2) use non-blocking writes.
- Crispin [Page 8]
- RFC 1730 IMAP4 December 1994
- 5.4. Autologout Timer
- If a server has an inactivity autologout timer, that timer MUST be of
- at least 30 minutes' duration. The receipt of ANY command from the
- client during that interval should suffice to reset the autologout
- timer.
- 5.5. Multiple Commands in Progress
- The client is not required to wait for the completion result response
- of a command before sending another command, subject to flow control
- constraints on the underlying data stream. Similarly, a server is
- not required to process a command to completion before beginning
- processing of the next command, unless an ambiguity would result
- because of a command that would affect the results of other commands.
- If there is such an ambiguity, the server executes commands to
- completion in the order given by the client.
- Crispin [Page 9]
- RFC 1730 IMAP4 December 1994
- 6. Client Commands
- IMAP4 commands are described in this section. Commands are organized
- by the state in which the command is permitted. Commands which are
- permitted in multiple states are listed in the minimum permitted
- state (for example, commands valid in authenticated and selected
- state are listed in the authenticated state commands).
- Command arguments, identified by "Arguments:" in the command
- descriptions below, are described by function, not by syntax. The
- precise syntax of command arguments is described in the Formal Syntax
- section.
- Some commands cause specific server data to be returned; these are
- identified by "Data:" in the command descriptions below. See the
- response descriptions in the Responses section for information on
- these responses, and the Formal Syntax section for the precise syntax
- of these responses. It is possible for server data to be transmitted
- as a result of any command; thus, commands that do not specifically
- require server data specify "no specific data for this command"
- instead of "none".
- The "Result:" in the command description refers to the possible
- tagged status responses to a command, and any special interpretation
- of these status responses.
- 6.1. Client Commands - Any State
- The following commands are valid in any state: CAPABILITY, NOOP, and
- LOGOUT.
- 6.1.1. CAPABILITY Command
- Arguments: none
- Data: mandatory untagged response: CAPABILITY
- Result: OK - capability completed
- BAD - command unknown or arguments invalid
- The CAPABILITY command requests a listing of capabilities that the
- server supports. The server MUST send a single untagged
- CAPABILITY response with "IMAP4" as the first listed capability
- before the (tagged) OK response. This listing of capabilities is
- not dependent upon connection state or user. It is therefore not
- necessary to issue a CAPABILITY command more than once in a
- session.
- Crispin [Page 10]
- RFC 1730 IMAP4 December 1994
- Capability names other than "IMAP4" refer to extensions,
- revisions, or amendments to this specification. See the
- documentation of the CAPABILITY response for additional
- information. No capabilities are enabled without explicit client
- action to invoke the capability. See the section entitled "Client
- Commands - Experimental/Expansion" for information about the form
- of site or implementation-specific capabilities.
- Example: C: abcd CAPABILITY
- S: * CAPABILITY IMAP4
- S: abcd OK CAPABILITY completed
- 6.1.2. NOOP Command
- Arguments: none
- Data: no specific data for this command (but see below)
- Result: OK - noop completed
- BAD - command unknown or arguments invalid
- The NOOP command always succeeds. It does nothing.
- Since any command can return a status update as untagged data, the
- NOOP command can be used as a periodic poll for new messages or
- message status updates during a period of inactivity. The NOOP
- command can also be used to reset any inactivity autologout timer
- on the server.
- Example: C: a002 NOOP
- S: a002 OK NOOP completed
- . . .
- C: a047 NOOP
- S: * 22 EXPUNGE
- S: * 23 EXISTS
- S: * 3 RECENT
- S: * 14 FETCH (FLAGS (Seen Deleted))
- S: a047 OK NOOP completed
- Crispin [Page 11]
- RFC 1730 IMAP4 December 1994
- 6.1.3. LOGOUT Command
- Arguments: none
- Data: mandatory untagged response: BYE
- Result: OK - logout completed
- BAD - command unknown or arguments invalid
- The LOGOUT command informs the server that the client is done with
- the session. The server must send a BYE untagged response before
- the (tagged) OK response, and then close the network connection.
- Example: C: A023 LOGOUT
- S: * BYE IMAP4 Server logging out
- S: A023 OK LOGOUT completed
- (Server and client then close the connection)
- 6.2. Client Commands - Non-Authenticated State
- In non-authenticated state, the AUTHENTICATE or LOGIN command
- establishes authentication and enter authenticated state. The
- AUTHENTICATE command provides a general mechanism for a variety of
- authentication techniques, whereas the LOGIN command uses the
- traditional user name and plaintext password pair.
- Server implementations may allow non-authenticated access to certain
- mailboxes. The convention is to use a LOGIN command with the userid
- "anonymous". A password is required. It is implementation-dependent
- what requirements, if any, are placed on the password and what access
- restrictions are placed on anonymous users.
- Once authenticated (including as anonymous), it is not possible to
- 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 Command
- Arguments: authentication mechanism name
- Data: continuation data may be requested
- Result: OK - authenticate completed, now in authenticated state
- NO - authenticate failure: unsupported authentication
- mechanism, credentials rejected
- BAD - command unknown or arguments invalid,
- authentication exchange cancelled
- The AUTHENTICATE command indicates an authentication mechanism,
- such as described in [IMAP-AUTH], to the server. If the server
- supports the requested authentication mechanism, it performs an
- authentication protocol exchange to authenticate and identify the
- user. Optionally, it also negotiates a protection mechanism for
- subsequent protocol interactions. If the requested authentication
- mechanism is not supported, the server should reject the
- AUTHENTICATE command by sending a tagged NO response.
- The authentication protocol exchange consists of a series of
- server challenges and client answers that are specific to the
- authentication mechanism. A server challenge consists of a
- command continuation request response with the "+" token followed
- by a BASE64 encoded string. The client answer consists of a line
- consisting of a BASE64 encoded string. If the client wishes to
- cancel an authentication exchange, it should issue a line with a
- single "*". If the server receives such an answer, it must reject
- the AUTHENTICATE command by sending a tagged BAD response.
- A protection mechanism provides integrity and privacy protection
- 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 the
- CRLF that concludes the authentication exchange for the client,
- and the CRLF of the tagged OK response for the server. Once the
- protection mechanism is in effect, the stream of command and
- response octets is processed into buffers of ciphertext. Each
- buffer is transferred over the connection as a stream of octets
- prepended with a four octet field in network byte order that
- represents the length of the following data. The maximum
- ciphertext buffer length is defined by the protection mechanism.
- The server is not required to support any particular
- authentication mechanism, nor are authentication mechanisms
- required to support any protection mechanisms. If an AUTHENTICATE
- command fails with a NO response, the client may try another
- 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. In
- other words, the client may request authentication types in
- decreasing order of preference, with the LOGIN command as a last
- resort.
- Example: S: * OK KerberosV4 IMAP4 Server
- C: A001 AUTHENTICATE KERBEROS_V4
- S: + AmFYig==
- C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT
- +nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFd
- WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh
- S: + or//EoAADZI=
- C: DiAF5A4gA+oOIALuBkAAmw==
- S: A001 OK Kerberos V4 authentication successful
- Note: the line breaks in the first client answer are for
- editorial clarity and are not in real authenticators.
- 6.2.2. LOGIN Command
- Arguments: user name
- password
- Data: no specific data for this command
- Result: OK - login completed, now in authenticated state
- NO - login failure: user name or password rejected
- BAD - command unknown or arguments invalid
- The LOGIN command identifies the user to the server and carries
- the plaintext password authenticating this user.
- Example: C: a001 LOGIN SMITH SESAME
- S: a001 OK LOGIN completed
- 6.3. Client Commands - Authenticated State
- In authenticated state, commands that manipulate mailboxes as atomic
- entities are permitted. Of these commands, the SELECT and EXAMINE
- 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 Command
- Arguments: mailbox name
- Data: mandatory untagged responses: FLAGS, EXISTS, RECENT
- optional OK untagged responses: UNSEEN, PERMANENTFLAGS
- Result: OK - select completed, now in selected state
- NO - select failure, now in authenticated state: no
- such mailbox, can't access mailbox
- BAD - command unknown or arguments invalid
- The SELECT command selects a mailbox so that messages in the
- 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
- <n> EXISTS The number of messages in the mailbox
- <n> RECENT The number of messages added to the mailbox since
- the previous time this mailbox was read
- OK [UIDVALIDITY <n>]
- The unique identifier validity value. See the
- description of the UID command for more detail.
- to define the initial state of the mailbox at the client. If it
- is not possible to determine the messages that were added since
- the previous time a mailbox was read, then all messages SHOULD be
- considered recent.
- The server SHOULD also send an UNSEEN response code in an OK
- untagged response, indicating the message sequence number of the
- first unseen message in the mailbox.
- If the client can not change the permanent state of one or more of
- the flags listed in the FLAGS untagged response, the server SHOULD
- 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 multiple
- Crispin [Page 15]
- RFC 1730 IMAP4 December 1994
- sessions. The SELECT command automatically deselects any
- currently selected mailbox before attempting the new selection.
- Consequently, if a mailbox is selected and a SELECT command that
- fails is attempted, no mailbox is selected.
- If the user is permitted to modify the mailbox, the server SHOULD
- 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 is
- permitted read access, the mailbox is selected as read-only, and
- the server MUST prefix the text of the tagged OK response to
- SELECT with the "[READ-ONLY]" response code. Read-only access
- through SELECT differs from the EXAMINE command in that certain
- read-only mailboxes may permit the change of permanent state on a
- per-user (as opposed to global) basis. Netnews messages marked in
- a user's .newsrc file are an example of such per-user permanent
- state that can be modified with read-only mailboxes.
- Example: C: A142 SELECT INBOX
- S: * 172 EXISTS
- S: * 1 RECENT
- S: * OK [UNSEEN 12] Message 12 is first unseen
- S: * OK [UIDVALIDITY 3857529045] UIDs valid
- S: * FLAGS (Answered Flagged Deleted Seen Draft)
- S: * OK [PERMANENTFLAGS (Deleted Seen *)] Limited
- S: A142 OK [READ-WRITE] SELECT completed
- 6.3.2. EXAMINE Command
- Arguments: mailbox name
- Data: mandatory untagged responses: FLAGS, EXISTS, RECENT
- optional OK untagged responses: UNSEEN, PERMANENTFLAGS
- Result: OK - examine completed, now in selected state
- NO - examine failure, now in authenticated state: no
- such mailbox, can't access mailbox
- BAD - command unknown or arguments invalid
- The EXAMINE command is identical to SELECT and returns the same
- output; however, the selected mailbox is identified as read-only.
- No changes to the permanent state of the mailbox, including
- per-user state, are permitted.
- Crispin [Page 16]
- RFC 1730 IMAP4 December 1994
- The text of the tagged OK response to the EXAMINE command MUST
- begin with the "[READ-ONLY]" response code.
- Example: C: A932 EXAMINE blurdybloop
- S: * 17 EXISTS
- S: * 2 RECENT
- S: * OK [UNSEEN 8] Message 8 is first unseen
- S: * OK [UIDVALIDITY 3857529045] UIDs valid
- S: * FLAGS (Answered Flagged Deleted Seen Draft)
- S: * OK [PERMANENTFLAGS ()] No permanent flags permitted
- S: A932 OK [READ-ONLY] EXAMINE completed
- 6.3.3. CREATE Command
- Arguments: mailbox name
- Data: no specific data for this command
- Result: OK - create completed
- NO - create failure: can't create mailbox with that name
- BAD - command unknown or arguments invalid
- The CREATE command creates a mailbox with the given name. An OK
- response is returned only if a new mailbox with that name has been
- created. It is an error to attempt to create INBOX or a mailbox
- with a name that refers to an extant mailbox. Any error in
- creation will return a tagged NO response.
- If the mailbox name is suffixed with the server's hierarchy
- separator character (as returned from the server by a LIST
- command), this is a declaration that the client may, in the
- future, create mailbox names under this name in the hierarchy.
- Server implementations that do not require this declaration MUST
- ignore it.
- If a new mailbox is created with the same name as a mailbox which
- was deleted, its unique identifiers MUST be greater than any
- unique identifiers used in the previous incarnation of the mailbox
- UNLESS the new incarnation has a different unique identifier
- validity value. See the description of the UID command for more
- detail.
- Example: C: A003 CREATE owatagusiam/
- S: A003 OK CREATE completed
- C: A004 CREATE owatagusiam/blurdybloop
- S: A004 OK CREATE completed
- Crispin [Page 17]
- RFC 1730 IMAP4 December 1994
- Note: the interpretation of this example depends on whether
- "/" was returned as the hierarchy separator from LIST. If
- "/" is the hierarchy separator, a new level of hierarchy
- named "owatagusiam" with a member called "blurdybloop" is
- created. Otherwise, two mailboxes at the same hierarchy
- level are created.
- 6.3.4. DELETE Command
- Arguments: mailbox name
- Data: no specific data for this command
- Result: OK - delete completed
- NO - delete failure: can't delete mailbox with that name
- BAD - command unknown or arguments invalid
- The DELETE command permanently removes the mailbox with the given
- name. A tagged OK response is returned only if the mailbox has
- been deleted. It is an error to attempt to delete INBOX or a
- mailbox name that does not exist. Any error in deletion will
- return a tagged NO response.
- The value of the highest-used unique indentifier of the deleted
- mailbox MUST be preserved so that a new mailbox created with the
- same name will not reuse the identifiers of the former
- incarnation, UNLESS the new incarnation has a different unique
- identifier validity value. See the description of the UID command
- for more detail.
- Example: C: A683 DELETE blurdybloop
- S: A683 OK DELETE completed
- 6.3.5. RENAME Command
- Arguments: existing mailbox name
- new mailbox name
- Data: no specific data for this command
- Result: OK - rename completed
- NO - rename failure: can't rename mailbox with that name,
- can't rename to mailbox with that name
- BAD - command unknown or arguments invalid
- Crispin [Page 18]
- RFC 1730 IMAP4 December 1994
- The RENAME command changes the name of a mailbox. A tagged OK
- response is returned only if the mailbox has been renamed. It is
- an error to attempt to rename from a mailbox name that does not
- exist or to a mailbox name that already exists. Any error in
- renaming will return a tagged NO response.
- Renaming INBOX is permitted; a new, empty INBOX is created in its
- place.
- Example: C: Z4S9 RENAME blurdybloop owatagusiam
- S: Z4S9 OK RENAME completed
- 6.3.6. SUBSCRIBE Command
- Arguments: mailbox
- Data: no specific data for this command
- Result: OK - subscribe completed
- NO - subscribe failure: can't subscribe to that name
- BAD - command unknown or arguments invalid
- The SUBSCRIBE command adds the specified mailbox name to the
- server's set of "active" or "subscribed" mailboxes as returned by
- the LSUB command. This command returns a tagged OK response only
- if the subscription is successful.
- Example: C: A002 SUBSCRIBE #news.comp.mail.mime
- S: A002 OK SUBSCRIBE completed
- 6.3.7. UNSUBSCRIBE Command
- Arguments: mailbox name
- Data: no specific data for this command
- Result: OK - unsubscribe completed
- NO - unsubscribe failure: can't unsubscribe that name
- BAD - command unknown or arguments invalid
- The UNSUBSCRIBE command removes the specified mailbox name from
- the server's set of "active" or "subscribed" mailboxes as returned
- by the LSUB command. This command returns a tagged OK response
- only if the unsubscription is successful.
- Crispin [Page 19]
- RFC 1730 IMAP4 December 1994
- Example: C: A002 UNSUBSCRIBE #news.comp.mail.mime
- S: A002 OK UNSUBSCRIBE completed
- 6.3.8. LIST Command
- Arguments: reference name
- mailbox name with possible wildcards
- Data: untagged responses: LIST
- Result: OK - list completed
- NO - list failure: can't list that reference or name
- BAD - command unknown or arguments invalid
- The LIST command returns a subset of names from the complete set
- of all names available to the user. Zero or more untagged LIST
- replies are returned, containing the name attributes, hierarchy
- delimiter, and name; see the description of the LIST reply for
- more detail.
- An empty ("" string) reference name argument indicates that the
- mailbox name is interpreted as by SELECT. The returned mailbox
- names MUST match the supplied mailbox name pattern. A non-empty
- reference name argument is the name of a mailbox or a level of
- mailbox hierarchy, and indicates a context in which the mailbox
- name is interpreted in an implementation-defined manner.
- The reference and mailbox name arguments are interpreted, in an
- implementation-dependent fashion, into a canonical form that
- represents an unambiguous left-to-right hierarchy. The returned
- mailbox names will be in the interpreted form.
- Any part of the reference argument that is included in the
- interpreted form SHOULD prefix the interpreted form. It should
- also be in the same form as the reference name argument. This
- rule permits the client to determine if the returned mailbox name
- is in the context of the reference argument, or if something about
- the mailbox argument overrode the reference argument. Without
- this rule, the client would have to have knowledge of the server's
- naming semantics including what characters are "breakouts" that
- override a naming context.
- Crispin [Page 20]
- RFC 1730 IMAP4 December 1994
- For example, here are some examples of how references
- and mailbox names might be interpreted on a UNIX-based
- server:
- Reference Mailbox Name Interpretation
- ------------ ------------ --------------
- ~smith/Mail/ foo.* ~smith/Mail/foo.*
- archive/ % archive/%
- #news. comp.mail.* #news.comp.mail.*
- ~smith/Mail/ /usr/doc/foo /usr/doc/foo
- archive/ ~fred/Mail/* ~fred/Mail/*
- The first three examples demonstrate interpretations in
- the context of the reference argument. Note that
- "~smith/Mail" should not be transformed into something
- like "/u2/users/smith/Mail", or it would be impossible
- for the client to determine that the interpretation was
- in the context of the reference.
- The character "*" is a wildcard, and matches zero or more
- characters at this position. The character "%" is similar to "*",
- but it does not match a hierarchy delimiter. If the "%" wildcard
- is the last character of a mailbox name argument, matching levels
- of hierarchy are also returned. If these levels of hierarchy are
- not also selectable mailboxes, they are returned with the
- Noselect mailbox name attribute (see the description of the LIST
- response for more detail).
- Server implementations are permitted to "hide" otherwise
- accessible mailboxes from the wildcard characters, by preventing
- certain characters or names from matching a wildcard in certain
- situations. For example, a UNIX-based server might restrict the
- interpretation of "*" so that an initial "/" character does not
- match.
- The special name INBOX is included in the output from LIST if it
- matches the input arguments and INBOX is supported by this server
- for this user. The criteria for omitting INBOX is whether SELECT
- INBOX will return failure; it is not relevant whether the user's
- real INBOX resides on this or some other server.
- Example: C: A002 LIST "~/Mail/" "%"
- S: * LIST (Noselect) "/" ~/Mail/foo
- S: * LIST () "/" ~/Mail/meetings
- S: A002 OK LIST completed
- Crispin [Page 21]
- RFC 1730 IMAP4 December 1994
- 6.3.9. LSUB Command
- Arguments: reference name
- mailbox name with possible wildcards
- Data: untagged responses: LSUB
- Result: OK - lsub completed
- NO - lsub failure: can't list that reference or name
- BAD - command unknown or arguments invalid
- The LSUB command returns a subset of names from the set of names
- that the user has declared as being "active" or "subscribed".
- Zero or more untagged LSUB replies are returned. The arguments to
- LSUB are in the same form as those for LIST.
- Example: C: A002 LSUB "#news." "comp.mail.*"
- S: * LSUB () "." #news.comp.mail.mime
- S: * LSUB () "." #news.comp.mail.misc
- S: A002 OK LSUB completed
- 6.3.10. APPEND Command
- Arguments: mailbox name
- optional flag parenthesized list
- optional date/time string
- message literal
- Data: no specific data for this command
- Result: OK - append completed
- NO - append error: can't append to that mailbox, error
- in flags or date/time or message text
- BAD - command unknown or arguments invalid
- The APPEND command appends the literal argument as a new message
- in the specified destination mailbox. This argument is in the
- format of an [RFC-822] message. 8-bit characters are permitted in
- the message. A server implementation that is unable to preserve
- 8-bit data properly MUST be able to reversibly convert 8-bit
- APPEND data to 7-bit using [MIME-1] encoding.
- If a flag parenthesized list or date_time are specified, that data
- SHOULD be set in the resulting message; otherwise, the defaults of
- 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 be
- restored to its state before the APPEND attempt; no partial
- appending is permitted. If the mailbox is currently selected, the
- normal new mail actions should occur.
- If the destination mailbox does not exist, a server MUST return an
- error, and MUST NOT automatically create the mailbox. Unless it
- is certain that the destination mailbox can not be created, the
- server MUST send the response code "[TRYCREATE]" as the prefix of
- the text of the tagged NO response. This gives a hint to the
- client that it can attempt a CREATE command and retry the APPEND
- 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 <foobar@Blurdybloop.COM>
- C: Subject: afternoon meeting
- C: To: mooch@owatagu.siam.edu
- C: Message-Id: <B27397-0100000@Blurdybloop.COM>
- C: MIME-Version: 1.0
- C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
- C:
- C: Hello Joe, do you think we can meet at 3:30 tomorrow?
- C:
- S: A003 OK APPEND completed
- 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 State
- In selected state, commands that manipulate messages in a mailbox are
- 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, FIND
- ALL.MAILBOXES, FIND MAILBOXES, and APPEND), the following commands
- 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 Command
- Arguments: none
- Data: no specific data for this command
- Result: OK - check completed
- BAD - command unknown or arguments invalid
- The CHECK command requests a checkpoint of the currently selected
- mailbox. A checkpoint refers to any implementation-dependent
- housekeeping associated with the mailbox (e.g. resolving the
- server's in-memory state of the mailbox with the state on its
- disk) that is not normally executed as part of each command. A
- checkpoint may take a non-instantaneous amount of real time to
- complete. If a server implementation has no such housekeeping
- considerations, CHECK is equivalent to NOOP.
- There is no guarantee that an EXISTS untagged response will happen
- as a result of CHECK. NOOP, not CHECK, should be used for new
- mail polling.
- Example: C: FXXZ CHECK
- S: FXXZ OK CHECK Completed
- 6.4.2. CLOSE Command
- Arguments: none
- Data: no specific data for this command
- Result: OK - close completed, now in authenticated state
- NO - close failure: no mailbox selected
- BAD - command unknown or arguments invalid
- The CLOSE command permanently removes from the currently selected
- mailbox all messages that have the Deleted flag set, and returns
- to authenticated state from selected state. No untagged EXPUNGE
- responses are sent.
- No messages are removed, and no error is given, if the mailbox is
- selected by an EXAMINE command or is otherwise selected read-only.
- Even when a mailbox is selected, it is not required to send a
- CLOSE command before a SELECT, EXAMINE, or LOGOUT command. The
- SELECT, EXAMINE, and LOGOUT commands implicitly close the
- 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-SELECT
- sequence is considerably faster than an EXPUNGE-LOGOUT or
- EXPUNGE-SELECT because no untagged EXPUNGE responses (which the
- client would probably ignore) are sent.
- Example: C: A341 CLOSE
- S: A341 OK CLOSE completed
- 6.4.3. EXPUNGE Command
- Arguments: none
- Data: untagged responses: EXPUNGE
- Result: OK - expunge completed
- NO - expunge failure: can't expunge (e.g. permission
- denied)
- BAD - command unknown or arguments invalid
- The EXPUNGE command permanently removes from the currently
- selected mailbox all messages that have the Deleted flag set.
- Before returning an OK to the client, an untagged EXPUNGE response
- is sent for each message that is removed.
- Example: C: A202 EXPUNGE
- S: * 3 EXPUNGE
- S: * 3 EXPUNGE
- S: * 5 EXPUNGE
- S: * 8 EXPUNGE
- S: A202 OK EXPUNGE completed
- Note: in this example, messages 3, 4, 7, and 11 had the
- Deleted flag set. See the description of the EXPUNGE
- response for further explanation.
- Crispin [Page 25]
- RFC 1730 IMAP4 December 1994
- 6.4.4. SEARCH Command
- Arguments: optional character set specification
- searching criteria (one or more)
- Data: mandatory untagged response: SEARCH
- Result: OK - search completed
- NO - search error: can't search that character set or
- criteria
- BAD - command unknown or arguments invalid
- The SEARCH command searches the mailbox for messages that match
- the given searching criteria. Searching criteria consist of one
- or more search keys. The untagged SEARCH response from the server
- contains a listing of message sequence numbers corresponding to
- those messages that match the searching criteria.
- When multiple keys are specified, the result is the intersection
- (AND function) of all the messages that match those keys. For
- example, the criteria DELETED FROM "SMITH" SINCE 1-Feb-1994 refers
- to all deleted messages from Smith that were placed in the mailbox
- since February 1, 1994. A search key may also be a parenthesized
- list of one or more search keys (e.g. for use with the OR and NOT
- keys).
- Server implementations MAY exclude [MIME-1] body parts with
- terminal content types other than TEXT and MESSAGE from
- consideration in SEARCH matching.
- The optional character set specification consists of the word
- "CHARSET" followed by a registered MIME character set. It
- indicates the character set of the strings that appear in the
- search criteria. [MIME-2] strings that appear in RFC 822/MIME
- message headers, and [MIME-1] content transfer encodings, MUST be
- decoded before matching. Except for US-ASCII, it is not required
- that any particular character set be supported. If the server
- does not support the specified character set, it MUST return a
- tagged NO response (not a BAD).
- In all search keys that use strings, a message matches the key if
- the string is a substring of the field. The matching is
- case-insensitive.
- Crispin [Page 26]
- RFC 1730 IMAP4 December 1994
- The defined search keys are as follows. Refer to the Formal
- Syntax section for the precise syntactic definitions of the
- arguments.
- <message set> Messages with message sequence numbers
- corresponding to the specified message sequence
- number set
- ALL All messages in the mailbox; the default initial
- key for ANDing.
- ANSWERED Messages with the Answered flag set.
- BCC <string> Messages that contain the specified string in the
- envelope structure's BCC field.
- BEFORE <date> Messages whose internal date is earlier than the
- specified date.
- BODY <string> Messages that contain the specified string in the
- body of the message.
- CC <string> Messages that contain the specified string in the
- 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 <string> Messages that contain the specified string in the
- envelope structure's FROM field.
- HEADER <field-name> <string>
- Messages that have a header with the specified
- field-name (as defined in [RFC-822]) and that
- contains the specified string in the [RFC-822]
- field-body.
- KEYWORD <flag> Messages with the specified keyword set.
- LARGER <n> Messages with an RFC822.SIZE larger than the
- specified number of octets.
- NEW Messages that have the Recent flag set but not the
- Seen flag. This is functionally equivalent to
- "(RECENT UNSEEN)".
- Crispin [Page 27]
- RFC 1730 IMAP4 December 1994
- NOT <search-key>
- Messages that do not match the specified search
- key.
- OLD Messages that do not have the Recent flag set.
- This is functionally equivalent to "NOT RECENT" (as
- opposed to "NOT NEW").
- ON <date> Messages whose internal date is within the
- specified date.
- OR <search-key1> <search-key2>
- Messages that match either search key.
- RECENT Messages that have the Recent flag set.
- SEEN Messages that have the Seen flag set.
- SENTBEFORE <date>
- Messages whose [RFC-822] Date: header is earlier
- than the specified date.
- SENTON <date> Messages whose [RFC-822] Date: header is within the
- specified date.
- SENTSINCE <date>
- Messages whose [RFC-822] Date: header is within or
- later than the specified date.
- SINCE <date> Messages whose internal date is within or later
- than the specified date.
- SMALLER <n> Messages with an RFC822.SIZE smaller than the
- specified number of octets.
- SUBJECT <string>
- Messages that contain the specified string in the
- envelope structure's SUBJECT field.
- TEXT <string> Messages that contain the specified string in the
- header or body of the message.
- TO <string> Messages that contain the specified string in the
- envelope structure's TO field.
- UID <message set>
- Messages with unique identifiers corresponding to
- 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 <flag>
- Messages that do not have the specified keyword
- 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 completed
- 6.4.5. FETCH Command
- Arguments: message set
- message data item names
- Data: untagged responses: FETCH
- Result: OK - fetch completed
- NO - fetch error: can't fetch that data
- BAD - command unknown or arguments invalid
- The FETCH command retrieves data associated with a message in the
- mailbox. The data items to be fetched may be either a single atom
- or a parenthesized list. The currently defined data items that
- can be fetched are:
- ALL Macro equivalent to: (FLAGS INTERNALDATE
- RFC822.SIZE ENVELOPE)
- BODY Non-extensible form of BODYSTRUCTURE.
- BODY[<section>]
- The text of a particular body section. The section
- specification is a set of one or more part numbers
- delimited by periods.
- Single-part messages only have a part 1.
- Crispin [Page 29]
- RFC 1730 IMAP4 December 1994
- Multipart messages are assigned consecutive part
- numbers, as they occur in the message. If a
- particular part is of type message or multipart,
- its parts must be indicated by a period followed by
- the part number within that nested multipart part.
- It is not permitted to fetch a multipart part
- itself, only its individual members.
- A part of type MESSAGE and subtype RFC822 also has
- nested parts. These are the parts of the MESSAGE
- part's body. Nested part 0 of a part of type
- MESSAGE and subtype RFC822 is the [RFC-822] header
- of the message.
- Every message has at least one part.
- Here is an example of a complex message
- with its associated section
- specifications:
- 0 ([RFC-822] header of the message)
- MULTIPART/MIXED
- 1 TEXT/PLAIN
- 2 APPLICATION/OCTET-STREAM
- 3 MESSAGE/RFC822
- 3.0 ([RFC-822] header of the message)
- 3.1 TEXT/PLAIN
- 3.2 APPLICATION/OCTET-STREAM
- MULTIPART/MIXED
- 4.1 IMAGE/GIF
- 4.2 MESSAGE/RFC822
- 4.2.0 ([RFC-822] header of the message)
- 4.2.1 TEXT/PLAIN
- MULTIPART/ALTERNATIVE
- 4.2.2.1 TEXT/PLAIN
- 4.2.2.2 TEXT/RICHTEXT
- Note that there is no section
- specification for the Multi-part parts
- (no section 4 or 4.2.2).
- The Seen flag is implicitly set; if this causes
- the flags to change they should be included as part
- of the fetch responses.
- BODY.PEEK[<section>]
- An alternate form of BODY[section] that does not
- implicitly set the Seen flag.
- Crispin [Page 30]
- RFC 1730 IMAP4 December 1994
- BODYSTRUCTURE The [MIME-1] body structure of the message. This
- is computed by the server by parsing the [MIME-1]
- header lines.
- ENVELOPE The envelope structure of the message. This is
- computed by the server by parsing the [RFC-822]
- header into the component parts, defaulting various
- fields as necessary.
- FAST Macro equivalent to: (FLAGS INTERNALDATE
- RFC822.SIZE)
- FLAGS The flags that are set for this message.
- FULL Macro equivalent to: (FLAGS INTERNALDATE
- RFC822.SIZE ENVELOPE BODY)
- INTERNALDATE The date and time of final delivery of the message
- as defined by RFC 821.
- RFC822 The message in [RFC-822] format. The Seen flag is
- implicitly set; if this causes the flags to change
- they should be included as part of the fetch
- responses. This is the concatenation of
- RFC822.HEADER and RFC822.TEXT.
- RFC822.PEEK An alternate form of RFC822 that does not
- implicitly set the Seen flag.
- RFC822.HEADER The [RFC-822] format header of the message as
- stored on the server including the delimiting blank
- line between the header and the body.
- RFC822.HEADER.LINES <header_list>
- All header lines (including continuation lines) of
- the [RFC-822] format header of the message with a
- field-name (as defined in [RFC-822]) that matches
- any of the strings in header_list. The matching is
- case-insensitive but otherwise exact. The
- delimiting blank line between the header and the
- body is always included.
- Crispin [Page 31]
- RFC 1730 IMAP4 December 1994
- RFC822.HEADER.LINES.NOT <header_list>
- All header lines (including continuation lines) of
- the [RFC-822] format header of the message with a
- field-name (as defined in [RFC-822]) that does not
- match any of the strings in header_list. The
- matching is case-insensitive but otherwise exact.
- The delimiting blank line between the header and
- the body is always included.
- RFC822.SIZE The number of octets in the message, as expressed
- in [RFC-822] format.
- RFC822.TEXT The text body of the message, omitting the
- [RFC-822] header. The Seen flag is implicitly
- set; if this causes the flags to change they should
- be included as part of the fetch responses.
- RFC822.TEXT.PEEK
- An alternate form of RFC822.TEXT that does not
- 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 completed
- 6.4.6. PARTIAL Command
- Arguments: message sequence number
- message data item name
- position of first octet
- number of octets
- Data: untagged responses: FETCH
- Result: OK - partial completed
- NO - partial error: can't fetch that data
- BAD - command unknown or arguments invalid
- The PARTIAL command is equivalent to the associated FETCH command,
- with the added functionality that only the specified number of
- octets, beginning at the specified starting octet, are returned.
- Only a single message can be fetched at a time. The first octet
- Crispin [Page 32]
- RFC 1730 IMAP4 December 1994
- of a message, and hence the minimum for the starting octet, is
- octet 1.
- The following FETCH items are valid data for PARTIAL: RFC822,
- RFC822.HEADER, RFC822.TEXT, BODY[section], as well as any .PEEK
- forms of these.
- Any partial fetch that attempts to read beyond the end of the text
- is truncated as appropriate. If the starting octet is beyond the
- end of the text, an empty string is returned.
- The data are returned with the FETCH response. There is no
- indication of the range of the partial data in this response. It
- is not possible to stream multiple PARTIAL commands of the same
- data item without processing and synchronizing at each step, since
- streamed commands may be executed out of order.
- There is no requirement that partial fetches follow any sequence.
- For example, if a partial fetch of octets 1 through 10000 breaks
- in an awkward place for BASE64 decoding, it is permitted to
- continue with a partial fetch of 9987 through 19987, etc.
- The handling of the Seen flag is the same as in the associated
- FETCH command.
- Example: C: A005 PARTIAL 4 RFC822 1 1024
- S: * 1 FETCH (RFC822 {1024}
- S: Return-Path: <gray@cac.washington.edu>
- S: ...
- S: ......... FLAGS (Seen))
- S: A005 OK PARTIAL completed
- 6.4.7. STORE Command
- Arguments: message set
- message data item name
- value for message data item
- Data: untagged responses: FETCH
- Result: OK - store completed
- NO - store error: can't store that data
- BAD - command unknown or arguments invalid
- The STORE command alters data associated with a message in the
- mailbox. Normally, STORE will return the updated value of the
- data with an untagged FETCH response. A suffix of ".SILENT" in
- Crispin [Page 33]
- RFC 1730 IMAP4 December 1994
- the data item name prevents the untagged FETCH, and the server
- should assume that the client has determined the updated value
- itself or does not care about the updated value.
- The currently defined data items that can be stored are:
- FLAGS <flag list>
- Replace the flags for the message with the
- argument. The new value of the flags are returned
- as if a FETCH of those flags was done.
- FLAGS.SILENT <flag list>
- Equivalent to FLAGS, but without returning a new
- value.
- +FLAGS <flag list>
- Add the argument to the flags for the message. The
- new value of the flags are returned as if a FETCH
- of those flags was done.
- +FLAGS.SILENT <flag list>
- Equivalent to +FLAGS, but without returning a new
- value.
- -FLAGS <flag list>
- Remove the argument from the flags for the message.
- The new value of the flags are returned as if a
- FETCH of those flags was done.
- -FLAGS.SILENT <flag list>
- Equivalent to -FLAGS, but without returning a new
- value.
- Example: C: A003 STORE 2:4 +FLAGS (Deleted)
- S: * 2 FETCH FLAGS (Deleted Seen)
- S: * 3 FETCH FLAGS (Deleted)
- S: * 4 FETCH FLAGS (Deleted Flagged Seen)
- S: A003 OK STORE completed
- Crispin [Page 34]
- RFC 1730 IMAP4 December 1994
- 6.4.8. COPY Command
- Arguments: message set
- mailbox name
- Data: no specific data for this command
- Result: OK - copy completed
- NO - copy error: can't copy those messages or to that
- name
- BAD - command unknown or arguments invalid
- The COPY command copies the specified message(s) to the specified
- destination mailbox. The flags and internal date of the
- message(s) SHOULD be preserved in the copy.
- If the destination mailbox does not exist, a server SHOULD return
- an error. It SHOULD NOT automatically create the mailbox. Unless
- it is certain that the destination mailbox can not be created, the
- server MUST send the response code "[TRYCREATE]" as the prefix of
- the text of the tagged NO response. This gives a hint to the
- client that it can attempt a CREATE command and retry the COPY if
- the CREATE is successful.
- If the COPY command is unsuccessful for any reason, server
- implementations MUST restore the destination mailbox to its state