7. Server Responses Server responses are in three forms: status responses, server data, and command continuation request. The information contained in a server response, identified by "Contents:" in the response descriptions below, is described by function, not by syntax. The precise syntax of server responses is described in the Formal Syntax section. The client MUST be prepared to accept any response at all times.
Status responses can be tagged or untagged. Tagged status responses indicate the completion result (OK, NO, or BAD status) of a client command, and have a tag matching the command. Some status responses, and all server data, are untagged. An untagged response is indicated by the token "*" instead of a tag. Untagged status responses indicate server greeting, or server status that does not indicate the completion of a command (for example, an impending system shutdown alert). For historical reasons, untagged server data responses are also called "unsolicited data", although strictly speaking only unilateral server data is truly "unsolicited". Certain server data MUST be recorded by the client when it is received; this is noted in the description of that data. Such data conveys critical information which affects the interpretation of all subsequent commands and responses (e.g. updates reflecting the creation or destruction of messages). Other server data SHOULD be recorded for later reference; if the client does not need to record the data, or if recording the data has no obvious purpose (e.g. a SEARCH response when no SEARCH command is in progress), the data SHOULD be ignored. An example of unilateral untagged server data occurs when the IMAP connection is in selected state. In selected state, the server checks the mailbox for new messages as part of command execution. Normally, this is part of the execution of every command; hence, a NOOP command suffices to check for new messages. If new messages are found, the server sends untagged EXISTS and RECENT responses reflecting the new size of the mailbox. Server implementations that offer multiple simultaneous access to the same mailbox SHOULD also send appropriate unilateral untagged FETCH and EXPUNGE responses if another agent changes the state of any message flags or expunges any messages. Command continuation request responses use the token "+" instead of a tag. These responses are sent by the server to indicate acceptance of an incomplete client command and readiness for the remainder of the command. 7.1. Server Responses - Status Responses Status responses are OK, NO, BAD, PREAUTH and BYE. OK, NO, and BAD may be tagged or untagged. PREAUTH and BYE are always untagged. Status responses MAY include an OPTIONAL "response code". A response code consists of data inside square brackets in the form of an atom, possibly followed by a space and arguments. The response code
contains additional information or status codes for client software beyond the OK/NO/BAD condition, and are defined when there is a specific action that a client can take based upon the additional information. The currently defined response codes are: ALERT The human-readable text contains a special alert that MUST be presented to the user in a fashion that calls the user's attention to the message. NEWNAME Followed by a mailbox name and a new mailbox name. A SELECT or EXAMINE is failing because the target mailbox name no longer exists because it was renamed to the new mailbox name. This is a hint to the client that the operation can succeed if the SELECT or EXAMINE is reissued with the new mailbox name. PARSE The human-readable text represents an error in parsing the [RFC-822] header or [MIME-IMB] headers of a message in the mailbox. PERMANENTFLAGS Followed by a parenthesized list of flags, indicates which of the known flags that the client can change permanently. Any flags that are in the FLAGS untagged response, but not the PERMANENTFLAGS list, can not be set permanently. If the client attempts to STORE a flag that is not in the PERMANENTFLAGS list, the server will either reject it with a NO reply or store the state for the remainder of the current session only. The PERMANENTFLAGS list can also include the special flag \*, which indicates that it is possible to create new keywords by attempting to store those flags in the mailbox. READ-ONLY The mailbox is selected read-only, or its access while selected has changed from read-write to read-only. READ-WRITE The mailbox is selected read-write, or its access while selected has changed from read-only to read-write.
TRYCREATE An APPEND or COPY attempt is failing because the target mailbox does not exist (as opposed to some other reason). This is a hint to the client that the operation can succeed if the mailbox is first created by the CREATE command. UIDVALIDITY Followed by a decimal number, indicates the unique identifier validity value. UNSEEN Followed by a decimal number, indicates the number of the first message without the \Seen flag set. Additional response codes defined by particular client or server implementations SHOULD be prefixed with an "X" until they are added to a revision of this protocol. Client implementations SHOULD ignore response codes that they do not recognize. 7.1.1. OK Response Contents: OPTIONAL response code human-readable text The OK response indicates an information message from the server. When tagged, it indicates successful completion of the associated command. The human-readable text MAY be presented to the user as an information message. The untagged form indicates an information-only message; the nature of the information MAY be indicated by a response code. The untagged form is also used as one of three possible greetings at connection startup. It indicates that the connection is not yet authenticated and that a LOGIN command is needed. Example: S: * OK IMAP4rev1 server ready C: A001 LOGIN fred blurdybloop S: * OK [ALERT] System shutdown in 10 minutes S: A001 OK LOGIN Completed 7.1.2. NO Response Contents: OPTIONAL response code human-readable text The NO response indicates an operational error message from the server. When tagged, it indicates unsuccessful completion of the associated command. The untagged form indicates a warning; the command can still complete successfully. The human-readable text describes the condition.
Example: C: A222 COPY 1:2 owatagusiam S: * NO Disk is 98% full, please delete unnecessary data S: A222 OK COPY completed C: A223 COPY 3:200 blurdybloop S: * NO Disk is 98% full, please delete unnecessary data S: * NO Disk is 99% full, please delete unnecessary data S: A223 NO COPY failed: disk is full 7.1.3. BAD Response Contents: OPTIONAL response code human-readable text The BAD response indicates an error message from the server. When tagged, it reports a protocol-level error in the client's command; the tag indicates the command that caused the error. The untagged form indicates a protocol-level error for which the associated command can not be determined; it can also indicate an internal server failure. The human-readable text describes the condition. Example: C: ...very long command line... S: * BAD Command line too long C: ...empty line... S: * BAD Empty command line C: A443 EXPUNGE S: * BAD Disk crash, attempting salvage to a new disk! S: * OK Salvage successful, no data lost S: A443 OK Expunge completed 7.1.4. PREAUTH Response Contents: OPTIONAL response code human-readable text The PREAUTH response is always untagged, and is one of three possible greetings at connection startup. It indicates that the connection has already been authenticated by external means and thus no LOGIN command is needed. Example: S: * PREAUTH IMAP4rev1 server logged in as Smith 7.1.5. BYE Response Contents: OPTIONAL response code human-readable text
The BYE response is always untagged, and indicates that the server is about to close the connection. The human-readable text MAY be displayed to the user in a status report by the client. The BYE response is sent under one of four conditions: 1) as part of a normal logout sequence. The server will close the connection after sending the tagged OK response to the LOGOUT command. 2) as a panic shutdown announcement. The server closes the connection immediately. 3) as an announcement of an inactivity autologout. The server closes the connection immediately. 4) as one of three possible greetings at connection startup, indicating that the server is not willing to accept a connection from this client. The server closes the connection immediately. The difference between a BYE that occurs as part of a normal LOGOUT sequence (the first case) and a BYE that occurs because of a failure (the other three cases) is that the connection closes immediately in the failure case. Example: S: * BYE Autologout; idle for too long 7.2. Server Responses - Server and Mailbox Status These responses are always untagged. This is how server and mailbox status data are transmitted from the server to the client. Many of these responses typically result from a command with the same name. 7.2.1. CAPABILITY Response Contents: capability listing The CAPABILITY response occurs as a result of a CAPABILITY command. The capability listing contains a space-separated listing of capability names that the server supports. The capability listing MUST include the atom "IMAP4rev1". A capability name which begins with "AUTH=" indicates that the server supports that particular authentication mechanism.
Other capability names indicate that the server supports an extension, revision, or amendment to the IMAP4rev1 protocol. Server responses MUST conform to this document until the client issues a command that uses the associated capability. Capability names MUST either begin with "X" or be standard or standards-track IMAP4rev1 extensions, revisions, or amendments registered with IANA. A server MUST NOT offer unregistered or non-standard capability names, unless such names are prefixed with an "X". Client implementations SHOULD NOT require any capability name other than "IMAP4rev1", and MUST ignore any unknown capability names. Example: S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN 7.2.2. LIST Response Contents: name attributes hierarchy delimiter name The LIST response occurs as a result of a LIST command. It returns a single name that matches the LIST specification. There can be multiple LIST responses for a single LIST command. Four name attributes are defined: \Noinferiors It is not possible for any child levels of hierarchy to exist under this name; no child levels exist now and none can be created in the future. \Noselect It is not possible to use this name as a selectable mailbox. \Marked The mailbox has been marked "interesting" by the server; the mailbox probably contains messages that have been added since the last time the mailbox was selected. \Unmarked The mailbox does not contain any additional messages since the last time the mailbox was selected. If it is not feasible for the server to determine whether the mailbox is "interesting" or not, or if the name is a \Noselect name, the server SHOULD NOT send either \Marked or \Unmarked.
The hierarchy delimiter is a character used to delimit levels of hierarchy in a mailbox name. A client can use it to create child mailboxes, and to search higher or lower levels of naming hierarchy. All children of a top-level hierarchy node MUST use the same separator character. A NIL hierarchy delimiter means that no hierarchy exists; the name is a "flat" name. The name represents an unambiguous left-to-right hierarchy, and MUST be valid for use as a reference in LIST and LSUB commands. Unless \Noselect is indicated, the name MUST also be valid as an argument for commands, such as SELECT, that accept mailbox names. Example: S: * LIST (\Noselect) "/" ~/Mail/foo 7.2.3. LSUB Response Contents: name attributes hierarchy delimiter name The LSUB response occurs as a result of an LSUB command. It returns a single name that matches the LSUB specification. There can be multiple LSUB responses for a single LSUB command. The data is identical in format to the LIST response. Example: S: * LSUB () "." #news.comp.mail.misc 7.2.4 STATUS Response Contents: name status parenthesized list The STATUS response occurs as a result of an STATUS command. It returns the mailbox name that matches the STATUS specification and the requested mailbox status information. Example: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) 7.2.5. SEARCH Response Contents: zero or more numbers
The SEARCH response occurs as a result of a SEARCH or UID SEARCH command. The number(s) refer to those messages that match the search criteria. For SEARCH, these are message sequence numbers; for UID SEARCH, these are unique identifiers. Each number is delimited by a space. Example: S: * SEARCH 2 3 6 7.2.6. FLAGS Response Contents: flag parenthesized list The FLAGS response occurs as a result of a SELECT or EXAMINE command. The flag parenthesized list identifies the flags (at a minimum, the system-defined flags) that are applicable for this mailbox. Flags other than the system flags can also exist, depending on server implementation. The update from the FLAGS response MUST be recorded by the client. Example: S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) 7.3. Server Responses - Mailbox Size These responses are always untagged. This is how changes in the size of the mailbox are trasnmitted from the server to the client. Immediately following the "*" token is a number that represents a message count. 7.3.1. EXISTS Response Contents: none The EXISTS response reports the number of messages in the mailbox. This response occurs as a result of a SELECT or EXAMINE command, and if the size of the mailbox changes (e.g. new mail). The update from the EXISTS response MUST be recorded by the client. Example: S: * 23 EXISTS
7.3.2. RECENT Response Contents: none The RECENT response reports the number of messages with the \Recent flag set. This response occurs as a result of a SELECT or EXAMINE command, and if the size of the mailbox changes (e.g. new mail). Note: It is not guaranteed that the message sequence numbers of recent messages will be a contiguous range of the highest n messages in the mailbox (where n is the value reported by the RECENT response). Examples of situations in which this is not the case are: multiple clients having the same mailbox open (the first session to be notified will see it as recent, others will probably see it as non-recent), and when the mailbox is re-ordered by a non-IMAP agent. The only reliable way to identify recent messages is to look at message flags to see which have the \Recent flag set, or to do a SEARCH RECENT. The update from the RECENT response MUST be recorded by the client. Example: S: * 5 RECENT 7.4. Server Responses - Message Status These responses are always untagged. This is how message data are transmitted from the server to the client, often as a result of a command with the same name. Immediately following the "*" token is a number that represents a message sequence number. 7.4.1. EXPUNGE Response Contents: none The EXPUNGE response reports that the specified message sequence number has been permanently removed from the mailbox. The message sequence number for each successive message in the mailbox is immediately decremented by 1, and this decrement is reflected in message sequence numbers in subsequent responses (including other untagged EXPUNGE responses). As a result of the immediate decrement rule, message sequence numbers that appear in a set of successive EXPUNGE responses depend upon whether the messages are removed starting from lower
numbers to higher numbers, or from higher numbers to lower numbers. For example, if the last 5 messages in a 9-message mailbox are expunged; a "lower to higher" server will send five untagged EXPUNGE responses for message sequence number 5, whereas a "higher to lower server" will send successive untagged EXPUNGE responses for message sequence numbers 9, 8, 7, 6, and 5. An EXPUNGE response MUST NOT be sent when no command is in progress; nor while responding to a FETCH, STORE, or SEARCH command. This rule is necessary to prevent a loss of synchronization of message sequence numbers between client and server. The update from the EXPUNGE response MUST be recorded by the client. Example: S: * 44 EXPUNGE 7.4.2. FETCH Response Contents: message data The FETCH response returns data about a message to the client. The data are pairs of data item names and their values in parentheses. This response occurs as the result of a FETCH or STORE command, as well as by unilateral server decision (e.g. flag updates). The current data items are: BODY A form of BODYSTRUCTURE without extension data. BODY[<section>]<<origin_octet>> A string expressing the body contents of the specified section. The string SHOULD be interpreted by the client according to the content transfer encoding, body type, and subtype. If the origin octet is specified, this string is a substring of the entire body contents, starting at that origin octet. This means that BODY[]<0> MAY be truncated, but BODY[] is NEVER truncated. 8-bit textual data is permitted if a [CHARSET] identifier is part of the body parameter parenthesized list for this section. Note that headers (part specifiers HEADER or MIME, or the header portion of a MESSAGE/RFC822 part), MUST be
7-bit; 8-bit characters are not permitted in headers. Note also that the blank line at the end of the header is always included in header data. Non-textual data such as binary data MUST be transfer encoded into a textual form such as BASE64 prior to being sent to the client. To derive the original binary data, the client MUST decode the transfer encoded string. BODYSTRUCTURE A parenthesized list that describes the [MIME-IMB] body structure of a message. This is computed by the server by parsing the [MIME-IMB] header fields, defaulting various fields as necessary. For example, a simple text message of 48 lines and 2279 octets can have a body structure of: ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 2279 48) Multiple parts are indicated by parenthesis nesting. Instead of a body type as the first element of the parenthesized list there is a nested body. The second element of the parenthesized list is the multipart subtype (mixed, digest, parallel, alternative, etc.). For example, a two part message consisting of a text and a BASE645-encoded text attachment can have a body structure of: (("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 1152 23)("TEXT" "PLAIN" ("CHARSET" "US-ASCII" "NAME" "cc.diff") "<960723163407.20117h@cac.washington.edu>" "Compiler diff" "BASE64" 4554 73) "MIXED")) Extension data follows the multipart subtype. Extension data is never returned with the BODY fetch, but can be returned with a BODYSTRUCTURE fetch. Extension data, if present, MUST be in the defined order. The extension data of a multipart body part are in the following order: body parameter parenthesized list A parenthesized list of attribute/value pairs [e.g. ("foo" "bar" "baz" "rag") where "bar" is the value of "foo" and "rag" is the value of
"baz"] as defined in [MIME-IMB]. body disposition A parenthesized list, consisting of a disposition type string followed by a parenthesized list of disposition attribute/value pairs. The disposition type and attribute names will be defined in a future standards-track revision to [DISPOSITION]. body language A string or parenthesized list giving the body language value as defined in [LANGUAGE-TAGS]. Any following extension data are not yet defined in this version of the protocol. Such extension data can consist of zero or more NILs, strings, numbers, or potentially nested parenthesized lists of such data. Client implementations that do a BODYSTRUCTURE fetch MUST be prepared to accept such extension data. Server implementations MUST NOT send such extension data until it has been defined by a revision of this protocol. The basic fields of a non-multipart body part are in the following order: body type A string giving the content media type name as defined in [MIME-IMB]. body subtype A string giving the content subtype name as defined in [MIME-IMB]. body parameter parenthesized list A parenthesized list of attribute/value pairs [e.g. ("foo" "bar" "baz" "rag") where "bar" is the value of "foo" and "rag" is the value of "baz"] as defined in [MIME-IMB]. body id A string giving the content id as defined in [MIME-IMB]. body description A string giving the content description as defined in [MIME-IMB].
body encoding A string giving the content transfer encoding as defined in [MIME-IMB]. body size A number giving the size of the body in octets. Note that this size is the size in its transfer encoding and not the resulting size after any decoding. A body type of type MESSAGE and subtype RFC822 contains, immediately after the basic fields, the envelope structure, body structure, and size in text lines of the encapsulated message. A body type of type TEXT contains, immediately after the basic fields, the size of the body in text lines. Note that this size is the size in its content transfer encoding and not the resulting size after any decoding. Extension data follows the basic fields and the type-specific fields listed above. Extension data is never returned with the BODY fetch, but can be returned with a BODYSTRUCTURE fetch. Extension data, if present, MUST be in the defined order. The extension data of a non-multipart body part are in the following order: body MD5 A string giving the body MD5 value as defined in [MD5]. body disposition A parenthesized list with the same content and function as the body disposition for a multipart body part. body language A string or parenthesized list giving the body language value as defined in [LANGUAGE-TAGS]. Any following extension data are not yet defined in this version of the protocol, and would be as described above under multipart extension data.
ENVELOPE A parenthesized list that describes the envelope structure of a message. This is computed by the server by parsing the [RFC-822] header into the component parts, defaulting various fields as necessary. The fields of the envelope structure are in the following order: date, subject, from, sender, reply-to, to, cc, bcc, in-reply-to, and message-id. The date, subject, in-reply-to, and message-id fields are strings. The from, sender, reply-to, to, cc, and bcc fields are parenthesized lists of address structures. An address structure is a parenthesized list that describes an electronic mail address. The fields of an address structure are in the following order: personal name, [SMTP] at-domain-list (source route), mailbox name, and host name. [RFC-822] group syntax is indicated by a special form of address structure in which the host name field is NIL. If the mailbox name field is also NIL, this is an end of group marker (semi-colon in RFC 822 syntax). If the mailbox name field is non-NIL, this is a start of group marker, and the mailbox name field holds the group name phrase. Any field of an envelope or address structure that is not applicable is presented as NIL. Note that the server MUST default the reply-to and sender fields from the from field; a client is not expected to know to do this. FLAGS A parenthesized list of flags that are set for this message. INTERNALDATE A string representing the internal date of the message. RFC822 Equivalent to BODY[]. RFC822.HEADER Equivalent to BODY.PEEK[HEADER]. RFC822.SIZE A number expressing the [RFC-822] size of the message. RFC822.TEXT Equivalent to BODY[TEXT].
UID A number expressing the unique identifier of the message. Example: S: * 23 FETCH (FLAGS (\Seen) RFC822.SIZE 44827) 7.5. Server Responses - Command Continuation Request The command continuation request response is indicated by a "+" token instead of a tag. This form of response indicates that the server is ready to accept the continuation of a command from the client. The remainder of this response is a line of text. This response is used in the AUTHORIZATION command to transmit server data to the client, and request additional client data. This response is also used if an argument to any command is a literal. The client is not permitted to send the octets of the literal unless the server indicates that it expects it. This permits the server to process commands and reject errors on a line-by-line basis. The remainder of the command, including the CRLF that terminates a command, follows the octets of the literal. If there are any additional command arguments the literal octets are followed by a space and those arguments. Example: C: A001 LOGIN {11} S: + Ready for additional command text C: FRED FOOBAR {7} S: + Ready for additional command text C: fat man S: A001 OK LOGIN completed C: A044 BLURDYBLOOP {102856} S: A044 BAD No such command as "BLURDYBLOOP" 8. Sample IMAP4rev1 connection The following is a transcript of an IMAP4rev1 connection. A long line in this sample is broken for editorial clarity. S: * OK IMAP4rev1 Service Ready C: a001 login mrc secret S: a001 OK LOGIN completed C: a002 select inbox S: * 18 EXISTS S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) S: * 2 RECENT S: * OK [UNSEEN 17] Message 17 is the first unseen message S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: a002 OK [READ-WRITE] SELECT completed C: a003 fetch 12 full S: * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700" RFC822.SIZE 4286 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)" "IMAP4rev1 WG mtg summary and minutes" (("Terry Gray" NIL "gray" "cac.washington.edu")) (("Terry Gray" NIL "gray" "cac.washington.edu")) (("Terry Gray" NIL "gray" "cac.washington.edu")) ((NIL NIL "imap" "cac.washington.edu")) ((NIL NIL "minutes" "CNRI.Reston.VA.US") ("John Klensin" NIL "KLENSIN" "INFOODS.MIT.EDU")) NIL NIL "<B27397-0100000@cac.washington.edu>") BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92)) S: a003 OK FETCH completed C: a004 fetch 12 body[header] S: * 12 FETCH (BODY[HEADER] {350} S: Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT) S: From: Terry Gray <gray@cac.washington.edu> S: Subject: IMAP4rev1 WG mtg summary and minutes S: To: imap@cac.washington.edu S: cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@INFOODS.MIT.EDU> S: Message-Id: <B27397-0100000@cac.washington.edu> S: MIME-Version: 1.0 S: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII S: S: ) S: a004 OK FETCH completed C: a005 store 12 +flags \deleted S: * 12 FETCH (FLAGS (\Seen \Deleted)) S: a005 OK +FLAGS completed C: a006 logout S: * BYE IMAP4rev1 server terminating connection S: a006 OK LOGOUT completed 9. Formal Syntax The following syntax specification uses the augmented Backus-Naur Form (BNF) notation as specified in [RFC-822] with one exception; the delimiter used with the "#" construct is a single space (SPACE) and not one or more commas. In the case of alternative or optional rules in which a later rule overlaps an earlier rule, the rule which is listed earlier MUST take priority. For example, "\Seen" when parsed as a flag is the \Seen flag name and not a flag_extension, even though "\Seen" could be parsed as a flag_extension. Some, but not all, instances of this rule are noted below.
Except as noted otherwise, all alphabetic characters are case- insensitive. The use of upper or lower case characters to define token strings is for editorial clarity only. Implementations MUST accept these strings in a case-insensitive fashion. address ::= "(" addr_name SPACE addr_adl SPACE addr_mailbox SPACE addr_host ")" addr_adl ::= nstring ;; Holds route from [RFC-822] route-addr if ;; non-NIL addr_host ::= nstring ;; NIL indicates [RFC-822] group syntax. ;; Otherwise, holds [RFC-822] domain name addr_mailbox ::= nstring ;; NIL indicates end of [RFC-822] group; if ;; non-NIL and addr_host is NIL, holds ;; [RFC-822] group name. ;; Otherwise, holds [RFC-822] local-part addr_name ::= nstring ;; Holds phrase from [RFC-822] mailbox if ;; non-NIL alpha ::= "A" / "B" / "C" / "D" / "E" / "F" / "G" / "H" / "I" / "J" / "K" / "L" / "M" / "N" / "O" / "P" / "Q" / "R" / "S" / "T" / "U" / "V" / "W" / "X" / "Y" / "Z" / "a" / "b" / "c" / "d" / "e" / "f" / "g" / "h" / "i" / "j" / "k" / "l" / "m" / "n" / "o" / "p" / "q" / "r" / "s" / "t" / "u" / "v" / "w" / "x" / "y" / "z" ;; Case-sensitive append ::= "APPEND" SPACE mailbox [SPACE flag_list] [SPACE date_time] SPACE literal astring ::= atom / string atom ::= 1*ATOM_CHAR ATOM_CHAR ::= <any CHAR except atom_specials> atom_specials ::= "(" / ")" / "{" / SPACE / CTL / list_wildcards / quoted_specials
authenticate ::= "AUTHENTICATE" SPACE auth_type *(CRLF base64) auth_type ::= atom ;; Defined by [IMAP-AUTH] base64 ::= *(4base64_char) [base64_terminal] base64_char ::= alpha / digit / "+" / "/" base64_terminal ::= (2base64_char "==") / (3base64_char "=") body ::= "(" body_type_1part / body_type_mpart ")" body_extension ::= nstring / number / "(" 1#body_extension ")" ;; Future expansion. Client implementations ;; MUST accept body_extension fields. Server ;; implementations MUST NOT generate ;; body_extension fields except as defined by ;; future standard or standards-track ;; revisions of this specification. body_ext_1part ::= body_fld_md5 [SPACE body_fld_dsp [SPACE body_fld_lang [SPACE 1#body_extension]]] ;; MUST NOT be returned on non-extensible ;; "BODY" fetch body_ext_mpart ::= body_fld_param [SPACE body_fld_dsp SPACE body_fld_lang [SPACE 1#body_extension]] ;; MUST NOT be returned on non-extensible ;; "BODY" fetch body_fields ::= body_fld_param SPACE body_fld_id SPACE body_fld_desc SPACE body_fld_enc SPACE body_fld_octets body_fld_desc ::= nstring body_fld_dsp ::= "(" string SPACE body_fld_param ")" / nil body_fld_enc ::= (<"> ("7BIT" / "8BIT" / "BINARY" / "BASE64"/ "QUOTED-PRINTABLE") <">) / string body_fld_id ::= nstring body_fld_lang ::= nstring / "(" 1#string ")"
body_fld_lines ::= number body_fld_md5 ::= nstring body_fld_octets ::= number body_fld_param ::= "(" 1#(string SPACE string) ")" / nil body_type_1part ::= (body_type_basic / body_type_msg / body_type_text) [SPACE body_ext_1part] body_type_basic ::= media_basic SPACE body_fields ;; MESSAGE subtype MUST NOT be "RFC822" body_type_mpart ::= 1*body SPACE media_subtype [SPACE body_ext_mpart] body_type_msg ::= media_message SPACE body_fields SPACE envelope SPACE body SPACE body_fld_lines body_type_text ::= media_text SPACE body_fields SPACE body_fld_lines capability ::= "AUTH=" auth_type / atom ;; New capabilities MUST begin with "X" or be ;; registered with IANA as standard or ;; standards-track capability_data ::= "CAPABILITY" SPACE [1#capability SPACE] "IMAP4rev1" [SPACE 1#capability] ;; IMAP4rev1 servers which offer RFC 1730 ;; compatibility MUST list "IMAP4" as the first ;; capability. CHAR ::= <any 7-bit US-ASCII character except NUL, 0x01 - 0x7f> CHAR8 ::= <any 8-bit octet except NUL, 0x01 - 0xff> command ::= tag SPACE (command_any / command_auth / command_nonauth / command_select) CRLF ;; Modal based on state command_any ::= "CAPABILITY" / "LOGOUT" / "NOOP" / x_command ;; Valid in all states command_auth ::= append / create / delete / examine / list / lsub / rename / select / status / subscribe / unsubscribe ;; Valid only in Authenticated or Selected state
command_nonauth ::= login / authenticate ;; Valid only when in Non-Authenticated state command_select ::= "CHECK" / "CLOSE" / "EXPUNGE" / copy / fetch / store / uid / search ;; Valid only when in Selected state continue_req ::= "+" SPACE (resp_text / base64) copy ::= "COPY" SPACE set SPACE mailbox CR ::= <ASCII CR, carriage return, 0x0D> create ::= "CREATE" SPACE mailbox ;; Use of INBOX gives a NO error CRLF ::= CR LF CTL ::= <any ASCII control character and DEL, 0x00 - 0x1f, 0x7f> date ::= date_text / <"> date_text <"> date_day ::= 1*2digit ;; Day of month date_day_fixed ::= (SPACE digit) / 2digit ;; Fixed-format version of date_day date_month ::= "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec" date_text ::= date_day "-" date_month "-" date_year date_year ::= 4digit date_time ::= <"> date_day_fixed "-" date_month "-" date_year SPACE time SPACE zone <"> delete ::= "DELETE" SPACE mailbox ;; Use of INBOX gives a NO error digit ::= "0" / digit_nz digit_nz ::= "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
envelope ::= "(" env_date SPACE env_subject SPACE env_from SPACE env_sender SPACE env_reply_to SPACE env_to SPACE env_cc SPACE env_bcc SPACE env_in_reply_to SPACE env_message_id ")" env_bcc ::= "(" 1*address ")" / nil env_cc ::= "(" 1*address ")" / nil env_date ::= nstring env_from ::= "(" 1*address ")" / nil env_in_reply_to ::= nstring env_message_id ::= nstring env_reply_to ::= "(" 1*address ")" / nil env_sender ::= "(" 1*address ")" / nil env_subject ::= nstring env_to ::= "(" 1*address ")" / nil examine ::= "EXAMINE" SPACE mailbox fetch ::= "FETCH" SPACE set SPACE ("ALL" / "FULL" / "FAST" / fetch_att / "(" 1#fetch_att ")") fetch_att ::= "ENVELOPE" / "FLAGS" / "INTERNALDATE" / "RFC822" [".HEADER" / ".SIZE" / ".TEXT"] / "BODY" ["STRUCTURE"] / "UID" / "BODY" [".PEEK"] section ["<" number "." nz_number ">"] flag ::= "\Answered" / "\Flagged" / "\Deleted" / "\Seen" / "\Draft" / flag_keyword / flag_extension flag_extension ::= "\" atom ;; Future expansion. Client implementations ;; MUST accept flag_extension flags. Server ;; implementations MUST NOT generate ;; flag_extension flags except as defined by ;; future standard or standards-track ;; revisions of this specification. flag_keyword ::= atom
flag_list ::= "(" #flag ")" greeting ::= "*" SPACE (resp_cond_auth / resp_cond_bye) CRLF header_fld_name ::= astring header_list ::= "(" 1#header_fld_name ")" LF ::= <ASCII LF, line feed, 0x0A> list ::= "LIST" SPACE mailbox SPACE list_mailbox list_mailbox ::= 1*(ATOM_CHAR / list_wildcards) / string list_wildcards ::= "%" / "*" literal ::= "{" number "}" CRLF *CHAR8 ;; Number represents the number of CHAR8 octets login ::= "LOGIN" SPACE userid SPACE password lsub ::= "LSUB" SPACE mailbox SPACE list_mailbox mailbox ::= "INBOX" / astring ;; INBOX is case-insensitive. All case variants of ;; INBOX (e.g. "iNbOx") MUST be interpreted as INBOX ;; not as an astring. Refer to section 5.1 for ;; further semantic details of mailbox names. mailbox_data ::= "FLAGS" SPACE flag_list / "LIST" SPACE mailbox_list / "LSUB" SPACE mailbox_list / "MAILBOX" SPACE text / "SEARCH" [SPACE 1#nz_number] / "STATUS" SPACE mailbox SPACE "(" #<status_att number ")" / number SPACE "EXISTS" / number SPACE "RECENT" mailbox_list ::= "(" #("\Marked" / "\Noinferiors" / "\Noselect" / "\Unmarked" / flag_extension) ")" SPACE (<"> QUOTED_CHAR <"> / nil) SPACE mailbox media_basic ::= (<"> ("APPLICATION" / "AUDIO" / "IMAGE" / "MESSAGE" / "VIDEO") <">) / string) SPACE media_subtype ;; Defined in [MIME-IMT] media_message ::= <"> "MESSAGE" <"> SPACE <"> "RFC822" <">
;; Defined in [MIME-IMT] media_subtype ::= string ;; Defined in [MIME-IMT] media_text ::= <"> "TEXT" <"> SPACE media_subtype ;; Defined in [MIME-IMT] message_data ::= nz_number SPACE ("EXPUNGE" / ("FETCH" SPACE msg_att)) msg_att ::= "(" 1#("ENVELOPE" SPACE envelope / "FLAGS" SPACE "(" #(flag / "\Recent") ")" / "INTERNALDATE" SPACE date_time / "RFC822" [".HEADER" / ".TEXT"] SPACE nstring / "RFC822.SIZE" SPACE number / "BODY" ["STRUCTURE"] SPACE body / "BODY" section ["<" number ">"] SPACE nstring / "UID" SPACE uniqueid) ")" nil ::= "NIL" nstring ::= string / nil number ::= 1*digit ;; Unsigned 32-bit integer ;; (0 <= n < 4,294,967,296) nz_number ::= digit_nz *digit ;; Non-zero unsigned 32-bit integer ;; (0 < n < 4,294,967,296) password ::= astring quoted ::= <"> *QUOTED_CHAR <"> QUOTED_CHAR ::= <any TEXT_CHAR except quoted_specials> / "\" quoted_specials quoted_specials ::= <"> / "\" rename ::= "RENAME" SPACE mailbox SPACE mailbox ;; Use of INBOX as a destination gives a NO error response ::= *(continue_req / response_data) response_done response_data ::= "*" SPACE (resp_cond_state / resp_cond_bye / mailbox_data / message_data / capability_data)
CRLF response_done ::= response_tagged / response_fatal response_fatal ::= "*" SPACE resp_cond_bye CRLF ;; Server closes connection immediately response_tagged ::= tag SPACE resp_cond_state CRLF resp_cond_auth ::= ("OK" / "PREAUTH") SPACE resp_text ;; Authentication condition resp_cond_bye ::= "BYE" SPACE resp_text resp_cond_state ::= ("OK" / "NO" / "BAD") SPACE resp_text ;; Status condition resp_text ::= ["[" resp_text_code "]" SPACE] (text_mime2 / text) ;; text SHOULD NOT begin with "[" or "=" resp_text_code ::= "ALERT" / "PARSE" / "PERMANENTFLAGS" SPACE "(" #(flag / "\*") ")" / "READ-ONLY" / "READ-WRITE" / "TRYCREATE" / "UIDVALIDITY" SPACE nz_number / "UNSEEN" SPACE nz_number / atom [SPACE 1*<any TEXT_CHAR except "]">] search ::= "SEARCH" SPACE ["CHARSET" SPACE astring SPACE] 1#search_key ;; [CHARSET] MUST be registered with IANA search_key ::= "ALL" / "ANSWERED" / "BCC" SPACE astring / "BEFORE" SPACE date / "BODY" SPACE astring / "CC" SPACE astring / "DELETED" / "FLAGGED" / "FROM" SPACE astring / "KEYWORD" SPACE flag_keyword / "NEW" / "OLD" / "ON" SPACE date / "RECENT" / "SEEN" / "SINCE" SPACE date / "SUBJECT" SPACE astring / "TEXT" SPACE astring / "TO" SPACE astring / "UNANSWERED" / "UNDELETED" / "UNFLAGGED" / "UNKEYWORD" SPACE flag_keyword / "UNSEEN" / ;; Above this line were in [IMAP2] "DRAFT" / "HEADER" SPACE header_fld_name SPACE astring / "LARGER" SPACE number / "NOT" SPACE search_key / "OR" SPACE search_key SPACE search_key / "SENTBEFORE" SPACE date / "SENTON" SPACE date / "SENTSINCE" SPACE date / "SMALLER" SPACE number /
"UID" SPACE set / "UNDRAFT" / set / "(" 1#search_key ")" section ::= "[" [section_text / (nz_number *["." nz_number] ["." (section_text / "MIME")])] "]" section_text ::= "HEADER" / "HEADER.FIELDS" [".NOT"] SPACE header_list / "TEXT" select ::= "SELECT" SPACE mailbox sequence_num ::= nz_number / "*" ;; * is the largest number in use. For message ;; sequence numbers, it is the number of messages ;; in the mailbox. For unique identifiers, it is ;; the unique identifier of the last message in ;; the mailbox. set ::= sequence_num / (sequence_num ":" sequence_num) / (set "," set) ;; Identifies a set of messages. For message ;; sequence numbers, these are consecutive ;; numbers from 1 to the number of messages in ;; the mailbox ;; Comma delimits individual numbers, colon ;; delimits between two numbers inclusive. ;; Example: 2,4:7,9,12:* is 2,4,5,6,7,9,12,13, ;; 14,15 for a mailbox with 15 messages. SPACE ::= <ASCII SP, space, 0x20> status ::= "STATUS" SPACE mailbox SPACE "(" 1#status_att ")" status_att ::= "MESSAGES" / "RECENT" / "UIDNEXT" / "UIDVALIDITY" / "UNSEEN" store ::= "STORE" SPACE set SPACE store_att_flags store_att_flags ::= (["+" / "-"] "FLAGS" [".SILENT"]) SPACE (flag_list / #flag) string ::= quoted / literal subscribe ::= "SUBSCRIBE" SPACE mailbox tag ::= 1*<any ATOM_CHAR except "+"> text ::= 1*TEXT_CHAR
text_mime2 ::= "=?" <charset> "?" <encoding> "?" <encoded-text> "?=" ;; Syntax defined in [MIME-HDRS] TEXT_CHAR ::= <any CHAR except CR and LF> time ::= 2digit ":" 2digit ":" 2digit ;; Hours minutes seconds uid ::= "UID" SPACE (copy / fetch / search / store) ;; Unique identifiers used instead of message ;; sequence numbers uniqueid ::= nz_number ;; Strictly ascending unsubscribe ::= "UNSUBSCRIBE" SPACE mailbox userid ::= astring x_command ::= "X" atom <experimental command arguments> zone ::= ("+" / "-") 4digit ;; Signed four-digit value of hhmm representing ;; hours and minutes west of Greenwich (that is, ;; (the amount that the given time differs from ;; Universal Time). Subtracting the timezone ;; from the given time will give the UT form. ;; The Universal Time zone is "+0000". 10. Author's Note This document is a revision or rewrite of earlier documents, and supercedes the protocol specification in those documents: RFC 1730, unpublished IMAP2bis.TXT document, RFC 1176, and RFC 1064. 11. Security Considerations IMAP4rev1 protocol transactions, including electronic mail data, are sent in the clear over the network unless privacy protection is negotiated in the AUTHENTICATE command. A server error message for an AUTHENTICATE command which fails due to invalid credentials SHOULD NOT detail why the credentials are invalid. Use of the LOGIN command sends passwords in the clear. This can be avoided by using the AUTHENTICATE command instead.
A server error message for a failing LOGIN command SHOULD NOT specify that the user name, as opposed to the password, is invalid. Additional security considerations are discussed in the section discussing the AUTHENTICATE and LOGIN commands. 12. Author's Address Mark R. Crispin Networks and Distributed Computing University of Washington 4545 15th Aveneue NE Seattle, WA 98105-4527 Phone: (206) 543-5762 EMail: MRC@CAC.Washington.EDU
Appendices A. References [ACAP] Myers, J. "ACAP -- Application Configuration Access Protocol", Work in Progress. [CHARSET] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1700, USC/Information Sciences Institute, October 1994. [DISPOSITION] Troost, R., and Dorner, S., "Communicating Presentation Information in Internet Messages: The Content-Disposition Header", RFC 1806, June 1995. [IMAP-AUTH] Myers, J., "IMAP4 Authentication Mechanism", RFC 1731. Carnegie-Mellon University, December 1994. [IMAP-COMPAT] Crispin, M., "IMAP4 Compatibility with IMAP2bis", RFC 2061, University of Washington, November 1996. [IMAP-DISC] Austein, R., "Synchronization Operations for Disconnected IMAP4 Clients", Work in Progress. [IMAP-HISTORICAL] Crispin, M. "IMAP4 Compatibility with IMAP2 and IMAP2bis", RFC 1732, University of Washington, December 1994. [IMAP-MODEL] Crispin, M., "Distributed Electronic Mail Models in IMAP4", RFC 1733, University of Washington, December 1994. [IMAP-OBSOLETE] Crispin, M., "Internet Message Access Protocol - Obsolete Syntax", RFC 2062, University of Washington, November 1996. [IMAP2] Crispin, M., "Interactive Mail Access Protocol - Version 2", RFC 1176, University of Washington, August 1990. [LANGUAGE-TAGS] Alvestrand, H., "Tags for the Identification of Languages", RFC 1766, March 1995. [MD5] Myers, J., and M. Rose, "The Content-MD5 Header Field", RFC 1864, October 1995. [MIME-IMB] Freed, N., and N. Borenstein, "MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies", RFC 2045, November 1996. [MIME-IMT] Freed, N., and N. Borenstein, "MIME (Multipurpose Internet Mail Extensions) Part Two: Media Types", RFC 2046, November 1996.
[MIME-HDRS] Moore, K., "MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text", RFC 2047, November 1996. [RFC-822] Crocker, D., "Standard for the Format of ARPA Internet Text Messages", STD 11, RFC 822, University of Delaware, August 1982. [SMTP] Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC 821, USC/Information Sciences Institute, August 1982. [UTF-7] Goldsmith, D., and Davis, M., "UTF-7: A Mail-Safe Transformation Format of Unicode", RFC 1642, July 1994. B. Changes from RFC 1730 1) The STATUS command has been added. 2) Clarify in the formal syntax that the "#" construct can never refer to multiple spaces. 3) Obsolete syntax has been moved to a separate document. 4) The PARTIAL command has been obsoleted. 5) The RFC822.HEADER.LINES, RFC822.HEADER.LINES.NOT, RFC822.PEEK, and RFC822.TEXT.PEEK fetch attributes have been obsoleted. 6) The "<" origin "." size ">" suffix for BODY text attributes has been added. 7) The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and TEXT part specifiers have been added. 8) Support for Content-Disposition and Content-Language has been added. 9) The restriction on fetching nested MULTIPART parts has been removed. 10) Body part number 0 has been obsoleted. 11) Server-supported authenticators are now identified by capabilities.
12) The capability that identifies this protocol is now called "IMAP4rev1". A server that provides backwards support for RFC 1730 SHOULD emit the "IMAP4" capability in addition to "IMAP4rev1" in its CAPABILITY response. Because RFC-1730 required "IMAP4" to appear as the first capability, it MUST listed first in the response. 13) A description of the mailbox name namespace convention has been added. 14) A description of the international mailbox name convention has been added. 15) The UID-NEXT and UID-VALIDITY status items are now called UIDNEXT and UIDVALIDITY. This is a change from the IMAP STATUS Work in Progress and not from RFC-1730 16) Add a clarification that a null mailbox name argument to the LIST command returns an untagged LIST response with the hierarchy delimiter and root of the reference argument. 17) Define terms such as "MUST", "SHOULD", and "MUST NOT". 18) Add a section which defines message attributes and more thoroughly details the semantics of message sequence numbers, UIDs, and flags. 19) Add a clarification detailing the circumstances when a client may send multiple commands without waiting for a response, and the circumstances in which ambiguities may result. 20) Add a recommendation on server behavior for DELETE and RENAME when inferior hierarchical names of the given name exist. 21) Add a clarification that a mailbox name may not be unilaterally unsubscribed by the server, even if that mailbox name no longer exists. 22) Add a clarification that LIST should return its results quickly without undue delay. 23) Add a clarification that the date_time argument to APPEND sets the internal date of the message. 24) Add a clarification on APPEND behavior when the target mailbox is the currently selected mailbox.
25) Add a clarification that external changes to flags should be always announced via an untagged FETCH even if the current command is a STORE with the ".SILENT" suffix. 26) Add a clarification that COPY appends to the target mailbox. 27) Add the NEWNAME response code. 28) Rewrite the description of the untagged BYE response to clarify its semantics. 29) Change the reference for the body MD5 to refer to the proper RFC. 30) Clarify that the formal syntax contains rules which may overlap, and that in the event of such an overlap the rule which occurs first takes precedence. 31) Correct the definition of body_fld_param. 32) More formal syntax for capability_data. 33) Clarify that any case variant of "INBOX" must be interpreted as INBOX. 34) Clarify that the human-readable text in resp_text should not begin with "[" or "=". 35) Change MIME references to Draft Standard documents. 36) Clarify \Recent semantics. 37) Additional examples. C. Key Word Index +FLAGS <flag list> (store command data item) ............... 45 +FLAGS.SILENT <flag list> (store command data item) ........ 46 -FLAGS <flag list> (store command data item) ............... 46 -FLAGS.SILENT <flag list> (store command data item) ........ 46 ALERT (response code) ...................................... 50 ALL (fetch item) ........................................... 41 ALL (search key) ........................................... 38 ANSWERED (search key) ...................................... 38 APPEND (command) ........................................... 34 AUTHENTICATE (command) ..................................... 20 BAD (response) ............................................. 52 BCC <string> (search key) .................................. 38 BEFORE <date> (search key) ................................. 39
BODY (fetch item) .......................................... 41 BODY (fetch result) ........................................ 58 BODY <string> (search key) ................................. 39 BODY.PEEK[<section>]<<partial>> (fetch item) ............... 44 BODYSTRUCTURE (fetch item) ................................. 44 BODYSTRUCTURE (fetch result) ............................... 59 BODY[<section>]<<origin_octet>> (fetch result) ............. 58 BODY[<section>]<<partial>> (fetch item) .................... 41 BYE (response) ............................................. 52 Body Structure (message attribute) ......................... 11 CAPABILITY (command) ....................................... 18 CAPABILITY (response) ...................................... 53 CC <string> (search key) ................................... 39 CHECK (command) ............................................ 36 CLOSE (command) ............................................ 36 COPY (command) ............................................. 46 CREATE (command) ........................................... 25 DELETE (command) ........................................... 26 DELETED (search key) ....................................... 39 DRAFT (search key) ......................................... 39 ENVELOPE (fetch item) ...................................... 44 ENVELOPE (fetch result) .................................... 62 EXAMINE (command) .......................................... 24 EXISTS (response) .......................................... 56 EXPUNGE (command) .......................................... 37 EXPUNGE (response) ......................................... 57 Envelope Structure (message attribute) ..................... 11 FAST (fetch item) .......................................... 44 FETCH (command) ............................................ 41 FETCH (response) ........................................... 58 FLAGGED (search key) ....................................... 39 FLAGS (fetch item) ......................................... 44 FLAGS (fetch result) ....................................... 62 FLAGS (response) ........................................... 56 FLAGS <flag list> (store command data item) ................ 45 FLAGS.SILENT <flag list> (store command data item) ......... 45 FROM <string> (search key) ................................. 39 FULL (fetch item) .......................................... 44 Flags (message attribute) .................................. 9 HEADER (part specifier) .................................... 41 HEADER <field-name> <string> (search key) .................. 39 HEADER.FIELDS <header_list> (part specifier) ............... 41 HEADER.FIELDS.NOT <header_list> (part specifier) ........... 41 INTERNALDATE (fetch item) .................................. 44 INTERNALDATE (fetch result) ................................ 62 Internal Date (message attribute) .......................... 10 KEYWORD <flag> (search key) ................................ 39 Keyword (type of flag) ..................................... 10
LARGER <n> (search key) .................................... 39 LIST (command) ............................................. 30 LIST (response) ............................................ 54 LOGIN (command) ............................................ 22 LOGOUT (command) ........................................... 20 LSUB (command) ............................................. 32 LSUB (response) ............................................ 55 MAY (specification requirement term) ....................... 5 MESSAGES (status item) ..................................... 33 MIME (part specifier) ...................................... 42 MUST (specification requirement term) ...................... 4 MUST NOT (specification requirement term) .................. 4 Message Sequence Number (message attribute) ................ 9 NEW (search key) ........................................... 39 NEWNAME (response code) .................................... 50 NO (response) .............................................. 51 NOOP (command) ............................................. 19 NOT <search-key> (search key) .............................. 39 OK (response) .............................................. 51 OLD (search key) ........................................... 39 ON <date> (search key) ..................................... 39 OPTIONAL (specification requirement term) .................. 5 OR <search-key1> <search-key2> (search key) ................ 39 PARSE (response code) ...................................... 50 PERMANENTFLAGS (response code) ............................. 50 PREAUTH (response) ......................................... 52 Permanent Flag (class of flag) ............................. 10 READ-ONLY (response code) .................................. 50 READ-WRITE (response code) ................................. 50 RECENT (response) .......................................... 57 RECENT (search key) ........................................ 39 RECENT (status item) ....................................... 33 RENAME (command) ........................................... 27 REQUIRED (specification requirement term) .................. 4 RFC822 (fetch item) ........................................ 44 RFC822 (fetch result) ...................................... 63 RFC822.HEADER (fetch item) ................................. 44 RFC822.HEADER (fetch result) ............................... 62 RFC822.SIZE (fetch item) ................................... 44 RFC822.SIZE (fetch result) ................................. 62 RFC822.TEXT (fetch item) ................................... 44 RFC822.TEXT (fetch result) ................................. 62 SEARCH (command) ........................................... 37 SEARCH (response) .......................................... 55 SEEN (search key) .......................................... 40 SELECT (command) ........................................... 23 SENTBEFORE <date> (search key) ............................. 40 SENTON <date> (search key) ................................. 40
SENTSINCE <date> (search key) .............................. 40 SHOULD (specification requirement term) .................... 5 SHOULD NOT (specification requirement term) ................ 5 SINCE <date> (search key) .................................. 40 SMALLER <n> (search key) ................................... 40 STATUS (command) ........................................... 33 STATUS (response) .......................................... 55 STORE (command) ............................................ 45 SUBJECT <string> (search key) .............................. 40 SUBSCRIBE (command) ........................................ 29 Session Flag (class of flag) ............................... 10 System Flag (type of flag) ................................. 9 TEXT (part specifier) ...................................... 42 TEXT <string> (search key) ................................. 40 TO <string> (search key) ................................... 40 TRYCREATE (response code) .................................. 51 UID (command) .............................................. 47 UID (fetch item) ........................................... 44 UID (fetch result) ......................................... 63 UID <message set> (search key) ............................. 40 UIDNEXT (status item) ...................................... 33 UIDVALIDITY (response code) ................................ 51 UIDVALIDITY (status item) .................................. 34 UNANSWERED (search key) .................................... 40 UNDELETED (search key) ..................................... 40 UNDRAFT (search key) ....................................... 40 UNFLAGGED (search key) ..................................... 40 UNKEYWORD <flag> (search key) .............................. 40 UNSEEN (response code) ..................................... 51 UNSEEN (search key) ........................................ 40 UNSEEN (status item) ....................................... 34 UNSUBSCRIBE (command) ...................................... 30 Unique Identifier (UID) (message attribute) ................ 7 X<atom> (command) .......................................... 48 [RFC-822] Size (message attribute) ......................... 11 \Answered (system flag) .................................... 9 \Deleted (system flag) ..................................... 9 \Draft (system flag) ....................................... 9 \Flagged (system flag) ..................................... 9 \Marked (mailbox name attribute) ........................... 54 \Noinferiors (mailbox name attribute) ...................... 54 \Noselect (mailbox name attribute) ......................... 54 \Recent (system flag) ...................................... 10 \Seen (system flag) ........................................ 9 \Unmarked (mailbox name attribute) ......................... 54