| < draft-crispin-imap-base-05.txt | draft-crispin-imap-base-06.txt > | |||
|---|---|---|---|---|
| Network Working Group M. Crispin | Network Working Group M. Crispin | |||
| Internet Draft: IMAP4rev1 University of Washington | Internet Draft: IMAP4rev1 University of Washington | |||
| Document: internet-drafts/draft-crispin-imap-base-05.txt August 1996 | Document: internet-drafts/draft-crispin-imap-base-06.txt October 1996 | |||
| INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1 | INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1 | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft. Internet-Drafts are working | This document is an Internet-Draft. Internet-Drafts are working | |||
| documents of the Internet Engineering Task Force (IETF), its areas, | documents of the Internet Engineering Task Force (IETF), its areas, | |||
| and its working groups. Note that other groups may also distribute | and its working groups. Note that other groups may also distribute | |||
| working documents as Internet-Drafts. | working documents as Internet-Drafts. | |||
| skipping to change at page 1, line 31 ¶ | skipping to change at page 1, line 31 ¶ | |||
| To learn the current status of any Internet-Draft, please check the | To learn the current status of any Internet-Draft, please check the | |||
| "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow | "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow | |||
| Directories on ds.internic.net (US East Coast), nic.nordu.net | Directories on ds.internic.net (US East Coast), nic.nordu.net | |||
| (Europe), ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific | (Europe), ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific | |||
| Rim). | Rim). | |||
| A revised version of this draft document will be submitted to the RFC | A revised version of this draft document will be submitted to the RFC | |||
| editor as an Proposed Standard for the Internet Community. | editor as an Proposed Standard for the Internet Community. | |||
| Discussion and suggestions for improvement are requested, and should | Discussion and suggestions for improvement are requested, and should | |||
| be sent to imap@CAC.Washington.EDU. This document will expire before | be sent to imap@CAC.Washington.EDU. This document will expire before | |||
| 31 January 1997. Distribution of this memo is unlimited. | 30 April 1997. Distribution of this memo is unlimited. | |||
| This document is a revision of RFC 1730. Appendix B of this document | This document is a revision of RFC 1730. Appendix B of this document | |||
| describes revisions and changes. | describes revisions and changes. | |||
| Abstract | Abstract | |||
| The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1) | The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1) | |||
| allows a client to access and manipulate electronic mail messages on | allows a client to access and manipulate electronic mail messages on | |||
| a server. IMAP4rev1 permits manipulation of remote message folders, | a server. IMAP4rev1 permits manipulation of remote message folders, | |||
| called "mailboxes", in a way that is functionally equivalent to local | called "mailboxes", in a way that is functionally equivalent to local | |||
| mailboxes. IMAP4rev1 also provides the capability for an offline | mailboxes. IMAP4rev1 also provides the capability for an offline | |||
| client to resynchronize with the server (see also [IMAP-DISC]). | client to resynchronize with the server (see also [IMAP-DISC]). | |||
| IMAP4rev1 includes operations for creating, deleting, and renaming | IMAP4rev1 includes operations for creating, deleting, and renaming | |||
| mailboxes; checking for new messages; permanently removing messages; | mailboxes; checking for new messages; permanently removing messages; | |||
| setting and clearing flags; RFC 822 and MIME parsing; searching; and | setting and clearing flags; RFC 822 and MIME parsing; searching; and | |||
| selective fetching of message attributes, texts, and portions | selective fetching of message attributes, texts, and portions | |||
| thereof. Messages in IMAP4rev1 are accessed by the use of numbers. | thereof. Messages in IMAP4rev1 are accessed by the use of numbers. | |||
| These numbers are either message sequence numbers (relative position | These numbers are either message sequence numbers or unique | |||
| from 1 to the number of messages in the mailbox) or unique | identifiers. | |||
| identifiers (immutable, strictly ascending values assigned to each | ||||
| message, but which are not necessarily contiguous). | ||||
| IMAP4rev1 supports a single server. A mechanism for supporting | IMAP4rev1 supports a single server. A mechanism for accessing | |||
| multiple IMAP4rev1 servers is discussed in [IMSP]. | configuration information to support multiple IMAP4rev1 servers is | |||
| discussed in [ACAP]. | ||||
| IMAP4rev1 does not specify a means of posting mail; this function is | IMAP4rev1 does not specify a means of posting mail; this function is | |||
| handled by a mail transfer protocol such as [SMTP]. | handled by a mail transfer protocol such as [SMTP]. | |||
| IMAP4rev1 is designed to be upwards compatible from the [IMAP2] | IMAP4rev1 is designed to be upwards compatible from the [IMAP2] and | |||
| protocol. Compatibility issues are discussed in [IMAP-COMPAT]. | unpublished IMAP2bis protocols. In the course of the evolution of | |||
| IMAP4rev1, some aspects in the earlier protocol have become obsolete. | ||||
| Obsolete commands, responses, and data formats which an IMAP4rev1 | ||||
| implementation may encounter when used with an earlier implementation | ||||
| are described in [IMAP-OBSOLETE]. | ||||
| Other compatibility issues with IMAP2bis, the most common variant of | ||||
| the earlier protocol, are discussed in [IMAP-COMPAT]. A full | ||||
| discussion of compatibility issues with rare (and presumed extinct) | ||||
| variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is | ||||
| primarily of historical interest. | ||||
| Table of Contents | ||||
| IMAP4rev1 Protocol Specification .................................. 1 | ||||
| 1. How to Read This Document ................................. 1 | ||||
| 1.1. Organization of This Document ............................. 1 | ||||
| 1.2. Conventions Used in This Document ......................... 1 | ||||
| 2. Protocol Overview ......................................... 2 | ||||
| 2.1. Link Level ................................................ 2 | ||||
| 2.2. Commands and Responses .................................... 2 | ||||
| 2.2.1. Client Protocol Sender and Server Protocol Receiver ....... 2 | ||||
| 2.2.2. Server Protocol Sender and Client Protocol Receiver ....... 3 | ||||
| 2.3. Message Attributes ........................................ 4 | ||||
| 2.3.1. Message Numbers ........................................... 4 | ||||
| 2.3.1.1. Unique Identifier (UID) Message Attribute ......... 4 | ||||
| 2.3.1.2. Message Sequence Number Message Attribute ......... 5 | ||||
| 2.3.2. Flags Message Attribute ................................... 6 | ||||
| 2.3.3. Internal Date Message Attribute ........................... 6 | ||||
| 2.3.4. [RFC-822] Size Message Attribute .......................... 7 | ||||
| 2.3.5. Envelope Structure Message Attribute ...................... 7 | ||||
| 2.3.6. Body Structure Message Attribute .......................... 7 | ||||
| 2.4. Message Texts ............................................. 7 | ||||
| 3. State and Flow Diagram .................................... 7 | ||||
| 3.1. Non-Authenticated State ................................... 7 | ||||
| 3.2. Authenticated State ....................................... 8 | ||||
| 3.3. Selected State ............................................ 8 | ||||
| 3.4. Logout State .............................................. 8 | ||||
| 4. Data Formats .............................................. 10 | ||||
| 4.1. Atom ...................................................... 10 | ||||
| 4.2. Number .................................................... 10 | ||||
| 4.3. String .................................................... 10 | ||||
| 4.3.1. 8-bit and Binary Strings .................................. 11 | ||||
| 4.4. Parenthesized List ........................................ 11 | ||||
| 4.5. NIL ....................................................... 11 | ||||
| 5. Operational Considerations ................................ 11 | ||||
| 5.1. Mailbox Naming ............................................ 11 | ||||
| 5.1.1. Mailbox Hierarchy Naming .................................. 12 | ||||
| 5.1.2. Mailbox Namespace Naming Convention ....................... 12 | ||||
| 5.1.3. Mailbox International Naming Convention ................... 12 | ||||
| 5.2. Mailbox Size and Message Status Updates ................... 13 | ||||
| 5.3. Response when no Command in Progress ...................... 14 | ||||
| 5.4. Autologout Timer .......................................... 14 | ||||
| 5.5. Multiple Commands in Progress ............................. 14 | ||||
| 6. Client Commands ........................................... 16 | ||||
| 6.1. Client Commands - Any State ............................... 16 | ||||
| 6.1.1. CAPABILITY Command ........................................ 16 | ||||
| 6.1.2. NOOP Command .............................................. 17 | ||||
| 6.1.3. LOGOUT Command ............................................ 18 | ||||
| 6.2. Client Commands - Non-Authenticated State ................. 18 | ||||
| 6.2.1. AUTHENTICATE Command ...................................... 18 | ||||
| 6.2.2. LOGIN Command ............................................. 20 | ||||
| 6.3. Client Commands - Authenticated State ..................... 21 | ||||
| 6.3.1. SELECT Command ............................................ 21 | ||||
| 6.3.2. EXAMINE Command ........................................... 22 | ||||
| 6.3.3. CREATE Command ............................................ 23 | ||||
| 6.3.4. DELETE Command ............................................ 24 | ||||
| 6.3.5. RENAME Command ............................................ 26 | ||||
| 6.3.6. SUBSCRIBE Command ......................................... 27 | ||||
| 6.3.7. UNSUBSCRIBE Command ....................................... 28 | ||||
| 6.3.8. LIST Command .............................................. 28 | ||||
| 6.3.9. LSUB Command .............................................. 30 | ||||
| 6.3.10. STATUS Command ............................................ 31 | ||||
| 6.3.11. APPEND Command ............................................ 32 | ||||
| 6.4. Client Commands - Selected State .......................... 34 | ||||
| 6.4.1. CHECK Command ............................................. 34 | ||||
| 6.4.2. CLOSE Command ............................................. 34 | ||||
| 6.4.3. EXPUNGE Command ........................................... 35 | ||||
| 6.4.4. SEARCH Command ............................................ 36 | ||||
| 6.4.5. FETCH Command ............................................. 39 | ||||
| 6.4.6. STORE Command ............................................. 43 | ||||
| 6.4.7. COPY Command .............................................. 44 | ||||
| 6.4.8. UID Command ............................................... 45 | ||||
| 6.5. Client Commands - Experimental/Expansion .................. 46 | ||||
| 6.5.1. X<atom> Command ........................................... 46 | ||||
| 7. Server Responses .......................................... 47 | ||||
| 7.1. Server Responses - Status Responses ....................... 48 | ||||
| 7.1.1. OK Response ............................................... 49 | ||||
| 7.1.2. NO Response ............................................... 50 | ||||
| 7.1.3. BAD Response .............................................. 50 | ||||
| 7.1.4. PREAUTH Response .......................................... 51 | ||||
| 7.1.5. BYE Response .............................................. 51 | ||||
| 7.2. Server Responses - Server and Mailbox Status .............. 52 | ||||
| 7.2.1. CAPABILITY Response ....................................... 52 | ||||
| 7.2.2. LIST Response ............................................. 52 | ||||
| 7.2.3. LSUB Response ............................................. 53 | ||||
| 7.2.4 STATUS Response ........................................... 54 | ||||
| 7.2.5. SEARCH Response ........................................... 54 | ||||
| 7.2.6. FLAGS Response ............................................ 54 | ||||
| 7.3. Server Responses - Mailbox Size ........................... 55 | ||||
| 7.3.1. EXISTS Response ........................................... 55 | ||||
| 7.3.2. RECENT Response ........................................... 55 | ||||
| 7.4. Server Responses - Message Status ......................... 56 | ||||
| 7.4.1. EXPUNGE Response .......................................... 56 | ||||
| 7.4.2. FETCH Response ............................................ 57 | ||||
| 7.5. Server Responses - Command Continuation Request ........... 62 | ||||
| 8. Sample IMAP4rev1 session .................................. 63 | ||||
| 9. Formal Syntax ............................................. 64 | ||||
| 10. Author's Note ............................................. 75 | ||||
| 11. Security Considerations ................................... 75 | ||||
| 12. Author's Address .......................................... 75 | ||||
| Appendices ........................................................ 76 | ||||
| A. References ................................................ 76 | ||||
| B. Changes from RFC 1730 ..................................... 77 | ||||
| C. Key Word Index ............................................ 80 | ||||
| IMAP4rev1 Protocol Specification | IMAP4rev1 Protocol Specification | |||
| 1. How to Read This Document | 1. How to Read This Document | |||
| 1.1. Organization of This Document | 1.1. Organization of This Document | |||
| This document is written from the point of view of the implementor of | This document is written from the point of view of the implementor of | |||
| an IMAP4rev1 client or server. Beyond the protocol overview in | an IMAP4rev1 client or server. Beyond the protocol overview in | |||
| section 2, it is not optimized for someone trying to understand the | section 2, it is not optimized for someone trying to understand the | |||
| operation of the protocol. The material in sections 3 through 5 | operation of the protocol. The material in sections 3 through 5 | |||
| skipping to change at page 4, line 18 ¶ | skipping to change at page 4, line 14 ¶ | |||
| A client MUST be prepared to accept any server response at all times. | A client MUST be prepared to accept any server response at all times. | |||
| This includes server data that was not requested. Server data SHOULD | This includes server data that was not requested. Server data SHOULD | |||
| be recorded, so that the client can reference its recorded copy | be recorded, so that the client can reference its recorded copy | |||
| rather than sending a command to the server to request the data. In | rather than sending a command to the server to request the data. In | |||
| the case of certain server data, the data MUST be recorded. | the case of certain server data, the data MUST be recorded. | |||
| This topic is discussed in greater detail in the Server Responses | This topic is discussed in greater detail in the Server Responses | |||
| section. | section. | |||
| 2.3. Message Attributes | ||||
| In addition to message text, each message has several attributes | ||||
| associated with it. These attributes may be retrieved individually | ||||
| or in conjunction with other attributes or message texts. | ||||
| 2.3.1. Message Numbers | ||||
| Messages in IMAP4rev1 are accessed by one of two numbers; the unique | ||||
| identifier and the message sequence number. | ||||
| 2.3.1.1. Unique Identifier (UID) Message Attribute | ||||
| A 32-bit value assigned to each message, which when used with the | ||||
| unique identifier validity value (see below) forms a 64-bit value | ||||
| that is permanently guaranteed not to refer to any other message in | ||||
| the mailbox. Unique identifiers are assigned in a strictly ascending | ||||
| fashion in the mailbox; as each message is added to the mailbox it is | ||||
| assigned a higher UID than the message(s) which were added | ||||
| previously. | ||||
| Unlike message sequence numbers, unique identifiers are not | ||||
| necessarily contiguous. Unique identifiers also persist across | ||||
| sessions. This permits a client to resynchronize its state from a | ||||
| previous session with the server (e.g. disconnected or offline access | ||||
| clients); this is discussed further in [IMAP-DISC]. | ||||
| Associated with every mailbox is a unique identifier validity value, | ||||
| which is sent in an UIDVALIDITY response code in an OK untagged | ||||
| response at mailbox selection time. If unique identifiers from an | ||||
| earlier session fail to persist to this session, the unique | ||||
| identifier validity value MUST be greater than the one used in the | ||||
| earlier session. | ||||
| Note: Unique identifiers MUST be strictly ascending in the | ||||
| mailbox at all times. If the physical message store is | ||||
| re-ordered by a non-IMAP agent, this requires that the | ||||
| unique identifiers in the mailbox be regenerated, since the | ||||
| former unique identifers are no longer strictly ascending | ||||
| as a result of the re-ordering. Another instance in which | ||||
| unique identifiers are regenerated is if the message store | ||||
| has no mechanism to store unique identifiers. Although | ||||
| this specification recognizes that this may be unavoidable | ||||
| in certain server environments, it STRONGLY ENCOURAGES | ||||
| message store implementation techniques that avoid this | ||||
| problem. | ||||
| Another cause of non-persistance is if the mailbox is | ||||
| deleted and a new mailbox with the same name is created at | ||||
| a later date, Since the name is the same, a client may not | ||||
| know that this is a new mailbox unless the unique | ||||
| identifier validity is different. A good value to use for | ||||
| the unique identifier validity value is a 32-bit | ||||
| representation of the creation date/time of the mailbox. | ||||
| It is alright to use a constant such as 1, but only if it | ||||
| guaranteed that unique identifiers will never be reused, | ||||
| even in the case of a mailbox being deleted (or renamed) | ||||
| and a new mailbox by the same name created at some future | ||||
| time. | ||||
| The unique identifier of a message MUST NOT change during the | ||||
| session, and SHOULD NOT change between sessions. However, if it is | ||||
| not possible to preserve the unique identifier of a message in a | ||||
| subsequent session, each subsequent session MUST have a new unique | ||||
| identifier validity value that is larger than any that was used | ||||
| previously. | ||||
| 2.3.1.2. Message Sequence Number Message Attribute | ||||
| A relative position from 1 to the number of messages in the mailbox. | ||||
| This position MUST be ordered by ascending unique identifier. As | ||||
| each new message is added, it is assigned a message sequence number | ||||
| that is 1 higher than the number of messages in the mailbox before | ||||
| that new message was added. | ||||
| Message sequence numbers can be reassigned during the session. For | ||||
| example, when a message is permanently removed (expunged) from the | ||||
| mailbox, the message sequence number for all subsequent messages is | ||||
| decremented. Similarly, a new message can be assigned a message | ||||
| sequence number that was once held by some other message prior to an | ||||
| expunge. | ||||
| In addition to accessing messages by relative position in the | ||||
| mailbox, message sequence numbers can be used in mathematical | ||||
| calculations. For example, if an untagged "EXISTS 11" is received, | ||||
| and previously an untagged "8 EXISTS" was received, three new | ||||
| messages have arrived with message sequence numbers of 9, 10, and 11. | ||||
| Another example; if message 287 in a 523 message mailbox has UID | ||||
| 12345, there are exactly 286 messages which have lesser UIDs and 236 | ||||
| messages which have greater UIDs. | ||||
| 2.3.2. Flags Message Attribute | ||||
| A list of zero or more named tokens associated with the message. A | ||||
| flag is set by its addition to this list, and is cleared by its | ||||
| removal. | ||||
| A flag may be permanent or session-only on a per-flag basis. | ||||
| Permanent flags are those which the client can add or remove from the | ||||
| message flags permanently; that is, subsequent sessions will see any | ||||
| change in permanent flags. Changes to session flags are valid only | ||||
| in that session. | ||||
| Note: The \Recent flag is a special case of a session flag. | ||||
| \Recent can not be used as an argument in a STORE command, | ||||
| and thus can not be changed at all. | ||||
| There are two types of flags in IMAP4rev1. A flag of either type may | ||||
| be permanent or session-only. | ||||
| A system flag is a flag name that is pre-defined in this | ||||
| specification. All system flags begin with "\". Certain system | ||||
| flags (\Deleted and \Seen) have special semantics described | ||||
| elsewhere. | ||||
| A keyword is defined by the server implementation. Keywords do not | ||||
| begin with "\". Servers MAY permit the client to define new keywords | ||||
| in the mailbox (see the description of the PERMANENTFLAGS response | ||||
| code for more information). | ||||
| 2.3.3. Internal Date Message Attribute | ||||
| The internal date and time of the message on the server. This is not | ||||
| the date and time in the [RFC-822] header, but rather a date and time | ||||
| which reflects when the message was received. In the case of | ||||
| messages delivered via [SMTP], this SHOULD be the date and time of | ||||
| final delivery of the message as defined by [SMTP]. In the case of | ||||
| messages delivered by the IMAP4rev1 COPY command, this SHOULD be the | ||||
| internal date and time of the source message. In the case of | ||||
| messages delivered by the IMAP4rev1 APPEND command, this SHOULD be | ||||
| the date and time as specified in the APPEND command description. | ||||
| All other cases are implementation defined. | ||||
| 2.3.4. [RFC-822] Size Message Attribute | ||||
| The number of octets in the message, as expressed in [RFC-822] | ||||
| format. | ||||
| 2.3.5. Envelope Structure Message Attribute | ||||
| A parsed representation of the [RFC-822] envelope information (not to | ||||
| be confused with an [SMTP] envelope) of the message. | ||||
| 2.3.6. Body Structure Message Attribute | ||||
| A parsed representation of the [MIME-IMB] body structure information | ||||
| of the message. | ||||
| 2.4. Message Texts | ||||
| In addition to being able to fetch the full [RFC-822] text of a | ||||
| message, IMAP4rev1 permits the fetching of portions of the full | ||||
| message text. Specifically, it is possible to fetch the [RFC-822] | ||||
| message header, [RFC-822] message body, [MIME-IMB] body part or | ||||
| [MIME-IMB] header. | ||||
| 3. State and Flow Diagram | 3. State and Flow Diagram | |||
| An IMAP4rev1 server is in one of four states. Most commands are | An IMAP4rev1 server is in one of four states. Most commands are | |||
| valid in only certain states. It is a protocol error for the client | 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. | 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 | In this case, a server will respond with a BAD or NO (depending upon | |||
| server implementation) command completion result. | server implementation) command completion result. | |||
| 3.1. Non-Authenticated State | 3.1. Non-Authenticated State | |||
| skipping to change at page 7, line 7 ¶ | skipping to change at page 11, line 7 ¶ | |||
| The empty string is represented as either "" (a quoted string with | The empty string is represented as either "" (a quoted string with | |||
| zero characters between double quotes) or as {0} followed by CRLF (a | zero characters between double quotes) or as {0} followed by CRLF (a | |||
| literal with an octet count of 0). | literal with an octet count of 0). | |||
| Note: Even if the octet count is 0, a client transmitting a | Note: Even if the octet count is 0, a client transmitting a | |||
| literal MUST wait to receive a command continuation | literal MUST wait to receive a command continuation | |||
| request. | request. | |||
| 4.3.1. 8-bit and Binary Strings | 4.3.1. 8-bit and Binary Strings | |||
| 8-bit textual and binary mail is supported through the use of | 8-bit textual and binary mail is supported through the use of a | |||
| [MIME-1] encoding. IMAP4rev1 implementations MAY transmit 8-bit or | [MIME-IMB] content transfer encoding. IMAP4rev1 implementations MAY | |||
| multi-octet characters in literals, but SHOULD do so only when the | transmit 8-bit or multi-octet characters in literals, but SHOULD do | |||
| character set is identified. | so only when the character set is identified. | |||
| Although a BINARY body encoding is defined, unencoded binary strings | Although a BINARY body encoding is defined, unencoded binary strings | |||
| are not permitted. A "binary string" is any string with NUL | are not permitted. A "binary string" is any string with NUL | |||
| characters. Implementations MUST encode binary data into a textual | characters. Implementations MUST encode binary data into a textual | |||
| form such as BASE64 before transmitting the data. A string with an | form such as BASE64 before transmitting the data. A string with an | |||
| excessive amount of CTL characters MAY also be considered to be | excessive amount of CTL characters MAY also be considered to be | |||
| binary. | binary. | |||
| 4.4. Parenthesized List | 4.4. Parenthesized List | |||
| skipping to change at page 8, line 30 ¶ | skipping to change at page 12, line 30 ¶ | |||
| newsgroups MAY use the "#news" namespace to partition the | newsgroups MAY use the "#news" namespace to partition the | |||
| USENET newsgroup namespace from that of other mailboxes. | USENET newsgroup namespace from that of other mailboxes. | |||
| Thus, the comp.mail.misc newsgroup would have an mailbox | Thus, the comp.mail.misc newsgroup would have an mailbox | |||
| name of "#news.comp.mail.misc", and the name | name of "#news.comp.mail.misc", and the name | |||
| "comp.mail.misc" could refer to a different object (e.g. a | "comp.mail.misc" could refer to a different object (e.g. a | |||
| user's private mailbox). | user's private mailbox). | |||
| 5.1.3. Mailbox International Naming Convention | 5.1.3. Mailbox International Naming Convention | |||
| By convention, international mailbox names are specified using a | By convention, international mailbox names are specified using a | |||
| modified version of the UTF-7 encoding described in [RFC-1642]. The | modified version of the UTF-7 encoding described in [UTF-7]. The | |||
| purpose of these modifications is to correct the following problems | purpose of these modifications is to correct the following problems | |||
| with UTF-7: | with UTF-7: | |||
| 1) UTF-7 uses the "+" character for shifting; this conflicts with | 1) UTF-7 uses the "+" character for shifting; this conflicts with | |||
| the common use of "+" in mailbox names, in particular USENET | the common use of "+" in mailbox names, in particular USENET | |||
| newsgroup names. | newsgroup names. | |||
| 2) UTF-7's encoding is BASE64 which uses the "/" character; this | 2) UTF-7's encoding is BASE64 which uses the "/" character; this | |||
| conflicts with the use of "/" as a popular hierarchy delimiter. | conflicts with the use of "/" as a popular hierarchy delimiter. | |||
| skipping to change at page 9, line 10 ¶ | skipping to change at page 13, line 10 ¶ | |||
| string; in particular, printable US-ASCII chararacters can be | string; in particular, printable US-ASCII chararacters can be | |||
| represented in encoded form. | represented in encoded form. | |||
| In modified UTF-7, printable US-ASCII characters except for "&" | In modified UTF-7, printable US-ASCII characters except for "&" | |||
| represent themselves; that is, characters with octet values 0x20-0x25 | represent themselves; that is, characters with octet values 0x20-0x25 | |||
| and 0x27-0x7e. The character "&" (0x26) is represented by the | and 0x27-0x7e. The character "&" (0x26) is represented by the | |||
| two-octet sequence "&-". | two-octet sequence "&-". | |||
| All other characters (octet values 0x00-0x1f, 0x7f-0xff, and all | All other characters (octet values 0x00-0x1f, 0x7f-0xff, and all | |||
| Unicode 16-bit octets) are represented in modified BASE64, with a | Unicode 16-bit octets) are represented in modified BASE64, with a | |||
| further modification from [RFC-1642] that "," is used instead of "/". | further modification from [UTF-7] that "," is used instead of "/". | |||
| Modified BASE64 MUST NOT be used to represent any printing US-ASCII | Modified BASE64 MUST NOT be used to represent any printing US-ASCII | |||
| character which can represent itself. | character which can represent itself. | |||
| "&" is used to shift to modified BASE64 and "-" to shift back to | "&" is used to shift to modified BASE64 and "-" to shift back to | |||
| US-ASCII. All names start in US-ASCII, and MUST end in US-ASCII | US-ASCII. All names start in US-ASCII, and MUST end in US-ASCII | |||
| (that is, a name that ends with a Unicode 16-bit octet MUST end with | (that is, a name that ends with a Unicode 16-bit octet MUST end with | |||
| a "-"). | a "-"). | |||
| For example, here is a mailbox name which mixes English, | For example, here is a mailbox name which mixes English, | |||
| Japanese, and Chinese text: ~peter/mail/&ZeVnLIqe-/&U,BTFw- | Japanese, and Chinese text: ~peter/mail/&ZeVnLIqe-/&U,BTFw- | |||
| skipping to change at page 10, line 44 ¶ | skipping to change at page 14, line 44 ¶ | |||
| send multiple commands without waiting if an ambiguity would result. | send multiple commands without waiting if an ambiguity would result. | |||
| If the server detects a possible ambiguity, it MUST execute commands | If the server detects a possible ambiguity, it MUST execute commands | |||
| to completion in the order given by the client. | to completion in the order given by the client. | |||
| The most obvious example of ambiguity is when a command would affect | The most obvious example of ambiguity is when a command would affect | |||
| the results of another command; for example, a FETCH of a message's | the results of another command; for example, a FETCH of a message's | |||
| flags and a STORE of that same message's flags. | flags and a STORE of that same message's flags. | |||
| A non-obvious ambiguity occurs with commands that permit an untagged | A non-obvious ambiguity occurs with commands that permit an untagged | |||
| EXPUNGE response (commands other than FETCH, STORE, and SEARCH), | EXPUNGE response (commands other than FETCH, STORE, and SEARCH), | |||
| since an untagged response can invalidate sequence numbers in a | since an untagged EXPUNGE response can invalidate sequence numbers in | |||
| subsequent command. Therefore, if the client sends any command other | a subsequent command. This is not a problem for FETCH, STORE, or | |||
| than FETCH, STORE, or SEARCH, it MUST wait for a response before | SEARCH commands because servers are prohibited from sending EXPUNGE | |||
| sending a command message sequence numbers. | responses while any of those commands are in progress. Therefore, if | |||
| the client sends any command other than FETCH, STORE, or SEARCH, it | ||||
| MUST wait for a response before sending a command with message | ||||
| sequence numbers. | ||||
| For example, the following non-waiting command sequences are invalid: | For example, the following non-waiting command sequences are invalid: | |||
| FETCH + NOOP + STORE | FETCH + NOOP + STORE | |||
| STORE + COPY + FETCH | STORE + COPY + FETCH | |||
| COPY + COPY | COPY + COPY | |||
| CHECK + FETCH | CHECK + FETCH | |||
| The following are examples of valid non-waiting command sequences: | The following are examples of valid non-waiting command sequences: | |||
| skipping to change at page 12, line 18 ¶ | skipping to change at page 16, line 18 ¶ | |||
| organized by the state in which the command is permitted. Commands | organized by the state in which the command is permitted. Commands | |||
| which are permitted in multiple states are listed in the minimum | which are permitted in multiple states are listed in the minimum | |||
| permitted state (for example, commands valid in authenticated and | permitted state (for example, commands valid in authenticated and | |||
| selected state are listed in the authenticated state commands). | selected state are listed in the authenticated state commands). | |||
| Command arguments, identified by "Arguments:" in the command | Command arguments, identified by "Arguments:" in the command | |||
| descriptions below, are described by function, not by syntax. The | descriptions below, are described by function, not by syntax. The | |||
| precise syntax of command arguments is described in the Formal Syntax | precise syntax of command arguments is described in the Formal Syntax | |||
| section. | section. | |||
| Some commands cause specific server data to be returned; these are | Some commands cause specific server responses to be returned; these | |||
| identified by "Data:" in the command descriptions below. See the | are identified by "Responses:" in the command descriptions below. | |||
| response descriptions in the Responses section for information on | See the response descriptions in the Responses section for | |||
| these responses, and the Formal Syntax section for the precise syntax | information on these responses, and the Formal Syntax section for the | |||
| of these responses. It is possible for server data to be transmitted | precise syntax of these responses. It is possible for server data to | |||
| as a result of any command; thus, commands that do not specifically | be transmitted as a result of any command; thus, commands that do not | |||
| require server data specify "no specific data for this command" | specifically require server data specify "no specific responses for | |||
| instead of "none". | this command" instead of "none". | |||
| The "Result:" in the command description refers to the possible | The "Result:" in the command description refers to the possible | |||
| tagged status responses to a command, and any special interpretation | tagged status responses to a command, and any special interpretation | |||
| of these status responses. | of these status responses. | |||
| 6.1. Client Commands - Any State | 6.1. Client Commands - Any State | |||
| The following commands are valid in any state: CAPABILITY, NOOP, and | The following commands are valid in any state: CAPABILITY, NOOP, and | |||
| LOGOUT. | LOGOUT. | |||
| 6.1.1. CAPABILITY Command | 6.1.1. CAPABILITY Command | |||
| Arguments: none | Arguments: none | |||
| Data: REQUIRED untagged response: CAPABILITY | Responses: REQUIRED untagged response: CAPABILITY | |||
| Result: OK - capability completed | Result: OK - capability completed | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The CAPABILITY command requests a listing of capabilities that the | The CAPABILITY command requests a listing of capabilities that the | |||
| server supports. The server MUST send a single untagged | server supports. The server MUST send a single untagged | |||
| CAPABILITY response with "IMAP4rev1" as one of the listed | CAPABILITY response with "IMAP4rev1" as one of the listed | |||
| capabilities before the (tagged) OK response. This listing of | capabilities before the (tagged) OK response. This listing of | |||
| capabilities is not dependent upon connection state or user. It | capabilities is not dependent upon connection state or user. It | |||
| is therefore not necessary to issue a CAPABILITY command more than | is therefore not necessary to issue a CAPABILITY command more than | |||
| once in a session. | once in a session. | |||
| A capability name which begins with "AUTH=" indicates that the | A capability name which begins with "AUTH=" indicates that the | |||
| server supports that particular authentication mechanism. All | server supports that particular authentication mechanism. All | |||
| such names are, by definition, part of this specification. For | such names are, by definition, part of this specification. For | |||
| example, the authorization capability for an experimental | example, the authorization capability for an experimental | |||
| "blurdybloop" authenticator would be "AUTH=XBLURDYBLOOP" and not | "blurdybloop" authenticator would be "AUTH=XBLURDYBLOOP" and not | |||
| "XAUTH=BLURDYBLOOP" or "XAUTH=XBLURDYBLOOP". Other capability | "XAUTH=BLURDYBLOOP" or "XAUTH=XBLURDYBLOOP". | |||
| names refer to extensions, revisions, or amendments to this | ||||
| specification. See the documentation of the CAPABILITY response | Other capability names refer to extensions, revisions, or | |||
| for additional information. No capabilities are enabled without | amendments to this specification. See the documentation of the | |||
| explicit client action to invoke the capability. See the section | CAPABILITY response for additional information. No capabilities, | |||
| entitled "Client Commands - Experimental/Expansion" for | beyond the base IMAP4rev1 set defined in this specification, are | |||
| information about the form of site or implementation-specific | enabled without explicit client action to invoke the capability. | |||
| capabilities. | ||||
| See the section entitled "Client Commands - | ||||
| Experimental/Expansion" for information about the form of site or | ||||
| implementation-specific capabilities. | ||||
| Example: C: abcd CAPABILITY | Example: C: abcd CAPABILITY | |||
| S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 | S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 | |||
| S: abcd OK CAPABILITY completed | S: abcd OK CAPABILITY completed | |||
| 6.1.2. NOOP Command | 6.1.2. NOOP Command | |||
| Arguments: none | Arguments: none | |||
| Data: no specific data for this command (but see below) | Responses: no specific responses for this command (but see below) | |||
| Result: OK - noop completed | Result: OK - noop completed | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The NOOP command always succeeds. It does nothing. | The NOOP command always succeeds. It does nothing. | |||
| Since any command can return a status update as untagged data, the | 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 | NOOP command can be used as a periodic poll for new messages or | |||
| message status updates during a period of inactivity. The NOOP | message status updates during a period of inactivity. The NOOP | |||
| command can also be used to reset any inactivity autologout timer | command can also be used to reset any inactivity autologout timer | |||
| skipping to change at page 14, line 9 ¶ | skipping to change at page 18, line 9 ¶ | |||
| S: * 22 EXPUNGE | S: * 22 EXPUNGE | |||
| S: * 23 EXISTS | S: * 23 EXISTS | |||
| S: * 3 RECENT | S: * 3 RECENT | |||
| S: * 14 FETCH (FLAGS (\Seen \Deleted)) | S: * 14 FETCH (FLAGS (\Seen \Deleted)) | |||
| S: a047 OK NOOP completed | S: a047 OK NOOP completed | |||
| 6.1.3. LOGOUT Command | 6.1.3. LOGOUT Command | |||
| Arguments: none | Arguments: none | |||
| Data: REQUIRED untagged response: BYE | Responses: REQUIRED untagged response: BYE | |||
| Result: OK - logout completed | Result: OK - logout completed | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The LOGOUT command informs the server that the client is done with | The LOGOUT command informs the server that the client is done with | |||
| the session. The server MUST send a BYE untagged response before | the session. The server MUST send a BYE untagged response before | |||
| the (tagged) OK response, and then close the network connection. | the (tagged) OK response, and then close the network connection. | |||
| Example: C: A023 LOGOUT | Example: C: A023 LOGOUT | |||
| S: * BYE IMAP4rev1 Server logging out | S: * BYE IMAP4rev1 Server logging out | |||
| skipping to change at page 15, line 9 ¶ | skipping to change at page 19, line 9 ¶ | |||
| re-enter non-authenticated state. | re-enter non-authenticated state. | |||
| In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), | In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), | |||
| the following commands are valid in non-authenticated state: | the following commands are valid in non-authenticated state: | |||
| AUTHENTICATE and LOGIN. | AUTHENTICATE and LOGIN. | |||
| 6.2.1. AUTHENTICATE Command | 6.2.1. AUTHENTICATE Command | |||
| Arguments: authentication mechanism name | Arguments: authentication mechanism name | |||
| Data: continuation data can be requested | Responses: continuation data can be requested | |||
| Result: OK - authenticate completed, now in authenticated state | Result: OK - authenticate completed, now in authenticated state | |||
| NO - authenticate failure: unsupported authentication | NO - authenticate failure: unsupported authentication | |||
| mechanism, credentials rejected | mechanism, credentials rejected | |||
| BAD - command unknown or arguments invalid, | BAD - command unknown or arguments invalid, | |||
| authentication exchange cancelled | authentication exchange cancelled | |||
| The AUTHENTICATE command indicates an authentication mechanism, | The AUTHENTICATE command indicates an authentication mechanism, | |||
| such as described in [IMAP-AUTH], to the server. If the server | such as described in [IMAP-AUTH], to the server. If the server | |||
| supports the requested authentication mechanism, it performs an | supports the requested authentication mechanism, it performs an | |||
| skipping to change at page 16, line 28 ¶ | skipping to change at page 20, line 28 ¶ | |||
| S: A001 OK Kerberos V4 authentication successful | S: A001 OK Kerberos V4 authentication successful | |||
| Note: the line breaks in the first client answer are for | Note: the line breaks in the first client answer are for | |||
| editorial clarity and are not in real authenticators. | editorial clarity and are not in real authenticators. | |||
| 6.2.2. LOGIN Command | 6.2.2. LOGIN Command | |||
| Arguments: user name | Arguments: user name | |||
| password | password | |||
| Data: no specific data for this command | Responses: no specific responses for this command | |||
| Result: OK - login completed, now in authenticated state | Result: OK - login completed, now in authenticated state | |||
| NO - login failure: user name or password rejected | NO - login failure: user name or password rejected | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The LOGIN command identifies the client to the server and carries | The LOGIN command identifies the client to the server and carries | |||
| the plaintext password authenticating this user. | the plaintext password authenticating this user. | |||
| Example: C: a001 LOGIN SMITH SESAME | Example: C: a001 LOGIN SMITH SESAME | |||
| S: a001 OK LOGIN completed | S: a001 OK LOGIN completed | |||
| skipping to change at page 17, line 20 ¶ | skipping to change at page 21, line 20 ¶ | |||
| In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), | In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), | |||
| the following commands are valid in authenticated state: SELECT, | the following commands are valid in authenticated state: SELECT, | |||
| EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, | EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, | |||
| STATUS, and APPEND. | STATUS, and APPEND. | |||
| 6.3.1. SELECT Command | 6.3.1. SELECT Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| Data: REQUIRED untagged responses: FLAGS, EXISTS, RECENT | Responses: REQUIRED untagged responses: FLAGS, EXISTS, RECENT | |||
| OPTIONAL OK untagged responses: UNSEEN, PERMANENTFLAGS | OPTIONAL OK untagged responses: UNSEEN, PERMANENTFLAGS | |||
| Result: OK - select completed, now in selected state | Result: OK - select completed, now in selected state | |||
| NO - select failure, now in authenticated state: no | NO - select failure, now in authenticated state: no | |||
| such mailbox, can't access mailbox | such mailbox, can't access mailbox | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The SELECT command selects a mailbox so that messages in the | The SELECT command selects a mailbox so that messages in the | |||
| mailbox can be accessed. Before returning an OK to the client, | mailbox can be accessed. Before returning an OK to the client, | |||
| the server MUST send the following untagged data to the client: | the server MUST send the following untagged data to the client: | |||
| FLAGS Defined flags in the mailbox | FLAGS Defined flags in the mailbox. See the description | |||
| of the FLAGS response for more details. | ||||
| <n> EXISTS The number of messages in the mailbox | <n> EXISTS The number of messages in the mailbox. See the | |||
| description of the EXISTS response for more | ||||
| details. | ||||
| <n> RECENT The number of messages added to the mailbox since | <n> RECENT The number of messages added to the mailbox since | |||
| the previous time this mailbox was selected | the previous time this mailbox was selected. See | |||
| the description of the RECENT response for more | ||||
| details. | ||||
| OK [UIDVALIDITY <n>] | OK [UIDVALIDITY <n>] | |||
| The unique identifier validity value. See the | The unique identifier validity value. See the | |||
| description of the UID command for more detail. | description of the UID command for more details. | |||
| to define the initial state of the mailbox at the client. If it | to define the initial state of the mailbox at the client. If it | |||
| is not possible to determine the messages that were added since | is not possible to determine the messages that were added since | |||
| the previous time a mailbox was selected, then all messages SHOULD | the previous time a mailbox was selected, then all messages SHOULD | |||
| be considered recent. | be considered recent. | |||
| The server SHOULD also send an UNSEEN response code in an OK | The server SHOULD also send an UNSEEN response code in an OK | |||
| untagged response, indicating the message sequence number of the | untagged response, indicating the message sequence number of the | |||
| first unseen message in the mailbox. | first unseen message in the mailbox. | |||
| skipping to change at page 18, line 28 ¶ | skipping to change at page 22, line 32 ¶ | |||
| SHOULD prefix the text of the tagged OK response with the | SHOULD prefix the text of the tagged OK response with the | |||
| "[READ-WRITE]" response code. | "[READ-WRITE]" response code. | |||
| If the client is not permitted to modify the mailbox but is | If the client is not permitted to modify the mailbox but is | |||
| permitted read access, the mailbox is selected as read-only, and | permitted read access, the mailbox is selected as read-only, and | |||
| the server MUST prefix the text of the tagged OK response to | the server MUST prefix the text of the tagged OK response to | |||
| SELECT with the "[READ-ONLY]" response code. Read-only access | SELECT with the "[READ-ONLY]" response code. Read-only access | |||
| through SELECT differs from the EXAMINE command in that certain | through SELECT differs from the EXAMINE command in that certain | |||
| read-only mailboxes MAY permit the change of permanent state on a | read-only mailboxes MAY permit the change of permanent state on a | |||
| per-user (as opposed to global) basis. Netnews messages marked in | per-user (as opposed to global) basis. Netnews messages marked in | |||
| a client .newsrc file are an example of such per-user permanent | a server-based .newsrc file are an example of such per-user | |||
| state that can be modified with read-only mailboxes. | permanent state that can be modified with read-only mailboxes. | |||
| Example: C: A142 SELECT INBOX | Example: C: A142 SELECT INBOX | |||
| S: * 172 EXISTS | S: * 172 EXISTS | |||
| S: * 1 RECENT | S: * 1 RECENT | |||
| S: * OK [UNSEEN 12] Message 12 is first unseen | S: * OK [UNSEEN 12] Message 12 is first unseen | |||
| S: * OK [UIDVALIDITY 3857529045] UIDs valid | S: * OK [UIDVALIDITY 3857529045] UIDs valid | |||
| S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | |||
| S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited | S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited | |||
| S: A142 OK [READ-WRITE] SELECT completed | S: A142 OK [READ-WRITE] SELECT completed | |||
| 6.3.2. EXAMINE Command | 6.3.2. EXAMINE Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| Data: REQUIRED untagged responses: FLAGS, EXISTS, RECENT | Responses: REQUIRED untagged responses: FLAGS, EXISTS, RECENT | |||
| OPTIONAL OK untagged responses: UNSEEN, PERMANENTFLAGS | OPTIONAL OK untagged responses: UNSEEN, PERMANENTFLAGS | |||
| Result: OK - examine completed, now in selected state | Result: OK - examine completed, now in selected state | |||
| NO - examine failure, now in authenticated state: no | NO - examine failure, now in authenticated state: no | |||
| such mailbox, can't access mailbox | such mailbox, can't access mailbox | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The EXAMINE command is identical to SELECT and returns the same | The EXAMINE command is identical to SELECT and returns the same | |||
| output; however, the selected mailbox is identified as read-only. | output; however, the selected mailbox is identified as read-only. | |||
| No changes to the permanent state of the mailbox, including | No changes to the permanent state of the mailbox, including | |||
| skipping to change at page 19, line 26 ¶ | skipping to change at page 23, line 38 ¶ | |||
| S: * OK [UNSEEN 8] Message 8 is first unseen | S: * OK [UNSEEN 8] Message 8 is first unseen | |||
| S: * OK [UIDVALIDITY 3857529045] UIDs valid | S: * OK [UIDVALIDITY 3857529045] UIDs valid | |||
| S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | |||
| S: * OK [PERMANENTFLAGS ()] No permanent flags permitted | S: * OK [PERMANENTFLAGS ()] No permanent flags permitted | |||
| S: A932 OK [READ-ONLY] EXAMINE completed | S: A932 OK [READ-ONLY] EXAMINE completed | |||
| 6.3.3. CREATE Command | 6.3.3. CREATE Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| Data: no specific data for this command | Responses: no specific responses for this command | |||
| Result: OK - create completed | Result: OK - create completed | |||
| NO - create failure: can't create mailbox with that name | NO - create failure: can't create mailbox with that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The CREATE command creates a mailbox with the given name. An OK | 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 | 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 | 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 | with a name that refers to an extant mailbox. Any error in | |||
| creation will return a tagged NO response. | creation will return a tagged NO response. | |||
| skipping to change at page 20, line 28 ¶ | skipping to change at page 24, line 39 ¶ | |||
| "/" was returned as the hierarchy separator from LIST. If | "/" was returned as the hierarchy separator from LIST. If | |||
| "/" is the hierarchy separator, a new level of hierarchy | "/" is the hierarchy separator, a new level of hierarchy | |||
| named "owatagusiam" with a member called "blurdybloop" is | named "owatagusiam" with a member called "blurdybloop" is | |||
| created. Otherwise, two mailboxes at the same hierarchy | created. Otherwise, two mailboxes at the same hierarchy | |||
| level are created. | level are created. | |||
| 6.3.4. DELETE Command | 6.3.4. DELETE Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| Data: no specific data for this command | Responses: no specific responses for this command | |||
| Result: OK - delete completed | Result: OK - delete completed | |||
| NO - delete failure: can't delete mailbox with that name | NO - delete failure: can't delete mailbox with that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The DELETE command permanently removes the mailbox with the given | The DELETE command permanently removes the mailbox with the given | |||
| name. A tagged OK response is returned only if the mailbox has | 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 | been deleted. It is an error to attempt to delete INBOX or a | |||
| mailbox name that does not exist. It SHOULD be an error to | mailbox name that does not exist. | |||
| attempt to delete a name which has existing inferior hierarchical | ||||
| names (e.g. deleting "foo" SHOULD fail if "foo/bar" exists). Any | The DELETE command MUST NOT remove inferior hierarchical names. | |||
| error in deletion will return a tagged NO response. | For example, if a mailbox "foo" has an inferior "foo.bar" | |||
| (assuming "." is the hierarchy delimiter character), removing | ||||
| "foo" MUST NOT remove "foo.bar". It is an error to attempt to | ||||
| delete a name that has inferior hierarchical names and also has | ||||
| the \Noselect mailbox name attribute (see the description of the | ||||
| LIST response for more details). | ||||
| It is permitted to delete a name that has inferior hierarchical | ||||
| names and does not have the \Noselect mailbox name attribute. In | ||||
| this case, all messages in that mailbox are removed, and the name | ||||
| will acquire the \Noselect mailbox name attribute. | ||||
| The value of the highest-used unique identifier of the deleted | The value of the highest-used unique identifier of the deleted | |||
| mailbox MUST be preserved so that a new mailbox created with the | mailbox MUST be preserved so that a new mailbox created with the | |||
| same name will not reuse the identifiers of the former | same name will not reuse the identifiers of the former | |||
| incarnation, UNLESS the new incarnation has a different unique | incarnation, UNLESS the new incarnation has a different unique | |||
| identifier validity value. See the description of the UID command | identifier validity value. See the description of the UID command | |||
| for more detail. | for more detail. | |||
| Example: C: A683 DELETE blurdybloop | Examples: C: A682 LIST "" * | |||
| S: * LIST () "/" blurdybloop | ||||
| S: * LIST (\Noselect) "/" foo | ||||
| S: * LIST () "/" foo/bar | ||||
| S: A682 OK LIST completed | ||||
| C: A683 DELETE blurdybloop | ||||
| S: A683 OK DELETE completed | S: A683 OK DELETE completed | |||
| C: A684 DELETE foo | ||||
| S: A684 NO Name "foo" has inferior hierarchical names | ||||
| C: A685 DELETE foo/bar | ||||
| S: A685 OK DELETE Completed | ||||
| C: A686 LIST "" * | ||||
| S: * LIST (\Noselect) "/" foo | ||||
| S: A686 OK LIST completed | ||||
| C: A687 DELETE foo | ||||
| S: A687 OK DELETE Completed | ||||
| C: A82 LIST "" * | ||||
| S: * LIST () "." foo | ||||
| S: * LIST () "." foo.bar | ||||
| S: A82 OK LIST completed | ||||
| C: A83 DELETE blurdybloop | ||||
| S: A83 OK DELETE completed | ||||
| C: A84 DELETE foo | ||||
| S: A84 OK DELETE Completed | ||||
| C: A85 LIST "" * | ||||
| S: * LIST () "." foo.bar | ||||
| S: A85 OK LIST completed | ||||
| C: A86 LIST "" % | ||||
| S: * LIST (\Noselect) "." foo | ||||
| S: A86 OK LIST completed | ||||
| 6.3.5. RENAME Command | 6.3.5. RENAME Command | |||
| Arguments: existing mailbox name | Arguments: existing mailbox name | |||
| new mailbox name | new mailbox name | |||
| Data: no specific data for this command | Responses: no specific responses for this command | |||
| Result: OK - rename completed | Result: OK - rename completed | |||
| NO - rename failure: can't rename mailbox with that name, | NO - rename failure: can't rename mailbox with that name, | |||
| can't rename to mailbox with that name | can't rename to mailbox with that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The RENAME command changes the name of a mailbox. A tagged OK | The RENAME command changes the name of a mailbox. A tagged OK | |||
| response is returned only if the mailbox has been renamed. It is | 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 | 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 | exist or to a mailbox name that already exists. Any error in | |||
| renaming will return a tagged NO response. The value of the | renaming will return a tagged NO response. | |||
| highest-used unique identifier of the old mailbox name 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. | ||||
| Renaming INBOX is permitted; a new, empty INBOX is created in its | If the name has inferior hierarchical names, then the inferior | |||
| place. | hierarchical names MUST also be renamed. For example, a rename of | |||
| "foo" to "zap" will rename "foo/bar" (assuming "/" is the | ||||
| hierarchy delimiter character) to "zap/bar". | ||||
| Example: C: Z4S9 RENAME blurdybloop owatagusiam | The value of the highest-used unique identifier of the old mailbox | |||
| S: Z4S9 OK RENAME completed | name 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. | ||||
| Renaming INBOX is permitted, and has special behavior. It moves | ||||
| all messages in INBOX to a new mailbox with the given name, | ||||
| leaving INBOX empty. If the server implementation supports | ||||
| inferior hierarchical names of INBOX, these are unaffected by a | ||||
| rename of INBOX. | ||||
| Examples: C: A682 LIST "" * | ||||
| S: * LIST () "/" blurdybloop | ||||
| S: * LIST (\Noselect) "/" foo | ||||
| S: * LIST () "/" foo/bar | ||||
| S: A682 OK LIST completed | ||||
| C: A683 RENAME blurdybloop sarasoop | ||||
| S: A683 OK RENAME completed | ||||
| C: A684 RENAME foo zowie | ||||
| S: A684 OK RENAME Completed | ||||
| C: A685 LIST "" * | ||||
| S: * LIST () "/" sarasoop | ||||
| S: * LIST (\Noselect) "/" zowie | ||||
| S: * LIST () "/" zowie/bar | ||||
| S: A685 OK LIST completed | ||||
| C: Z432 LIST "" * | ||||
| S: * LIST () "." INBOX | ||||
| S: * LIST () "." INBOX.bar | ||||
| S: Z432 OK LIST completed | ||||
| C: Z433 RENAME INBOX old-mail | ||||
| S: Z433 OK RENAME completed | ||||
| C: Z434 LIST "" * | ||||
| S: * LIST () "." INBOX | ||||
| S: * LIST () "." INBOX.bar | ||||
| S: * LIST () "." old-mail | ||||
| S: Z434 OK LIST completed | ||||
| 6.3.6. SUBSCRIBE Command | 6.3.6. SUBSCRIBE Command | |||
| Arguments: mailbox | Arguments: mailbox | |||
| Data: no specific data for this command | Responses: no specific responses for this command | |||
| Result: OK - subscribe completed | Result: OK - subscribe completed | |||
| NO - subscribe failure: can't subscribe to that name | NO - subscribe failure: can't subscribe to that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The SUBSCRIBE command adds the specified mailbox name to the | The SUBSCRIBE command adds the specified mailbox name to the | |||
| server's set of "active" or "subscribed" mailboxes as returned by | server's set of "active" or "subscribed" mailboxes as returned by | |||
| the LSUB command. This command returns a tagged OK response only | the LSUB command. This command returns a tagged OK response only | |||
| if the subscription is successful. | if the subscription is successful. | |||
| A server MAY validate the mailbox argument to SUBSCRIBE to verify | ||||
| that it exists. However, it MUST NOT unilaterally remove an | ||||
| existing mailbox name from the subscription list even if a mailbox | ||||
| by that name no longer exists. | ||||
| Note: this requirement is because some server sites may | ||||
| routinely remove a mailbox with a well-known name (e.g. | ||||
| "system-alerts") after its contents expire, with the | ||||
| intention of recreating it when new contents are | ||||
| appropriate. | ||||
| Example: C: A002 SUBSCRIBE #news.comp.mail.mime | Example: C: A002 SUBSCRIBE #news.comp.mail.mime | |||
| S: A002 OK SUBSCRIBE completed | S: A002 OK SUBSCRIBE completed | |||
| 6.3.7. UNSUBSCRIBE Command | 6.3.7. UNSUBSCRIBE Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| Data: no specific data for this command | Responses: no specific responses for this command | |||
| Result: OK - unsubscribe completed | Result: OK - unsubscribe completed | |||
| NO - unsubscribe failure: can't unsubscribe that name | NO - unsubscribe failure: can't unsubscribe that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The UNSUBSCRIBE command removes the specified mailbox name from | The UNSUBSCRIBE command removes the specified mailbox name from | |||
| the server's set of "active" or "subscribed" mailboxes as returned | the server's set of "active" or "subscribed" mailboxes as returned | |||
| by the LSUB command. This command returns a tagged OK response | by the LSUB command. This command returns a tagged OK response | |||
| only if the unsubscription is successful. | only if the unsubscription is successful. | |||
| Example: C: A002 UNSUBSCRIBE #news.comp.mail.mime | Example: C: A002 UNSUBSCRIBE #news.comp.mail.mime | |||
| S: A002 OK UNSUBSCRIBE completed | S: A002 OK UNSUBSCRIBE completed | |||
| 6.3.8. LIST Command | 6.3.8. LIST Command | |||
| Arguments: reference name | Arguments: reference name | |||
| mailbox name with possible wildcards | mailbox name with possible wildcards | |||
| Data: untagged responses: LIST | Responses: untagged responses: LIST | |||
| Result: OK - list completed | Result: OK - list completed | |||
| NO - list failure: can't list that reference or name | NO - list failure: can't list that reference or name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The LIST command returns a subset of names from the complete set | The LIST command returns a subset of names from the complete set | |||
| of all names available to the client. Zero or more untagged LIST | of all names available to the client. Zero or more untagged LIST | |||
| replies are returned, containing the name attributes, hierarchy | replies are returned, containing the name attributes, hierarchy | |||
| delimiter, and name; see the description of the LIST reply for | delimiter, and name; see the description of the LIST reply for | |||
| more detail. | more detail. | |||
| skipping to change at page 24, line 5 ¶ | skipping to change at page 30, line 10 ¶ | |||
| for the client to determine that the interpretation was | for the client to determine that the interpretation was | |||
| in the context of the reference. | in the context of the reference. | |||
| The character "*" is a wildcard, and matches zero or more | The character "*" is a wildcard, and matches zero or more | |||
| characters at this position. The character "%" is similar to "*", | characters at this position. The character "%" is similar to "*", | |||
| but it does not match a hierarchy delimiter. If the "%" wildcard | but it does not match a hierarchy delimiter. If the "%" wildcard | |||
| is the last character of a mailbox name argument, matching levels | is the last character of a mailbox name argument, matching levels | |||
| of hierarchy are also returned. If these levels of hierarchy are | of hierarchy are also returned. If these levels of hierarchy are | |||
| not also selectable mailboxes, they are returned with the | not also selectable mailboxes, they are returned with the | |||
| \Noselect mailbox name attribute (see the description of the LIST | \Noselect mailbox name attribute (see the description of the LIST | |||
| response for more detail). | response for more details). | |||
| Server implementations are permitted to "hide" otherwise | Server implementations are permitted to "hide" otherwise | |||
| accessible mailboxes from the wildcard characters, by preventing | accessible mailboxes from the wildcard characters, by preventing | |||
| certain characters or names from matching a wildcard in certain | certain characters or names from matching a wildcard in certain | |||
| situations. For example, a UNIX-based server might restrict the | situations. For example, a UNIX-based server might restrict the | |||
| interpretation of "*" so that an initial "/" character does not | interpretation of "*" so that an initial "/" character does not | |||
| match. | match. | |||
| The special name INBOX is included in the output from LIST if it | The special name INBOX is included in the output from LIST, if | |||
| matches the input arguments and INBOX is supported by this server | INBOX is supported by this server for this user and if the | |||
| for this user. The criteria for omitting INBOX is whether SELECT | uppercase string "INBOX" matches the interpreted reference and | |||
| INBOX will return failure; it is not relevant whether the user's | mailbox name arguments with wildcards as described above. The | |||
| real INBOX resides on this or some other server. | 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: A101 LIST "" "" | Example: C: A101 LIST "" "" | |||
| S: * LIST (\Noselect) "/" "" | S: * LIST (\Noselect) "/" "" | |||
| S: A101 OK LIST Completed | S: A101 OK LIST Completed | |||
| C: A102 LIST #news.comp.mail.misc "" | C: A102 LIST #news.comp.mail.misc "" | |||
| S: * LIST (\Noselect) "." #news. | S: * LIST (\Noselect) "." #news. | |||
| S: A102 OK LIST Completed | S: A102 OK LIST Completed | |||
| C: A103 LIST /usr/staff/jones "" | C: A103 LIST /usr/staff/jones "" | |||
| S: * LIST (\Noselect) "/" / | S: * LIST (\Noselect) "/" / | |||
| S: A103 OK LIST Completed | S: A103 OK LIST Completed | |||
| C: A202 LIST ~/Mail/ % | C: A202 LIST ~/Mail/ % | |||
| S: * LIST (\Noselect) "/" ~/Mail/foo | S: * LIST (\Noselect) "/" ~/Mail/foo | |||
| S: * LIST () "/" ~/Mail/meetings | S: * LIST () "/" ~/Mail/meetings | |||
| S: A202 OK LIST completed | S: A202 OK LIST completed | |||
| 6.3.9. LSUB Command | 6.3.9. LSUB Command | |||
| Arguments: reference name | Arguments: reference name | |||
| mailbox name with possible wildcards | mailbox name with possible wildcards | |||
| Data: untagged responses: LSUB | Responses: untagged responses: LSUB | |||
| Result: OK - lsub completed | Result: OK - lsub completed | |||
| NO - lsub failure: can't list that reference or name | NO - lsub failure: can't list that reference or name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The LSUB command returns a subset of names from the set of names | The LSUB command returns a subset of names from the set of names | |||
| that the user has declared as being "active" or "subscribed". | that the user has declared as being "active" or "subscribed". | |||
| Zero or more untagged LSUB replies are returned. The arguments to | Zero or more untagged LSUB replies are returned. The arguments to | |||
| LSUB are in the same form as those for LIST. | LSUB are in the same form as those for LIST. | |||
| A server MAY validate the subscribed names to see if they still | ||||
| exist. If a name does not exist, it SHOULD be flagged with the | ||||
| \Noselect attribute in the LSUB response. The server MUST NOT | ||||
| unilaterally remove an existing mailbox name from the subscription | ||||
| list even if a mailbox by that name no longer exists. | ||||
| Example: C: A002 LSUB "#news." "comp.mail.*" | Example: C: A002 LSUB "#news." "comp.mail.*" | |||
| S: * LSUB () "." #news.comp.mail.mime | S: * LSUB () "." #news.comp.mail.mime | |||
| S: * LSUB () "." #news.comp.mail.misc | S: * LSUB () "." #news.comp.mail.misc | |||
| S: A002 OK LSUB completed | S: A002 OK LSUB completed | |||
| 6.3.10. STATUS Command | 6.3.10. STATUS Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| status data item names | status data item names | |||
| Data: untagged responses: STATUS | Responses: untagged responses: STATUS | |||
| Result: OK - status completed | Result: OK - status completed | |||
| NO - status failure: no status for that name | NO - status failure: no status for that name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The STATUS command requests the status of the indicated mailbox. | The STATUS command requests the status of the indicated mailbox. | |||
| It does not change the currently selected mailbox, nor does it | It does not change the currently selected mailbox, nor does it | |||
| affect the state of any messages in the queried mailbox (in | affect the state of any messages in the queried mailbox (in | |||
| particular, STATUS MUST NOT cause messages to lose the \Recent | particular, STATUS MUST NOT cause messages to lose the \Recent | |||
| flag). | flag). | |||
| skipping to change at page 26, line 29 ¶ | skipping to change at page 32, line 42 ¶ | |||
| S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) | S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) | |||
| S: A042 OK STATUS completed | S: A042 OK STATUS completed | |||
| 6.3.11. APPEND Command | 6.3.11. APPEND Command | |||
| Arguments: mailbox name | Arguments: mailbox name | |||
| OPTIONAL flag parenthesized list | OPTIONAL flag parenthesized list | |||
| OPTIONAL date/time string | OPTIONAL date/time string | |||
| message literal | message literal | |||
| Data: no specific data for this command | Responses: no specific responses for this command | |||
| Result: OK - append completed | Result: OK - append completed | |||
| NO - append error: can't append to that mailbox, error | NO - append error: can't append to that mailbox, error | |||
| in flags or date/time or message text | in flags or date/time or message text | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The APPEND command appends the literal argument as a new message | The APPEND command appends the literal argument as a new message | |||
| to the end of the specified destination mailbox. This argument | to the end of the specified destination mailbox. This argument | |||
| SHOULD be in the format of an [RFC-822] message. 8-bit characters | SHOULD be in the format of an [RFC-822] message. 8-bit characters | |||
| are permitted in the message. A server implementation that is | are permitted in the message. A server implementation that is | |||
| unable to preserve 8-bit data properly MUST be able to reversibly | unable to preserve 8-bit data properly MUST be able to reversibly | |||
| convert 8-bit APPEND data to 7-bit using [MIME-1] encoding. | convert 8-bit APPEND data to 7-bit using a [MIME-IMB] content | |||
| transfer encoding. | ||||
| Note: There MAY be exceptions, e.g. draft messages, in | Note: There MAY be exceptions, e.g. draft messages, in | |||
| which required [RFC-822] headers are omitted in the | which required [RFC-822] headers are omitted in the | |||
| message literal argument to APPEND. The full | message literal argument to APPEND. The full | |||
| implications of doing so MUST be understood and | implications of doing so MUST be understood and | |||
| carefully weighed. | carefully weighed. | |||
| If a flag parenthesized list or date_time are specified, that data | If a flag parenthesized list is specified, the flags SHOULD be set | |||
| SHOULD be set in the resulting message; otherwise, the defaults of | in the resulting message; otherwise, the flag list of the | |||
| empty flags and the current date/time are used. | resulting message is set empty by default. | |||
| If a date_time is specified, the internal date SHOULD be set in | ||||
| the resulting message; otherwise, the internal date of the | ||||
| resulting message is set to the current date and time by default. | ||||
| If the append is unsuccessful for any reason, the mailbox MUST be | If the append is unsuccessful for any reason, the mailbox MUST be | |||
| restored to its state before the APPEND attempt; no partial | restored to its state before the APPEND attempt; no partial | |||
| appending is permitted. | appending is permitted. | |||
| If the destination mailbox does not exist, a server MUST return an | If the destination mailbox does not exist, a server MUST return an | |||
| error, and MUST NOT automatically create the mailbox. Unless it | error, and MUST NOT automatically create the mailbox. Unless it | |||
| is certain that the destination mailbox can not be created, the | is certain that the destination mailbox can not be created, the | |||
| server MUST send the response code "[TRYCREATE]" as the prefix of | server MUST send the response code "[TRYCREATE]" as the prefix of | |||
| the text of the tagged NO response. This gives a hint to the | the text of the tagged NO response. This gives a hint to the | |||
| skipping to change at page 28, line 9 ¶ | skipping to change at page 34, line 28 ¶ | |||
| In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), | In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), | |||
| and the authenticated state commands (SELECT, EXAMINE, CREATE, | and the authenticated state commands (SELECT, EXAMINE, CREATE, | |||
| DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, and | DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, and | |||
| APPEND), the following commands are valid in the selected state: | APPEND), the following commands are valid in the selected state: | |||
| CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, and UID. | CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, and UID. | |||
| 6.4.1. CHECK Command | 6.4.1. CHECK Command | |||
| Arguments: none | Arguments: none | |||
| Data: no specific data for this command | Responses: no specific responses for this command | |||
| Result: OK - check completed | Result: OK - check completed | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The CHECK command requests a checkpoint of the currently selected | The CHECK command requests a checkpoint of the currently selected | |||
| mailbox. A checkpoint refers to any implementation-dependent | mailbox. A checkpoint refers to any implementation-dependent | |||
| housekeeping associated with the mailbox (e.g. resolving the | housekeeping associated with the mailbox (e.g. resolving the | |||
| server's in-memory state of the mailbox with the state on its | 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 | disk) that is not normally executed as part of each command. A | |||
| checkpoint MAY take a non-instantaneous amount of real time to | checkpoint MAY take a non-instantaneous amount of real time to | |||
| skipping to change at page 28, line 34 ¶ | skipping to change at page 35, line 9 ¶ | |||
| as a result of CHECK. NOOP, not CHECK, SHOULD be used for new | as a result of CHECK. NOOP, not CHECK, SHOULD be used for new | |||
| mail polling. | mail polling. | |||
| Example: C: FXXZ CHECK | Example: C: FXXZ CHECK | |||
| S: FXXZ OK CHECK Completed | S: FXXZ OK CHECK Completed | |||
| 6.4.2. CLOSE Command | 6.4.2. CLOSE Command | |||
| Arguments: none | Arguments: none | |||
| Data: no specific data for this command | Responses: no specific responses for this command | |||
| Result: OK - close completed, now in authenticated state | Result: OK - close completed, now in authenticated state | |||
| NO - close failure: no mailbox selected | NO - close failure: no mailbox selected | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The CLOSE command permanently removes from the currently selected | The CLOSE command permanently removes from the currently selected | |||
| mailbox all messages that have the \Deleted flag set, and returns | mailbox all messages that have the \Deleted flag set, and returns | |||
| to authenticated state from selected state. No untagged EXPUNGE | to authenticated state from selected state. No untagged EXPUNGE | |||
| responses are sent. | responses are sent. | |||
| skipping to change at page 29, line 16 ¶ | skipping to change at page 35, line 39 ¶ | |||
| EXPUNGE-SELECT because no untagged EXPUNGE responses (which the | EXPUNGE-SELECT because no untagged EXPUNGE responses (which the | |||
| client would probably ignore) are sent. | client would probably ignore) are sent. | |||
| Example: C: A341 CLOSE | Example: C: A341 CLOSE | |||
| S: A341 OK CLOSE completed | S: A341 OK CLOSE completed | |||
| 6.4.3. EXPUNGE Command | 6.4.3. EXPUNGE Command | |||
| Arguments: none | Arguments: none | |||
| Data: untagged responses: EXPUNGE | Responses: untagged responses: EXPUNGE | |||
| Result: OK - expunge completed | Result: OK - expunge completed | |||
| NO - expunge failure: can't expunge (e.g. permission | NO - expunge failure: can't expunge (e.g. permission | |||
| denied) | denied) | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The EXPUNGE command permanently removes from the currently | The EXPUNGE command permanently removes from the currently | |||
| selected mailbox all messages that have the \Deleted flag set. | selected mailbox all messages that have the \Deleted flag set. | |||
| Before returning an OK to the client, an untagged EXPUNGE response | Before returning an OK to the client, an untagged EXPUNGE response | |||
| is sent for each message that is removed. | is sent for each message that is removed. | |||
| skipping to change at page 30, line 10 ¶ | skipping to change at page 36, line 21 ¶ | |||
| Note: in this example, messages 3, 4, 7, and 11 had the | Note: in this example, messages 3, 4, 7, and 11 had the | |||
| \Deleted flag set. See the description of the EXPUNGE | \Deleted flag set. See the description of the EXPUNGE | |||
| response for further explanation. | response for further explanation. | |||
| 6.4.4. SEARCH Command | 6.4.4. SEARCH Command | |||
| Arguments: OPTIONAL character set specification | Arguments: OPTIONAL character set specification | |||
| searching criteria (one or more) | searching criteria (one or more) | |||
| Data: REQUIRED untagged response: SEARCH | Responses: REQUIRED untagged response: SEARCH | |||
| Result: OK - search completed | Result: OK - search completed | |||
| NO - search error: can't search that character set or | NO - search error: can't search that character set or | |||
| criteria | criteria | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The SEARCH command searches the mailbox for messages that match | The SEARCH command searches the mailbox for messages that match | |||
| the given searching criteria. Searching criteria consist of one | the given searching criteria. Searching criteria consist of one | |||
| or more search keys. The untagged SEARCH response from the server | or more search keys. The untagged SEARCH response from the server | |||
| contains a listing of message sequence numbers corresponding to | contains a listing of message sequence numbers corresponding to | |||
| those messages that match the searching criteria. | those messages that match the searching criteria. | |||
| When multiple keys are specified, the result is the intersection | When multiple keys are specified, the result is the intersection | |||
| (AND function) of all the messages that match those keys. For | (AND function) of all the messages that match those keys. For | |||
| example, the criteria DELETED FROM "SMITH" SINCE 1-Feb-1994 refers | example, the criteria DELETED FROM "SMITH" SINCE 1-Feb-1994 refers | |||
| to all deleted messages from Smith that were placed in the mailbox | to all deleted messages from Smith that were placed in the mailbox | |||
| since February 1, 1994. A search key can also be a parenthesized | since February 1, 1994. A search key can also be a parenthesized | |||
| list of one or more search keys (e.g. for use with the OR and NOT | list of one or more search keys (e.g. for use with the OR and NOT | |||
| keys). | keys). | |||
| Server implementations MAY exclude [MIME-1] body parts with | Server implementations MAY exclude [MIME-IMB] body parts with | |||
| terminal content types other than TEXT and MESSAGE from | terminal content media types other than TEXT and MESSAGE from | |||
| consideration in SEARCH matching. | consideration in SEARCH matching. | |||
| The OPTIONAL character set specification consists of the word | The OPTIONAL character set specification consists of the word | |||
| "CHARSET" followed by a registered MIME character set. It | "CHARSET" followed by a registered MIME character set. It | |||
| indicates the character set of the strings that appear in the | indicates the character set of the strings that appear in the | |||
| search criteria. [MIME-2] strings that appear in RFC 822/MIME | search criteria. [MIME-HDRS] strings that appear in RFC 822/MIME | |||
| message headers, and [MIME-1] content transfer encodings, MUST be | message headers, and [MIME-IMB] content transfer encodings, MUST | |||
| decoded before matching. US-ASCII MUST be supported; other | be decoded before matching. US-ASCII MUST be supported; other | |||
| character sets MAY be supported. If the server does not support | character sets MAY be supported. If the server does not support | |||
| the specified character set, it MUST return a tagged NO response | the specified character set, it MUST return a tagged NO response | |||
| (not a BAD). | (not a BAD). | |||
| In all search keys that use strings, a message matches the key if | In all search keys that use strings, a message matches the key if | |||
| the string is a substring of the field. The matching is | the string is a substring of the field. The matching is | |||
| case-insensitive. | case-insensitive. | |||
| The defined search keys are as follows. Refer to the Formal | The defined search keys are as follows. Refer to the Formal | |||
| Syntax section for the precise syntactic definitions of the | Syntax section for the precise syntactic definitions of the | |||
| skipping to change at page 32, line 7 ¶ | skipping to change at page 38, line 8 ¶ | |||
| envelope structure's FROM field. | envelope structure's FROM field. | |||
| HEADER <field-name> <string> | HEADER <field-name> <string> | |||
| Messages that have a header with the specified | Messages that have a header with the specified | |||
| field-name (as defined in [RFC-822]) and that | field-name (as defined in [RFC-822]) and that | |||
| contains the specified string in the [RFC-822] | contains the specified string in the [RFC-822] | |||
| field-body. | field-body. | |||
| KEYWORD <flag> Messages with the specified keyword set. | KEYWORD <flag> Messages with the specified keyword set. | |||
| LARGER <n> Messages with an RFC822.SIZE larger than the | LARGER <n> Messages with an [RFC-822] size larger than the | |||
| specified number of octets. | specified number of octets. | |||
| NEW Messages that have the \Recent flag set but not the | NEW Messages that have the \Recent flag set but not the | |||
| \Seen flag. This is functionally equivalent to | \Seen flag. This is functionally equivalent to | |||
| "(RECENT UNSEEN)". | "(RECENT UNSEEN)". | |||
| NOT <search-key> | NOT <search-key> | |||
| Messages that do not match the specified search | Messages that do not match the specified search | |||
| key. | key. | |||
| skipping to change at page 33, line 5 ¶ | skipping to change at page 38, line 47 ¶ | |||
| SENTON <date> Messages whose [RFC-822] Date: header is within the | SENTON <date> Messages whose [RFC-822] Date: header is within the | |||
| specified date. | specified date. | |||
| SENTSINCE <date> | SENTSINCE <date> | |||
| Messages whose [RFC-822] Date: header is within or | Messages whose [RFC-822] Date: header is within or | |||
| later than the specified date. | later than the specified date. | |||
| SINCE <date> Messages whose internal date is within or later | SINCE <date> Messages whose internal date is within or later | |||
| than the specified date. | than the specified date. | |||
| SMALLER <n> Messages with an RFC822.SIZE smaller than the | SMALLER <n> Messages with an [RFC-822] size smaller than the | |||
| specified number of octets. | specified number of octets. | |||
| SUBJECT <string> | SUBJECT <string> | |||
| Messages that contain the specified string in the | Messages that contain the specified string in the | |||
| envelope structure's SUBJECT field. | envelope structure's SUBJECT field. | |||
| TEXT <string> Messages that contain the specified string in the | TEXT <string> Messages that contain the specified string in the | |||
| header or body of the message. | header or body of the message. | |||
| TO <string> Messages that contain the specified string in the | TO <string> Messages that contain the specified string in the | |||
| skipping to change at page 33, line 45 ¶ | skipping to change at page 39, line 39 ¶ | |||
| Example: C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM "Smith" | Example: C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM "Smith" | |||
| S: * SEARCH 2 84 882 | S: * SEARCH 2 84 882 | |||
| S: A282 OK SEARCH completed | S: A282 OK SEARCH completed | |||
| 6.4.5. FETCH Command | 6.4.5. FETCH Command | |||
| Arguments: message set | Arguments: message set | |||
| message data item names | message data item names | |||
| Data: untagged responses: FETCH | Responses: untagged responses: FETCH | |||
| Result: OK - fetch completed | Result: OK - fetch completed | |||
| NO - fetch error: can't fetch that data | NO - fetch error: can't fetch that data | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The FETCH command retrieves data associated with a message in the | The FETCH command retrieves data associated with a message in the | |||
| mailbox. The data items to be fetched can be either a single atom | mailbox. The data items to be fetched can be either a single atom | |||
| or a parenthesized list. | or a parenthesized list. | |||
| The currently defined data items that can be fetched are: | The currently defined data items that can be fetched are: | |||
| skipping to change at page 34, line 25 ¶ | skipping to change at page 40, line 21 ¶ | |||
| BODY[<section>]<<partial>> | BODY[<section>]<<partial>> | |||
| The text of a particular body section. The section | The text of a particular body section. The section | |||
| specification is a set of zero or more part | specification is a set of zero or more part | |||
| specifiers delimited by periods. A part specifier | specifiers delimited by periods. A part specifier | |||
| is either a part number or one of the following: | is either a part number or one of the following: | |||
| HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and | HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and | |||
| TEXT. An empty section specification refers to the | TEXT. An empty section specification refers to the | |||
| entire message, including the header. | entire message, including the header. | |||
| Every message has at least one part number. Non- | Every message has at least one part number. | |||
| MIME messages, and non-multipart MIME messages with | Non-MIME messages, and non-multipart MIME messages | |||
| no encapsulated message, only have a part 1. | with no encapsulated message, only have a part 1. | |||
| Multipart messages are assigned consecutive part | Multipart messages are assigned consecutive part | |||
| numbers, as they occur in the message. If a | numbers, as they occur in the message. If a | |||
| particular part is of type message or multipart, | particular part is of type message or multipart, | |||
| its parts MUST be indicated by a period followed by | its parts MUST be indicated by a period followed by | |||
| the part number within that nested multipart part. | the part number within that nested multipart part. | |||
| A part of type MESSAGE/RFC822 also has nested part | A part of type MESSAGE/RFC822 also has nested part | |||
| numbers, referring to parts of the MESSAGE part's | numbers, referring to parts of the MESSAGE part's | |||
| body. | body. | |||
| skipping to change at page 35, line 20 ¶ | skipping to change at page 41, line 9 ¶ | |||
| names, and return a subset of the header. The | names, and return a subset of the header. The | |||
| subset returned by HEADER.FIELDS contains only | subset returned by HEADER.FIELDS contains only | |||
| those header fields with a field-name that matches | those header fields with a field-name that matches | |||
| one of the names in the list; similarly, the subset | one of the names in the list; similarly, the subset | |||
| returned by HEADER.FIELDS.NOT contains only the | returned by HEADER.FIELDS.NOT contains only the | |||
| header fields with a non-matching field-name. The | header fields with a non-matching field-name. The | |||
| field-matching is case-insensitive but otherwise | field-matching is case-insensitive but otherwise | |||
| exact. In all cases, the delimiting blank line | exact. In all cases, the delimiting blank line | |||
| between the header and the body is always included. | between the header and the body is always included. | |||
| The MIME part specifier refers to the [MIME-1] | The MIME part specifier refers to the [MIME-IMB] | |||
| header for this part. | header for this part. | |||
| The TEXT part specifier refers to the text body of | The TEXT part specifier refers to the text body of | |||
| the message, omitting the [RFC-822] header. | the message, omitting the [RFC-822] header. | |||
| Here is an example of a complex message | Here is an example of a complex message | |||
| with some of its part specifiers: | with some of its part specifiers: | |||
| HEADER ([RFC-822] header of the message) | HEADER ([RFC-822] header of the message) | |||
| TEXT MULTIPART/MIXED | TEXT MULTIPART/MIXED | |||
| 1 TEXT/PLAIN | 1 TEXT/PLAIN | |||
| 2 APPLICATION/OCTET-STREAM | 2 APPLICATION/OCTET-STREAM | |||
| 3 MESSAGE/RFC822 | 3 MESSAGE/RFC822 | |||
| 3.HEADER ([RFC-822] header of the message) | 3.HEADER ([RFC-822] header of the message) | |||
| 3.TEXT ([RFC-822] text body of the message) | 3.TEXT ([RFC-822] text body of the message) | |||
| 3.1 TEXT/PLAIN | 3.1 TEXT/PLAIN | |||
| 3.2 APPLICATION/OCTET-STREAM | 3.2 APPLICATION/OCTET-STREAM | |||
| 4 MULTIPART/MIXED | 4 MULTIPART/MIXED | |||
| 4.1 IMAGE/GIF | 4.1 IMAGE/GIF | |||
| 4.1.MIME ([MIME-1] headers for the IMAGE/GIF) | 4.1.MIME ([MIME-IMB] headers for the IMAGE/GIF) | |||
| 4.2 MESSAGE/RFC822 | 4.2 MESSAGE/RFC822 | |||
| 4.2.HEADER ([RFC-822] header of the message) | 4.2.HEADER ([RFC-822] header of the message) | |||
| 4.2.TEXT ([RFC-822] text body of the message) | 4.2.TEXT ([RFC-822] text body of the message) | |||
| 4.2.1 TEXT/PLAIN | 4.2.1 TEXT/PLAIN | |||
| 4.2.2 MULTIPART/ALTERNATIVE | 4.2.2 MULTIPART/ALTERNATIVE | |||
| 4.2.2.1 TEXT/PLAIN | 4.2.2.1 TEXT/PLAIN | |||
| 4.2.2.2 TEXT/RICHTEXT | 4.2.2.2 TEXT/RICHTEXT | |||
| It is possible to fetch a substring of the | It is possible to fetch a substring of the | |||
| designated text. This is done by appending an open | designated text. This is done by appending an open | |||
| skipping to change at page 36, line 32 ¶ | skipping to change at page 42, line 22 ¶ | |||
| the header. | the header. | |||
| The \Seen flag is implicitly set; if this causes | The \Seen flag is implicitly set; if this causes | |||
| the flags to change they SHOULD be included as part | the flags to change they SHOULD be included as part | |||
| of the FETCH responses. | of the FETCH responses. | |||
| BODY.PEEK[<section>]<<partial>> | BODY.PEEK[<section>]<<partial>> | |||
| An alternate form of BODY[<section>] that does not | An alternate form of BODY[<section>] that does not | |||
| implicitly set the \Seen flag. | implicitly set the \Seen flag. | |||
| BODYSTRUCTURE The [MIME-1] body structure of the message. This | BODYSTRUCTURE The [MIME-IMB] body structure of the message. This | |||
| is computed by the server by parsing the [MIME-1] | is computed by the server by parsing the [MIME-IMB] | |||
| header fields. | header fields. | |||
| ENVELOPE The envelope structure of the message. This is | ENVELOPE The envelope structure of the message. This is | |||
| computed by the server by parsing the [RFC-822] | computed by the server by parsing the [RFC-822] | |||
| header into the component parts, defaulting various | header into the component parts, defaulting various | |||
| fields as necessary. | fields as necessary. | |||
| FAST Macro equivalent to: (FLAGS INTERNALDATE | FAST Macro equivalent to: (FLAGS INTERNALDATE | |||
| RFC822.SIZE) | RFC822.SIZE) | |||
| FLAGS The flags that are set for this message. | FLAGS The flags that are set for this message. | |||
| FULL Macro equivalent to: (FLAGS INTERNALDATE | FULL Macro equivalent to: (FLAGS INTERNALDATE | |||
| RFC822.SIZE ENVELOPE BODY) | RFC822.SIZE ENVELOPE BODY) | |||
| INTERNALDATE The date and time of final delivery of the message | INTERNALDATE The internal date of the message. | |||
| as defined by RFC 821. | ||||
| RFC822 Functionally equivalent to BODY[], differing in the | RFC822 Functionally equivalent to BODY[], differing in the | |||
| syntax of the resulting untagged FETCH data (RFC822 | syntax of the resulting untagged FETCH data (RFC822 | |||
| is returned). | is returned). | |||
| RFC822.HEADER Functionally equivalent to BODY.PEEK[HEADER], | RFC822.HEADER Functionally equivalent to BODY.PEEK[HEADER], | |||
| differing in the syntax of the resulting untagged | differing in the syntax of the resulting untagged | |||
| FETCH data (RFC822.HEADER is returned). | FETCH data (RFC822.HEADER is returned). | |||
| RFC822.SIZE The number of octets in the message, as expressed | RFC822.SIZE The [RFC-822] size of the message. | |||
| in [RFC-822] format. | ||||
| RFC822.TEXT Functionally equivalent to BODY[TEXT], differing in | RFC822.TEXT Functionally equivalent to BODY[TEXT], differing in | |||
| the syntax of the resulting untagged FETCH data | the syntax of the resulting untagged FETCH data | |||
| (RFC822.TEXT is returned). | (RFC822.TEXT is returned). | |||
| UID The unique identifier for the message. | UID The unique identifier for the message. | |||
| Example: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)]) | Example: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)]) | |||
| S: * 2 FETCH .... | S: * 2 FETCH .... | |||
| S: * 3 FETCH .... | S: * 3 FETCH .... | |||
| S: * 4 FETCH .... | S: * 4 FETCH .... | |||
| S: A654 OK FETCH completed | S: A654 OK FETCH completed | |||
| 6.4.6. STORE Command | 6.4.6. STORE Command | |||
| Arguments: message set | Arguments: message set | |||
| message data item name | message data item name | |||
| value for message data item | value for message data item | |||
| Data: untagged responses: FETCH | Responses: untagged responses: FETCH | |||
| Result: OK - store completed | Result: OK - store completed | |||
| NO - store error: can't store that data | NO - store error: can't store that data | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The STORE command alters data associated with a message in the | The STORE command alters data associated with a message in the | |||
| mailbox. Normally, STORE will return the updated value of the | mailbox. Normally, STORE will return the updated value of the | |||
| data with an untagged FETCH response. A suffix of ".SILENT" in | data with an untagged FETCH response. A suffix of ".SILENT" in | |||
| the data item name prevents the untagged FETCH, and the server | the data item name prevents the untagged FETCH, and the server | |||
| SHOULD assume that the client has determined the updated value | SHOULD assume that the client has determined the updated value | |||
| itself or does not care about the updated value. | itself or does not care about the updated value. | |||
| Note: regardless of whether or not the ".SILENT" suffix | Note: regardless of whether or not the ".SILENT" suffix | |||
| was used, the server SHOULD send an untagged FETCH | was used, the server SHOULD send an untagged FETCH | |||
| response if a change to a message's flags from an | response if a change to a message's flags from an | |||
| external source are observed. The intent is that the | external source is observed. The intent is that the | |||
| status of the flags is determinate without a race | status of the flags is determinate without a race | |||
| condition. | condition. | |||
| The currently defined data items that can be stored are: | The currently defined data items that can be stored are: | |||
| FLAGS <flag list> | FLAGS <flag list> | |||
| Replace the flags for the message with the | Replace the flags for the message with the | |||
| argument. The new value of the flags are returned | argument. The new value of the flags are returned | |||
| as if a FETCH of those flags was done. | as if a FETCH of those flags was done. | |||
| skipping to change at page 39, line 10 ¶ | skipping to change at page 44, line 35 ¶ | |||
| S: * 2 FETCH FLAGS (\Deleted \Seen) | S: * 2 FETCH FLAGS (\Deleted \Seen) | |||
| S: * 3 FETCH FLAGS (\Deleted) | S: * 3 FETCH FLAGS (\Deleted) | |||
| S: * 4 FETCH FLAGS (\Deleted \Flagged \Seen) | S: * 4 FETCH FLAGS (\Deleted \Flagged \Seen) | |||
| S: A003 OK STORE completed | S: A003 OK STORE completed | |||
| 6.4.7. COPY Command | 6.4.7. COPY Command | |||
| Arguments: message set | Arguments: message set | |||
| mailbox name | mailbox name | |||
| Data: no specific data for this command | Responses: no specific responses for this command | |||
| Result: OK - copy completed | Result: OK - copy completed | |||
| NO - copy error: can't copy those messages or to that | NO - copy error: can't copy those messages or to that | |||
| name | name | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The COPY command copies the specified message(s) to the end of the | The COPY command copies the specified message(s) to the end of the | |||
| specified destination mailbox. The flags and internal date of the | specified destination mailbox. The flags and internal date of the | |||
| message(s) SHOULD be preserved in the copy. | message(s) SHOULD be preserved in the copy. | |||
| skipping to change at page 39, line 41 ¶ | skipping to change at page 45, line 20 ¶ | |||
| before the COPY attempt. | before the COPY attempt. | |||
| Example: C: A003 COPY 2:4 MEETING | Example: C: A003 COPY 2:4 MEETING | |||
| S: A003 OK COPY completed | S: A003 OK COPY completed | |||
| 6.4.8. UID Command | 6.4.8. UID Command | |||
| Arguments: command name | Arguments: command name | |||
| command arguments | command arguments | |||
| Data: untagged responses: FETCH, SEARCH | Responses: untagged responses: FETCH, SEARCH | |||
| Result: OK - UID command completed | Result: OK - UID command completed | |||
| NO - UID command error | NO - UID command error | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| The UID command has two forms. In the first form, it takes as its | The UID command has two forms. In the first form, it takes as its | |||
| arguments a COPY, FETCH, or STORE command with arguments | arguments a COPY, FETCH, or STORE command with arguments | |||
| appropriate for the associated command. However, the numbers in | appropriate for the associated command. However, the numbers in | |||
| the message set argument are unique identifiers instead of message | the message set argument are unique identifiers instead of message | |||
| sequence numbers. | sequence numbers. | |||
| In the second form, the UID command takes a SEARCH command with | In the second form, the UID command takes a SEARCH command with | |||
| SEARCH command arguments. The interpretation of the arguments is | SEARCH command arguments. The interpretation of the arguments is | |||
| the same as with SEARCH; however, the numbers returned in a SEARCH | the same as with SEARCH; however, the numbers returned in a SEARCH | |||
| response for a UID SEARCH command are unique identifiers instead | response for a UID SEARCH command are unique identifiers instead | |||
| of message sequence numbers. For example, the command UID SEARCH | of message sequence numbers. For example, the command UID SEARCH | |||
| 1:100 UID 443:557 returns the unique identifiers corresponding to | 1:100 UID 443:557 returns the unique identifiers corresponding to | |||
| the intersection of the message sequence number set 1:100 and the | the intersection of the message sequence number set 1:100 and the | |||
| UID set 443:557. | UID set 443:557. | |||
| A unique identifier of a message is a number, and is guaranteed | ||||
| not to refer to any other message in the mailbox. Unique | ||||
| identifiers are assigned in a strictly ascending fashion for each | ||||
| message added to the mailbox. Unlike message sequence numbers, | ||||
| unique identifiers persist across sessions. This permits a client | ||||
| to resynchronize its state from a previous session with the server | ||||
| (e.g. disconnected or offline access clients); this is discussed | ||||
| further in [IMAP-DISC]. | ||||
| Associated with every mailbox is a unique identifier validity | ||||
| value, which is sent in an UIDVALIDITY response code in an OK | ||||
| untagged response at mailbox selection time. If unique | ||||
| identifiers from an earlier session fail to persist to this | ||||
| session, the unique identifier validity value MUST be greater than | ||||
| in the earlier session. | ||||
| Note: An example of a good value to use for the unique | ||||
| identifier validity value would be a 32-bit | ||||
| representation of the creation date/time of the mailbox. | ||||
| It is alright to use a constant such as 1, but only if | ||||
| it guaranteed that unique identifiers will never be | ||||
| reused, even in the case of a mailbox being deleted and | ||||
| a new mailbox by the same name created at some future | ||||
| time. | ||||
| Message set ranges are permitted; however, there is no guarantee | Message set ranges are permitted; however, there is no guarantee | |||
| that unique identifiers be contiguous. A non-existent unique | that unique identifiers be contiguous. A non-existent unique | |||
| identifier within a message set range is ignored without any error | identifier within a message set range is ignored without any error | |||
| message generated. | message generated. | |||
| The number after the "*" in an untagged FETCH response is always a | The number after the "*" in an untagged FETCH response is always a | |||
| message sequence number, not a unique identifier, even for a UID | message sequence number, not a unique identifier, even for a UID | |||
| command response. However, server implementations MUST implicitly | command response. However, server implementations MUST implicitly | |||
| include the UID message data item as part of any FETCH response | include the UID message data item as part of any FETCH response | |||
| caused by a UID command, regardless of whether UID was specified | caused by a UID command, regardless of whether a UID was specified | |||
| as a message data item to the FETCH. | as a message data item to the FETCH. | |||
| Example: C: A999 UID FETCH 4827313:4828442 FLAGS | Example: C: A999 UID FETCH 4827313:4828442 FLAGS | |||
| S: * 23 FETCH (FLAGS (\Seen) UID 4827313) | S: * 23 FETCH (FLAGS (\Seen) UID 4827313) | |||
| S: * 24 FETCH (FLAGS (\Seen) UID 4827943) | S: * 24 FETCH (FLAGS (\Seen) UID 4827943) | |||
| S: * 25 FETCH (FLAGS (\Seen) UID 4828442) | S: * 25 FETCH (FLAGS (\Seen) UID 4828442) | |||
| S: A999 UID FETCH completed | S: A999 UID FETCH completed | |||
| 6.5. Client Commands - Experimental/Expansion | 6.5. Client Commands - Experimental/Expansion | |||
| 6.5.1. X<atom> Command | 6.5.1. X<atom> Command | |||
| Arguments: implementation defined | Arguments: implementation defined | |||
| Data: implementation defined | Responses: implementation defined | |||
| Result: OK - command completed | Result: OK - command completed | |||
| NO - failure | NO - failure | |||
| BAD - command unknown or arguments invalid | BAD - command unknown or arguments invalid | |||
| Any command prefixed with an X is an experimental command. | Any command prefixed with an X is an experimental command. | |||
| Commands which are not part of this specification, a standard or | Commands which are not part of this specification, a standard or | |||
| standards-track revision of this specification, or an | standards-track revision of this specification, or an | |||
| IESG-approved experimental protocol, MUST use the X prefix. | IESG-approved experimental protocol, MUST use the X prefix. | |||
| skipping to change at page 42, line 8 ¶ | skipping to change at page 47, line 8 ¶ | |||
| Example: C: a441 CAPABILITY | Example: C: a441 CAPABILITY | |||
| S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN | S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN | |||
| S: a441 OK CAPABILITY completed | S: a441 OK CAPABILITY completed | |||
| C: A442 XPIG-LATIN | C: A442 XPIG-LATIN | |||
| S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay | S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay | |||
| S: A442 OK XPIG-LATIN ompleted-cay | S: A442 OK XPIG-LATIN ompleted-cay | |||
| 7. Server Responses | 7. Server Responses | |||
| Server responses are in three forms: status responses, server data, | Server responses are in three forms: status responses, server data, | |||
| and command continuation request. | and command continuation request. The information contained in a | |||
| server response, identified by "Contents:" in the response | ||||
| Server response data, identified by "Data:" in the response | descriptions below, is described by function, not by syntax. The | |||
| descriptions below, are described by function, not by syntax. The | precise syntax of server responses is described in the Formal Syntax | |||
| precise syntax of server response data is described in the Formal | section. | |||
| Syntax section. | ||||
| The client MUST be prepared to accept any response at all times. | The client MUST be prepared to accept any response at all times. | |||
| Status responses that are tagged indicate the completion result of a | Status responses can be tagged or untagged. Tagged status responses | |||
| client command, and have a tag matching the command. | 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 | Some status responses, and all server data, are untagged. An | |||
| untagged response is indicated by the token "*" instead of a tag. | untagged response is indicated by the token "*" instead of a tag. | |||
| Untagged status responses indicate server greeting, or server status | Untagged status responses indicate server greeting, or server status | |||
| that does not indicate the completion of a command. For historical | that does not indicate the completion of a command (for example, an | |||
| reasons, untagged server data responses are also called "unsolicited | impending system shutdown alert). For historical reasons, untagged | |||
| data", although strictly speaking only unilateral server data is | server data responses are also called "unsolicited data", although | |||
| truly "unsolicited". | strictly speaking only unilateral server data is truly "unsolicited". | |||
| Certain server data MUST be recorded by the client when it is | Certain server data MUST be recorded by the client when it is | |||
| received; this is noted in the description of that data. Such data | received; this is noted in the description of that data. Such data | |||
| conveys critical information which affects the interpretation of all | conveys critical information which affects the interpretation of all | |||
| subsequent commands and responses (e.g. updates reflecting the | subsequent commands and responses (e.g. updates reflecting the | |||
| creation or destruction of messages). | creation or destruction of messages). | |||
| Other server data SHOULD be recorded for later reference; if the | 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 | 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 | no obvious purpose (e.g. a SEARCH response when no SEARCH command is | |||
| in progress), the data SHOULD be ignored. | in progress), the data SHOULD be ignored. | |||
| An example of unilateral untagged responses occurs when the IMAP | An example of unilateral untagged server data occurs when the IMAP | |||
| connection is in selected state. In selected state, the server | connection is in selected state. In selected state, the server | |||
| checks the mailbox for new messages as part of command execution. | checks the mailbox for new messages as part of command execution. | |||
| Normally, this is part of the execution of every command; hence, a | Normally, this is part of the execution of every command; hence, a | |||
| NOOP command suffices to check for new messages. If new messages are | NOOP command suffices to check for new messages. If new messages are | |||
| found, the server sends untagged EXISTS and RECENT responses | found, the server sends untagged EXISTS and RECENT responses | |||
| reflecting the new size of the mailbox. Server implementations that | reflecting the new size of the mailbox. Server implementations that | |||
| offer multiple simultaneous access to the same mailbox SHOULD also | offer multiple simultaneous access to the same mailbox SHOULD also | |||
| send appropriate unilateral untagged FETCH and EXPUNGE responses if | send appropriate unilateral untagged FETCH and EXPUNGE responses if | |||
| another agent changes the state of any message flags or expunges any | another agent changes the state of any message flags or expunges any | |||
| messages. | messages. | |||
| Command continuation request responses use the token "+" instead of a | Command continuation request responses use the token "+" instead of a | |||
| tag. These responses are sent by the server to indicate acceptance | tag. These responses are sent by the server to indicate acceptance | |||
| of an incomplete client command and readiness for the remainder of | of an incomplete client command and readiness for the remainder of | |||
| the command. | the command. | |||
| 7.1. Server Responses - Status Responses | 7.1. Server Responses - Status Responses | |||
| Status responses MAY include an OPTIONAL response code. A response | 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, | code consists of data inside square brackets in the form of an atom, | |||
| possibly followed by a space and arguments. The response code | possibly followed by a space and arguments. The response code | |||
| contains additional information or status codes for client software | contains additional information or status codes for client software | |||
| beyond the OK/NO/BAD condition, and are defined when there is a | beyond the OK/NO/BAD condition, and are defined when there is a | |||
| specific action that a client can take based upon the additional | specific action that a client can take based upon the additional | |||
| information. | information. | |||
| The currently defined response codes are: | The currently defined response codes are: | |||
| ALERT The human-readable text contains a special alert | ALERT The human-readable text contains a special alert | |||
| that MUST be presented to the user in a fashion | that MUST be presented to the user in a fashion | |||
| that calls the user's attention to the message. | 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 | PARSE The human-readable text represents an error in | |||
| parsing the [RFC-822] or [MIME-1] headers of a | parsing the [RFC-822] or [MIME-IMB] headers of a | |||
| message in the mailbox. | message in the mailbox. | |||
| PERMANENTFLAGS Followed by a parenthesized list of flags, | PERMANENTFLAGS Followed by a parenthesized list of flags, | |||
| indicates which of the known flags that the client | indicates which of the known flags that the client | |||
| can change permanently. Any flags that are in the | can change permanently. Any flags that are in the | |||
| FLAGS untagged response, but not the PERMANENTFLAGS | FLAGS untagged response, but not the PERMANENTFLAGS | |||
| list, can not be set permanently. If the client | list, can not be set permanently. If the client | |||
| attempts to STORE a flag that is not in the | attempts to STORE a flag that is not in the | |||
| PERMANENTFLAGS list, the server will either reject | PERMANENTFLAGS list, the server will either reject | |||
| it with a NO reply or store the state for the | it with a NO reply or store the state for the | |||
| skipping to change at page 44, line 29 ¶ | skipping to change at page 49, line 34 ¶ | |||
| UNSEEN Followed by a decimal number, indicates the number | UNSEEN Followed by a decimal number, indicates the number | |||
| of the first message without the \Seen flag set. | of the first message without the \Seen flag set. | |||
| Additional response codes defined by particular client or server | Additional response codes defined by particular client or server | |||
| implementations SHOULD be prefixed with an "X" until they are | implementations SHOULD be prefixed with an "X" until they are | |||
| added to a revision of this protocol. Client implementations | added to a revision of this protocol. Client implementations | |||
| SHOULD ignore response codes that they do not recognize. | SHOULD ignore response codes that they do not recognize. | |||
| 7.1.1. OK Response | 7.1.1. OK Response | |||
| Data: OPTIONAL response code | Contents: OPTIONAL response code | |||
| human-readable text | human-readable text | |||
| The OK response indicates an information message from the server. | The OK response indicates an information message from the server. | |||
| When tagged, it indicates successful completion of the associated | When tagged, it indicates successful completion of the associated | |||
| command. The human-readable text MAY be presented to the user as | command. The human-readable text MAY be presented to the user as | |||
| an information message. The untagged form indicates an | an information message. The untagged form indicates an | |||
| information-only message; the nature of the information MAY be | information-only message; the nature of the information MAY be | |||
| indicated by a response code. | indicated by a response code. | |||
| The untagged form is also used as one of three possible greetings | The untagged form is also used as one of three possible greetings | |||
| at session startup. It indicates that the session is not yet | at session startup. It indicates that the session is not yet | |||
| authenticated and that a LOGIN command is needed. | authenticated and that a LOGIN command is needed. | |||
| Example: S: * OK IMAP4rev1 server ready | Example: S: * OK IMAP4rev1 server ready | |||
| C: A001 LOGIN fred blurdybloop | C: A001 LOGIN fred blurdybloop | |||
| S: * OK [ALERT] System shutdown in 10 minutes | S: * OK [ALERT] System shutdown in 10 minutes | |||
| S: A001 OK LOGIN Completed | S: A001 OK LOGIN Completed | |||
| 7.1.2. NO Response | 7.1.2. NO Response | |||
| Data: OPTIONAL response code | Contents: OPTIONAL response code | |||
| human-readable text | human-readable text | |||
| The NO response indicates an operational error message from the | The NO response indicates an operational error message from the | |||
| server. When tagged, it indicates unsuccessful completion of the | server. When tagged, it indicates unsuccessful completion of the | |||
| associated command. The untagged form indicates a warning; the | associated command. The untagged form indicates a warning; the | |||
| command can still complete successfully. The human-readable text | command can still complete successfully. The human-readable text | |||
| describes the condition. | describes the condition. | |||
| Example: C: A222 COPY 1:2 owatagusiam | Example: C: A222 COPY 1:2 owatagusiam | |||
| S: * NO Disk is 98% full, please delete unnecessary data | S: * NO Disk is 98% full, please delete unnecessary data | |||
| S: A222 OK COPY completed | S: A222 OK COPY completed | |||
| C: A223 COPY 3:200 blurdybloop | C: A223 COPY 3:200 blurdybloop | |||
| S: * NO Disk is 98% full, please delete unnecessary data | S: * NO Disk is 98% full, please delete unnecessary data | |||
| S: * NO Disk is 99% full, please delete unnecessary data | S: * NO Disk is 99% full, please delete unnecessary data | |||
| S: A223 NO COPY failed: disk is full | S: A223 NO COPY failed: disk is full | |||
| 7.1.3. BAD Response | 7.1.3. BAD Response | |||
| Data: OPTIONAL response code | Contents: OPTIONAL response code | |||
| human-readable text | human-readable text | |||
| The BAD response indicates an error message from the server. When | The BAD response indicates an error message from the server. When | |||
| tagged, it reports a protocol-level error in the client's command; | tagged, it reports a protocol-level error in the client's command; | |||
| the tag indicates the command that caused the error. The untagged | the tag indicates the command that caused the error. The untagged | |||
| form indicates a protocol-level error for which the associated | form indicates a protocol-level error for which the associated | |||
| command can not be determined; it can also indicate an internal | command can not be determined; it can also indicate an internal | |||
| server failure. The human-readable text describes the condition. | server failure. The human-readable text describes the condition. | |||
| Example: C: ...very long command line... | Example: C: ...very long command line... | |||
| S: * BAD Command line too long | S: * BAD Command line too long | |||
| C: ...empty line... | C: ...empty line... | |||
| S: * BAD Empty command line | S: * BAD Empty command line | |||
| C: A443 EXPUNGE | C: A443 EXPUNGE | |||
| S: * BAD Disk crash, attempting salvage to a new disk! | S: * BAD Disk crash, attempting salvage to a new disk! | |||
| S: * OK Salvage successful, no data lost | S: * OK Salvage successful, no data lost | |||
| S: A443 OK Expunge completed | S: A443 OK Expunge completed | |||
| 7.1.4. PREAUTH Response | 7.1.4. PREAUTH Response | |||
| Data: OPTIONAL response code | Contents: OPTIONAL response code | |||
| human-readable text | human-readable text | |||
| The PREAUTH response is always untagged, and is one of three | The PREAUTH response is always untagged, and is one of three | |||
| possible greetings at session startup. It indicates that the | possible greetings at session startup. It indicates that the | |||
| session has already been authenticated by external means and thus | session has already been authenticated by external means and thus | |||
| no LOGIN command is needed. | no LOGIN command is needed. | |||
| Example: S: * PREAUTH IMAP4rev1 server logged in as Smith | Example: S: * PREAUTH IMAP4rev1 server logged in as Smith | |||
| 7.1.5. BYE Response | 7.1.5. BYE Response | |||
| Data: OPTIONAL response code | Contents: OPTIONAL response code | |||
| human-readable text | human-readable text | |||
| The BYE response is always untagged, and indicates that the server | The BYE response is always untagged, and indicates that the server | |||
| is about to close the connection. The human-readable text MAY be | 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 | displayed to the user in a status report by the client. The BYE | |||
| response is sent under one of four conditions: | response is sent under one of four conditions: | |||
| 1) as part of a normal logout sequence. The server will close | 1) as part of a normal logout sequence. The server will close | |||
| the connection after sending the tagged OK response to the | the connection after sending the tagged OK response to the | |||
| LOGOUT command. | LOGOUT command. | |||
| skipping to change at page 47, line 7 ¶ | skipping to change at page 52, line 7 ¶ | |||
| The difference between a BYE that occurs as part of a normal | The difference between a BYE that occurs as part of a normal | |||
| LOGOUT sequence (the first case) and a BYE that occurs because of | LOGOUT sequence (the first case) and a BYE that occurs because of | |||
| a failure (the other three cases) is that the connection closes | a failure (the other three cases) is that the connection closes | |||
| immediately in the failure case. | immediately in the failure case. | |||
| Example: S: * BYE Autologout; idle for too long | Example: S: * BYE Autologout; idle for too long | |||
| 7.2. Server Responses - Server and Mailbox Status | 7.2. Server Responses - Server and Mailbox Status | |||
| These responses are always untagged. This is how server data are | These responses are always untagged. This is how server and mailbox | |||
| transmitted from the server to the client, often as a result of a | status data are transmitted from the server to the client. Many of | |||
| command with the same name. | these responses typically result from a command with the same name. | |||
| 7.2.1. CAPABILITY Response | 7.2.1. CAPABILITY Response | |||
| Data: capability listing | Contents: capability listing | |||
| The CAPABILITY response occurs as a result of a CAPABILITY | The CAPABILITY response occurs as a result of a CAPABILITY | |||
| command. The capability listing contains a space-separated | command. The capability listing contains a space-separated | |||
| listing of capability names that the server supports. The | listing of capability names that the server supports. The | |||
| capability listing MUST include the atom "IMAP4rev1". | capability listing MUST include the atom "IMAP4rev1". | |||
| A capability name which begins with "AUTH=" indicates that the | A capability name which begins with "AUTH=" indicates that the | |||
| server supports that particular authentication mechanism. | server supports that particular authentication mechanism. | |||
| Other capability names indicate that the server supports an | Other capability names indicate that the server supports an | |||
| skipping to change at page 47, line 42 ¶ | skipping to change at page 52, line 42 ¶ | |||
| an "X". | an "X". | |||
| Client implementations SHOULD NOT require any capability name | Client implementations SHOULD NOT require any capability name | |||
| other than "IMAP4rev1", and MUST ignore any unknown capability | other than "IMAP4rev1", and MUST ignore any unknown capability | |||
| names. | names. | |||
| Example: S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN | Example: S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN | |||
| 7.2.2. LIST Response | 7.2.2. LIST Response | |||
| Data: name attributes | Contents: name attributes | |||
| hierarchy delimiter | hierarchy delimiter | |||
| name | name | |||
| The LIST response occurs as a result of a LIST command. It | The LIST response occurs as a result of a LIST command. It | |||
| returns a single name that matches the LIST specification. There | returns a single name that matches the LIST specification. There | |||
| can be multiple LIST responses for a single LIST command. | can be multiple LIST responses for a single LIST command. | |||
| Four name attributes are defined: | Four name attributes are defined: | |||
| \Noinferiors It is not possible for any child levels of | \Noinferiors It is not possible for any child levels of | |||
| skipping to change at page 48, line 43 ¶ | skipping to change at page 53, line 43 ¶ | |||
| The name represents an unambiguous left-to-right hierarchy, and | The name represents an unambiguous left-to-right hierarchy, and | |||
| MUST be valid for use as a reference in LIST and LSUB commands. | 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 | Unless \Noselect is indicated, the name MUST also be valid as an | |||
| argument for commands, such as SELECT, that accept mailbox names. | argument for commands, such as SELECT, that accept mailbox names. | |||
| Example: S: * LIST (\Noselect) "/" ~/Mail/foo | Example: S: * LIST (\Noselect) "/" ~/Mail/foo | |||
| 7.2.3. LSUB Response | 7.2.3. LSUB Response | |||
| Data: name attributes | Contents: name attributes | |||
| hierarchy delimiter | hierarchy delimiter | |||
| name | name | |||
| The LSUB response occurs as a result of an LSUB command. It | The LSUB response occurs as a result of an LSUB command. It | |||
| returns a single name that matches the LSUB specification. There | returns a single name that matches the LSUB specification. There | |||
| can be multiple LSUB responses for a single LSUB command. The | can be multiple LSUB responses for a single LSUB command. The | |||
| data is identical in format to the LIST response. | data is identical in format to the LIST response. | |||
| Example: S: * LSUB () "." #news.comp.mail.misc | Example: S: * LSUB () "." #news.comp.mail.misc | |||
| 7.2.4 STATUS Response | 7.2.4 STATUS Response | |||
| Data: name | Contents: name | |||
| status parenthesized list | status parenthesized list | |||
| The STATUS response occurs as a result of an STATUS command. It | The STATUS response occurs as a result of an STATUS command. It | |||
| returns the mailbox name that matches the STATUS specification and | returns the mailbox name that matches the STATUS specification and | |||
| the requested mailbox status information. | the requested mailbox status information. | |||
| Example: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) | Example: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) | |||
| 7.2.5. SEARCH Response | 7.2.5. SEARCH Response | |||
| Data: zero or more numbers | Contents: zero or more numbers | |||
| The SEARCH response occurs as a result of a SEARCH or UID SEARCH | The SEARCH response occurs as a result of a SEARCH or UID SEARCH | |||
| command. The number(s) refer to those messages that match the | command. The number(s) refer to those messages that match the | |||
| search criteria. For SEARCH, these are message sequence numbers; | search criteria. For SEARCH, these are message sequence numbers; | |||
| for UID SEARCH, these are unique identifiers. Each number is | for UID SEARCH, these are unique identifiers. Each number is | |||
| delimited by a space. | delimited by a space. | |||
| Example: S: * SEARCH 2 3 6 | Example: S: * SEARCH 2 3 6 | |||
| 7.2.6. FLAGS Response | 7.2.6. FLAGS Response | |||
| Data: flag parenthesized list | Contents: flag parenthesized list | |||
| The FLAGS response occurs as a result of a SELECT or EXAMINE | The FLAGS response occurs as a result of a SELECT or EXAMINE | |||
| command. The flag parenthesized list identifies the flags (at a | command. The flag parenthesized list identifies the flags (at a | |||
| minimum, the system-defined flags) that are applicable for this | minimum, the system-defined flags) that are applicable for this | |||
| mailbox. Flags other than the system flags can also exist, | mailbox. Flags other than the system flags can also exist, | |||
| depending on server implementation. | depending on server implementation. | |||
| The update from the FLAGS response MUST be recorded by the client. | The update from the FLAGS response MUST be recorded by the client. | |||
| Example: S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | Example: S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | |||
| 7.3. Server Responses - Message Status | 7.3. Server Responses - Mailbox Size | |||
| These responses are always untagged. This is how message data are | These responses are always untagged. This is how changes in the size | |||
| transmitted from the server to the client, often as a result of a | of the mailbox are trasnmitted from the server to the client. | |||
| command with the same name. Immediately following the "*" token is a | Immediately following the "*" token is a number that represents a | |||
| number that represents either a message sequence number or a message | message count. | |||
| count. | ||||
| 7.3.1. EXISTS Response | 7.3.1. EXISTS Response | |||
| Data: none | Contents: none | |||
| The EXISTS response reports the number of messages in the mailbox. | The EXISTS response reports the number of messages in the mailbox. | |||
| This response occurs as a result of a SELECT or EXAMINE command, | This response occurs as a result of a SELECT or EXAMINE command, | |||
| and if the size of the mailbox changes (e.g. new mail). | and if the size of the mailbox changes (e.g. new mail). | |||
| The update from the EXISTS response MUST be recorded by the | The update from the EXISTS response MUST be recorded by the | |||
| client. | client. | |||
| Example: S: * 23 EXISTS | Example: S: * 23 EXISTS | |||
| 7.3.2. RECENT Response | 7.3.2. RECENT Response | |||
| Data: none | Contents: none | |||
| The RECENT response reports the number of messages that have | The RECENT response reports the number of messages that have | |||
| arrived since the previous time a SELECT command was done on this | arrived since the previous time a SELECT command was done on this | |||
| mailbox. This response occurs as a result of a SELECT or EXAMINE | 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). | 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 (only the first | ||||
| client to discover a new message will mark it 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, or to do a SEARCH RECENT. See | ||||
| the description of the SEARCH command for more details. | ||||
| The update from the RECENT response MUST be recorded by the | The update from the RECENT response MUST be recorded by the | |||
| client. | client. | |||
| Example: S: * 5 RECENT | Example: S: * 5 RECENT | |||
| 7.3.3. EXPUNGE Response | 7.4. Server Responses - Message Status | |||
| Data: none | 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 | The EXPUNGE response reports that the specified message sequence | |||
| number has been permanently removed from the mailbox. The message | number has been permanently removed from the mailbox. The message | |||
| sequence number for each successive message in the mailbox is | sequence number for each successive message in the mailbox is | |||
| immediately decremented by 1, and this decrement is reflected in | immediately decremented by 1, and this decrement is reflected in | |||
| message sequence numbers in subsequent responses (including other | message sequence numbers in subsequent responses (including other | |||
| untagged EXPUNGE responses). | untagged EXPUNGE responses). | |||
| As a result of the immediate decrement rule, message sequence | As a result of the immediate decrement rule, message sequence | |||
| numbers that appear in a set of successive EXPUNGE responses | numbers that appear in a set of successive EXPUNGE responses | |||
| skipping to change at page 51, line 26 ¶ | skipping to change at page 57, line 5 ¶ | |||
| progress; nor while responding to a FETCH, STORE, or SEARCH | progress; nor while responding to a FETCH, STORE, or SEARCH | |||
| command. This rule is necessary to prevent a loss of | command. This rule is necessary to prevent a loss of | |||
| synchronization of message sequence numbers between client and | synchronization of message sequence numbers between client and | |||
| server. | server. | |||
| The update from the EXPUNGE response MUST be recorded by the | The update from the EXPUNGE response MUST be recorded by the | |||
| client. | client. | |||
| Example: S: * 44 EXPUNGE | Example: S: * 44 EXPUNGE | |||
| 7.3.4. FETCH Response | 7.4.2. FETCH Response | |||
| Data: message data | Contents: message data | |||
| The FETCH response returns data about a message to the client. | The FETCH response returns data about a message to the client. | |||
| The data are pairs of data item names and their values in | The data are pairs of data item names and their values in | |||
| parentheses. This response occurs as the result of a FETCH or | parentheses. This response occurs as the result of a FETCH or | |||
| STORE command, as well as by unilateral server decision (e.g. flag | STORE command, as well as by unilateral server decision (e.g. flag | |||
| updates). | updates). | |||
| The current data items are: | The current data items are: | |||
| BODY A form of BODYSTRUCTURE without extension data. | BODY A form of BODYSTRUCTURE without extension data. | |||
| skipping to change at page 52, line 5 ¶ | skipping to change at page 57, line 30 ¶ | |||
| A string expressing the body contents of the | A string expressing the body contents of the | |||
| specified section. The string SHOULD be | specified section. The string SHOULD be | |||
| interpreted by the client according to the content | interpreted by the client according to the content | |||
| transfer encoding, body type, and subtype. | transfer encoding, body type, and subtype. | |||
| If the origin octet is specified, this string is a | If the origin octet is specified, this string is a | |||
| substring of the entire body contents, starting at | substring of the entire body contents, starting at | |||
| that origin octet. This means that BODY[]<0> MAY | that origin octet. This means that BODY[]<0> MAY | |||
| be truncated, but BODY[] is NEVER truncated. | be truncated, but BODY[] is NEVER truncated. | |||
| 8-bit textual data is permitted if a [MIME-1] | 8-bit textual data is permitted if a [MIME-IMB] | |||
| character set identifier is part of the body | character set identifier is part of the body | |||
| parameter parenthesized list for this section. | parameter parenthesized list for this section. | |||
| Note that message headers (part specifiers HEADER | Note that message headers (part specifiers HEADER | |||
| or MIME, or the header part of a MESSAGE/RFC822 | or MIME, or the header part of a MESSAGE/RFC822 | |||
| part), MUST be 7-bit; 8-bit characters are not | part), MUST be 7-bit; 8-bit characters are not | |||
| permitted in headers. Note also that the blank | permitted in headers. Note also that the blank | |||
| line at the end of the header is always included in | line at the end of the header is always included in | |||
| header data. | header data. | |||
| Non-textual data such as binary data MUST be | Non-textual data such as binary data MUST be | |||
| skipping to change at page 52, line 47 ¶ | skipping to change at page 58, line 25 ¶ | |||
| fetch. Extension data, if present, MUST be in the | fetch. Extension data, if present, MUST be in the | |||
| defined order. | defined order. | |||
| The extension data of a multipart body part are in | The extension data of a multipart body part are in | |||
| the following order: | the following order: | |||
| body parameter parenthesized list | body parameter parenthesized list | |||
| A parenthesized list of attribute/value pairs | A parenthesized list of attribute/value pairs | |||
| [e.g. ("foo" "bar" "baz" "rag") where "bar" is | [e.g. ("foo" "bar" "baz" "rag") where "bar" is | |||
| the value of "foo" and "rag" is the value of | the value of "foo" and "rag" is the value of | |||
| "baz"] as defined in [MIME-1]. | "baz"] as defined in [MIME-IMB]. | |||
| body disposition | body disposition | |||
| A parenthesized list, consisting of a | A parenthesized list, consisting of a | |||
| disposition type string followed by a | disposition type string followed by a | |||
| parenthesized list of disposition | parenthesized list of disposition | |||
| attribute/value pairs. The disposition type and | attribute/value pairs. The disposition type and | |||
| attribute names will be defined in a future | attribute names will be defined in a future | |||
| standards-track revision to [RFC-1806]. | standards-track revision to [DISPOSITION]. | |||
| body language | body language | |||
| A string or parenthesized list giving the body | A string or parenthesized list giving the body | |||
| language value as defined in [RFC-1766]. | language value as defined in [LANGUAGE-TAGS]. | |||
| Any following extension data are not yet defined in | Any following extension data are not yet defined in | |||
| this version of the protocol. Such extension data | this version of the protocol. Such extension data | |||
| can consist of zero or more NILs, strings, numbers, | can consist of zero or more NILs, strings, numbers, | |||
| or potentially nested parenthesized lists of such | or potentially nested parenthesized lists of such | |||
| data. Client implementations that do a | data. Client implementations that do a | |||
| BODYSTRUCTURE fetch MUST be prepared to accept such | BODYSTRUCTURE fetch MUST be prepared to accept such | |||
| extension data. Server implementations MUST NOT | extension data. Server implementations MUST NOT | |||
| send such extension data until it has been defined | send such extension data until it has been defined | |||
| by a revision of this protocol. | by a revision of this protocol. | |||
| The basic fields of a non-multipart body part are | The basic fields of a non-multipart body part are | |||
| in the following order: | in the following order: | |||
| body type | body type | |||
| A string giving the content type name as defined | A string giving the content media type name as | |||
| in [MIME-1]. | defined in [MIME-IMB]. | |||
| body subtype | body subtype | |||
| A string giving the content subtype name as | A string giving the content subtype name as | |||
| defined in [MIME-1]. | defined in [MIME-IMB]. | |||
| body parameter parenthesized list | body parameter parenthesized list | |||
| A parenthesized list of attribute/value pairs | A parenthesized list of attribute/value pairs | |||
| [e.g. ("foo" "bar" "baz" "rag") where "bar" is | [e.g. ("foo" "bar" "baz" "rag") where "bar" is | |||
| the value of "foo" and "rag" is the value of | the value of "foo" and "rag" is the value of | |||
| "baz"] as defined in [MIME-1]. | "baz"] as defined in [MIME-IMB]. | |||
| body id | body id | |||
| A string giving the content id as defined in | A string giving the content id as defined in | |||
| [MIME-1]. | [MIME-IMB]. | |||
| body description | body description | |||
| A string giving the content description as | A string giving the content description as | |||
| defined in [MIME-1]. | defined in [MIME-IMB]. | |||
| body encoding | body encoding | |||
| A string giving the content transfer encoding as | A string giving the content transfer encoding as | |||
| defined in [MIME-1]. | defined in [MIME-IMB]. | |||
| body size | body size | |||
| A number giving the size of the body in octets. | A number giving the size of the body in octets. | |||
| Note that this size is the size in its transfer | Note that this size is the size in its transfer | |||
| encoding and not the resulting size after any | encoding and not the resulting size after any | |||
| decoding. | decoding. | |||
| A body type of type MESSAGE and subtype RFC822 | A body type of type MESSAGE and subtype RFC822 | |||
| contains, immediately after the basic fields, the | contains, immediately after the basic fields, the | |||
| envelope structure, body structure, and size in | envelope structure, body structure, and size in | |||
| text lines of the encapsulated message. | text lines of the encapsulated message. | |||
| A body type of type TEXT contains, immediately | A body type of type TEXT contains, immediately | |||
| after the basic fields, the size of the body in | after the basic fields, the size of the body in | |||
| text lines. Note that this size is the size in its | text lines. Note that this size is the size in its | |||
| transfer encoding and not the resulting size after | content transfer encoding and not the resulting | |||
| any decoding. | size after any decoding. | |||
| Extension data follows the basic fields and the | Extension data follows the basic fields and the | |||
| type-specific fields listed above. Extension data | type-specific fields listed above. Extension data | |||
| is never returned with the BODY fetch, but can be | is never returned with the BODY fetch, but can be | |||
| returned with a BODYSTRUCTURE fetch. Extension | returned with a BODYSTRUCTURE fetch. Extension | |||
| data, if present, MUST be in the defined order. | data, if present, MUST be in the defined order. | |||
| The extension data of a non-multipart body part are | The extension data of a non-multipart body part are | |||
| in the following order: | in the following order: | |||
| skipping to change at page 54, line 40 ¶ | skipping to change at page 60, line 19 ¶ | |||
| A string giving the body MD5 value as defined in | A string giving the body MD5 value as defined in | |||
| [MD5]. | [MD5]. | |||
| body disposition | body disposition | |||
| A parenthesized list with the same content and | A parenthesized list with the same content and | |||
| function as the body disposition for a multipart | function as the body disposition for a multipart | |||
| body part. | body part. | |||
| body language | body language | |||
| A string or parenthesized list giving the body | A string or parenthesized list giving the body | |||
| language value as defined in [RFC-1766]. | language value as defined in [LANGUAGE-TAGS]. | |||
| Any following extension data are not yet defined in | Any following extension data are not yet defined in | |||
| this version of the protocol, and would be as | this version of the protocol, and would be as | |||
| described above under multipart extension data. | described above under multipart extension data. | |||
| ENVELOPE A parenthesized list that describes the envelope | ENVELOPE A parenthesized list that describes the envelope | |||
| structure of a message. This is computed by the | structure of a message. This is computed by the | |||
| server by parsing the [RFC-822] header into the | server by parsing the [RFC-822] header into the | |||
| component parts, defaulting various fields as | component parts, defaulting various fields as | |||
| necessary. | necessary. | |||
| skipping to change at page 56, line 4 ¶ | skipping to change at page 61, line 16 ¶ | |||
| is not applicable is presented as NIL. Note that | is not applicable is presented as NIL. Note that | |||
| the server MUST default the reply-to and sender | the server MUST default the reply-to and sender | |||
| fields from the from field; a client is not | fields from the from field; a client is not | |||
| expected to know to do this. | expected to know to do this. | |||
| FLAGS A parenthesized list of flags that are set for this | FLAGS A parenthesized list of flags that are set for this | |||
| message. This can include keywords as well as the | message. This can include keywords as well as the | |||
| following system flags: | following system flags: | |||
| \Seen Message has been read | \Seen Message has been read | |||
| \Answered Message has been answered | \Answered Message has been answered | |||
| \Flagged Message is "flagged" for urgent/special | \Flagged Message is "flagged" for urgent/special | |||
| attention | attention | |||
| \Deleted Message is "deleted" for removal by | \Deleted Message is "deleted" for removal by | |||
| later EXPUNGE | later EXPUNGE | |||
| \Draft Message has not completed composition | \Draft Message has not completed composition | |||
| (marked as a draft). | (marked as a draft). | |||
| as well as the following special flag, which can be | as well as the following special flag, which can be | |||
| fetched but not stored: | fetched but not stored: | |||
| \Recent Message has arrived since the previous | \Recent Message has arrived since the previous | |||
| time this mailbox was selected. | time this mailbox was selected. | |||
| INTERNALDATE A string containing the date and time of final | INTERNALDATE A string representing the internal date of the | |||
| delivery of the message as defined by [SMTP]. | message. | |||
| RFC822 Equivalent to BODY[]. | RFC822 Equivalent to BODY[]. | |||
| RFC822.HEADER Equivalent to BODY.PEEK[HEADER]. | RFC822.HEADER Equivalent to BODY.PEEK[HEADER]. | |||
| RFC822.SIZE A number expressing the number of octets in the | RFC822.SIZE A number expressing the [RFC-822] size of the | |||
| message in [RFC-822] format. | message. | |||
| RFC822.TEXT Equivalent to BODY[TEXT]. | RFC822.TEXT Equivalent to BODY[TEXT]. | |||
| UID A number expressing the unique identifier of the | UID A number expressing the unique identifier of the | |||
| message. | message. | |||
| Example: S: * 23 FETCH (FLAGS (\Seen) RFC822.SIZE 44827) | Example: S: * 23 FETCH (FLAGS (\Seen) RFC822.SIZE 44827) | |||
| 7.4. Server Responses - Command Continuation Request | 7.5. Server Responses - Command Continuation Request | |||
| The command completion request response is indicated by a "+" token | The command continuation request response is indicated by a "+" token | |||
| instead of a tag. This form of response indicates that the server is | 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 | ready to accept the continuation of a command from the client. The | |||
| remainder of this response is a line of text. | remainder of this response is a line of text. | |||
| This response is used in the AUTHORIZATION command to transmit server | This response is used in the AUTHORIZATION command to transmit server | |||
| data to the client, and request additional client data. This | data to the client, and request additional client data. This | |||
| response is also used if an argument to any command is a literal. | 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 client is not permitted to send the octets of the literal unless | |||
| the server indicates that it expects it. This permits the server to | the server indicates that it expects it. This permits the server to | |||
| skipping to change at page 58, line 22 ¶ | skipping to change at page 63, line 22 ¶ | |||
| S: a001 OK LOGIN completed | S: a001 OK LOGIN completed | |||
| C: a002 select inbox | C: a002 select inbox | |||
| S: * 18 EXISTS | S: * 18 EXISTS | |||
| S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) | |||
| S: * 2 RECENT | S: * 2 RECENT | |||
| S: * OK [UNSEEN 17] Message 17 is the first unseen message | S: * OK [UNSEEN 17] Message 17 is the first unseen message | |||
| S: * OK [UIDVALIDITY 3857529045] UIDs valid | S: * OK [UIDVALIDITY 3857529045] UIDs valid | |||
| S: a002 OK [READ-WRITE] SELECT completed | S: a002 OK [READ-WRITE] SELECT completed | |||
| C: a003 fetch 12 full | C: a003 fetch 12 full | |||
| S: * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700" | S: * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700" | |||
| RFC822.SIZE 4282 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)" | RFC822.SIZE 4286 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)" | |||
| "IMAP4rev1 WG mtg summary and minutes" | "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")) | (("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 "imap" "cac.washington.edu")) | |||
| ((NIL NIL "minutes" "CNRI.Reston.VA.US") | ((NIL NIL "minutes" "CNRI.Reston.VA.US") | |||
| ("John Klensin" NIL "KLENSIN" "INFOODS.MIT.EDU")) NIL NIL | ("John Klensin" NIL "KLENSIN" "INFOODS.MIT.EDU")) NIL NIL | |||
| "<B27397-0100000@cac.washington.edu>") | "<B27397-0100000@cac.washington.edu>") | |||
| BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92)) | BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92)) | |||
| S: a003 OK FETCH completed | S: a003 OK FETCH completed | |||
| skipping to change at page 61, line 33 ¶ | skipping to change at page 66, line 33 ¶ | |||
| body_fld_lang ::= nstring / "(" 1#string ")" | body_fld_lang ::= nstring / "(" 1#string ")" | |||
| body_fld_lines ::= number | body_fld_lines ::= number | |||
| body_fld_md5 ::= nstring | body_fld_md5 ::= nstring | |||
| body_fld_octets ::= number | body_fld_octets ::= number | |||
| body_fld_param ::= "(" 1#(string SPACE string) ")" / nil | body_fld_param ::= "(" 1#(string SPACE string) ")" / nil | |||
| body_fld_subtyp ::= string | ||||
| body_type_1part ::= (body_type_basic / body_type_msg / body_type_text) | body_type_1part ::= (body_type_basic / body_type_msg / body_type_text) | |||
| [SPACE body_ext_1part] | [SPACE body_ext_1part] | |||
| body_type_basic ::= (<"> ("APPLICATION" / "AUDIO" / "IMAGE" / | body_type_basic ::= media_basic SPACE body_fields | |||
| "MESSAGE" / "VIDEO") <">) / string) SPACE | ||||
| body_fld_subtyp SPACE body_fields | ||||
| ;; MESSAGE subtype MUST NOT be "RFC822" | ;; MESSAGE subtype MUST NOT be "RFC822" | |||
| body_type_mpart ::= 1*body SPACE body_fld_subtyp | body_type_mpart ::= 1*body SPACE media_subtype | |||
| [SPACE body_ext_mpart] | [SPACE body_ext_mpart] | |||
| body_type_msg ::= <"> "MESSAGE" <"> SPACE <"> "RFC822" <"> SPACE | body_type_msg ::= media_message SPACE body_fields SPACE envelope | |||
| body_fields SPACE envelope SPACE body SPACE | SPACE body SPACE body_fld_lines | |||
| body_fld_lines | ||||
| body_type_text ::= <"> "TEXT" <"> SPACE body_fld_subtyp SPACE | body_type_text ::= media_text SPACE body_fields SPACE body_fld_lines | |||
| body_fields SPACE body_fld_lines | ||||
| capability ::= "AUTH=" auth_type / atom | capability ::= "AUTH=" auth_type / atom | |||
| ;; New capabilities MUST begin with "X" or be | ;; New capabilities MUST begin with "X" or be | |||
| ;; registered with IANA as standard or | ;; registered with IANA as standard or | |||
| ;; standards-track | ;; standards-track | |||
| capability_data ::= "CAPABILITY" SPACE [1#capability SPACE] "IMAP4rev1" | capability_data ::= "CAPABILITY" SPACE [1#capability SPACE] "IMAP4rev1" | |||
| [SPACE 1#capability] | [SPACE 1#capability] | |||
| ;; IMAP4rev1 servers which offer RFC-1730 | ;; IMAP4rev1 servers which offer RFC-1730 | |||
| ;; compatibility MUST list "IMAP4" as the first | ;; compatibility MUST list "IMAP4" as the first | |||
| skipping to change at page 65, line 4 ¶ | skipping to change at page 69, line 45 ¶ | |||
| list ::= "LIST" SPACE mailbox SPACE list_mailbox | list ::= "LIST" SPACE mailbox SPACE list_mailbox | |||
| list_mailbox ::= 1*(ATOM_CHAR / list_wildcards) / string | list_mailbox ::= 1*(ATOM_CHAR / list_wildcards) / string | |||
| list_wildcards ::= "%" / "*" | list_wildcards ::= "%" / "*" | |||
| literal ::= "{" number "}" CRLF *CHAR8 | literal ::= "{" number "}" CRLF *CHAR8 | |||
| ;; Number represents the number of CHAR8 octets | ;; Number represents the number of CHAR8 octets | |||
| login ::= "LOGIN" SPACE userid SPACE password | login ::= "LOGIN" SPACE userid SPACE password | |||
| lsub ::= "LSUB" SPACE mailbox SPACE list_mailbox | ||||
| lsub ::= "LSUB" SPACE mailbox SPACE list_mailbox | ||||
| mailbox ::= "INBOX" / astring | mailbox ::= "INBOX" / astring | |||
| ;; INBOX is case-insensitive. All case variants of | ;; INBOX is case-insensitive. All case variants of | |||
| ;; INBOX (e.g. "iNbOx") MUST be interpreted as INBOX | ;; INBOX (e.g. "iNbOx") MUST be interpreted as INBOX | |||
| ;; not as an astring. Refer to section 5.1 for | ;; not as an astring. Refer to section 5.1 for | |||
| ;; further semantic details of mailbox names. | ;; further semantic details of mailbox names. | |||
| mailbox_data ::= "FLAGS" SPACE flag_list / | mailbox_data ::= "FLAGS" SPACE flag_list / | |||
| "LIST" SPACE mailbox_list / | "LIST" SPACE mailbox_list / | |||
| "LSUB" SPACE mailbox_list / | "LSUB" SPACE mailbox_list / | |||
| "MAILBOX" SPACE text / | "MAILBOX" SPACE text / | |||
| "SEARCH" [SPACE 1#nz_number] / | "SEARCH" [SPACE 1#nz_number] / | |||
| "STATUS" SPACE mailbox SPACE | "STATUS" SPACE mailbox SPACE | |||
| "(" #<status_att number ")" / | "(" #<status_att number ")" / | |||
| number SPACE "EXISTS" / number SPACE "RECENT" | number SPACE "EXISTS" / number SPACE "RECENT" | |||
| mailbox_list ::= "(" #("\Marked" / "\Noinferiors" / | mailbox_list ::= "(" #("\Marked" / "\Noinferiors" / | |||
| "\Noselect" / "\Unmarked" / flag_extension) ")" | "\Noselect" / "\Unmarked" / flag_extension) ")" | |||
| SPACE (<"> QUOTED_CHAR <"> / nil) SPACE mailbox | 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)) | message_data ::= nz_number SPACE ("EXPUNGE" / ("FETCH" SPACE msg_att)) | |||
| msg_att ::= "(" 1#("ENVELOPE" SPACE envelope / | msg_att ::= "(" 1#("ENVELOPE" SPACE envelope / | |||
| "FLAGS" SPACE "(" #(flag / "\Recent") ")" / | "FLAGS" SPACE "(" #(flag / "\Recent") ")" / | |||
| "INTERNALDATE" SPACE date_time / | "INTERNALDATE" SPACE date_time / | |||
| "RFC822" [".HEADER" / ".TEXT"] SPACE nstring / | "RFC822" [".HEADER" / ".TEXT"] SPACE nstring / | |||
| "RFC822.SIZE" SPACE number / | "RFC822.SIZE" SPACE number / | |||
| "BODY" ["STRUCTURE"] SPACE body / | "BODY" ["STRUCTURE"] SPACE body / | |||
| "BODY" section ["<" number ">"] SPACE nstring / | "BODY" section ["<" number ">"] SPACE nstring / | |||
| "UID" SPACE uniqueid) ")" | "UID" SPACE uniqueid) ")" | |||
| skipping to change at page 66, line 4 ¶ | skipping to change at page 71, line 15 ¶ | |||
| ;; Unsigned 32-bit integer | ;; Unsigned 32-bit integer | |||
| ;; (0 <= n < 4,294,967,296) | ;; (0 <= n < 4,294,967,296) | |||
| nz_number ::= digit_nz *digit | nz_number ::= digit_nz *digit | |||
| ;; Non-zero unsigned 32-bit integer | ;; Non-zero unsigned 32-bit integer | |||
| ;; (0 < n < 4,294,967,296) | ;; (0 < n < 4,294,967,296) | |||
| password ::= astring | password ::= astring | |||
| quoted ::= <"> *QUOTED_CHAR <"> | quoted ::= <"> *QUOTED_CHAR <"> | |||
| QUOTED_CHAR ::= <any TEXT_CHAR except quoted_specials> / | QUOTED_CHAR ::= <any TEXT_CHAR except quoted_specials> / | |||
| "\" quoted_specials | "\" quoted_specials | |||
| quoted_specials ::= <"> / "\" | quoted_specials ::= <"> / "\" | |||
| rename ::= "RENAME" SPACE mailbox SPACE mailbox | rename ::= "RENAME" SPACE mailbox SPACE mailbox | |||
| ;; Use of INBOX as a destination gives a NO error | ;; Use of INBOX as a destination gives a NO error | |||
| response ::= *response_data response_done | response ::= *(continue_req / response_data) response_done | |||
| response_data ::= "*" SPACE (resp_cond_state / resp_cond_bye / | response_data ::= "*" SPACE (resp_cond_state / resp_cond_bye / | |||
| mailbox_data / message_data / capability_data) | mailbox_data / message_data / capability_data) | |||
| CRLF | CRLF | |||
| response_done ::= response_tagged / response_fatal | response_done ::= response_tagged / response_fatal | |||
| response_fatal ::= "*" SPACE resp_cond_bye CRLF | response_fatal ::= "*" SPACE resp_cond_bye CRLF | |||
| ;; Server closes connection immediately | ;; Server closes connection immediately | |||
| skipping to change at page 67, line 16 ¶ | skipping to change at page 72, line 28 ¶ | |||
| "BEFORE" SPACE date / "BODY" SPACE astring / | "BEFORE" SPACE date / "BODY" SPACE astring / | |||
| "CC" SPACE astring / "DELETED" / "FLAGGED" / | "CC" SPACE astring / "DELETED" / "FLAGGED" / | |||
| "FROM" SPACE astring / | "FROM" SPACE astring / | |||
| "KEYWORD" SPACE flag_keyword / "NEW" / "OLD" / | "KEYWORD" SPACE flag_keyword / "NEW" / "OLD" / | |||
| "ON" SPACE date / "RECENT" / "SEEN" / | "ON" SPACE date / "RECENT" / "SEEN" / | |||
| "SINCE" SPACE date / "SUBJECT" SPACE astring / | "SINCE" SPACE date / "SUBJECT" SPACE astring / | |||
| "TEXT" SPACE astring / "TO" SPACE astring / | "TEXT" SPACE astring / "TO" SPACE astring / | |||
| "UNANSWERED" / "UNDELETED" / "UNFLAGGED" / | "UNANSWERED" / "UNDELETED" / "UNFLAGGED" / | |||
| "UNKEYWORD" SPACE flag_keyword / "UNSEEN" / | "UNKEYWORD" SPACE flag_keyword / "UNSEEN" / | |||
| ;; Above this line were in [IMAP2] | ;; Above this line were in [IMAP2] | |||
| "DRAFT" / "HEADER" SPACE header_fld_name SPACE astring | "DRAFT" / | |||
| / | "HEADER" SPACE header_fld_name SPACE astring / | |||
| "LARGER" SPACE number / "NOT" SPACE search_key / | "LARGER" SPACE number / "NOT" SPACE search_key / | |||
| "OR" SPACE search_key SPACE search_key / | "OR" SPACE search_key SPACE search_key / | |||
| "SENTBEFORE" SPACE date / "SENTON" SPACE date / | "SENTBEFORE" SPACE date / "SENTON" SPACE date / | |||
| "SENTSINCE" SPACE date / "SMALLER" SPACE number / | "SENTSINCE" SPACE date / "SMALLER" SPACE number / | |||
| "UID" SPACE set / "UNDRAFT" / set / | "UID" SPACE set / "UNDRAFT" / set / | |||
| "(" 1#search_key ")" | "(" 1#search_key ")" | |||
| section ::= "[" [section_text / (nz_number *["." nz_number] | section ::= "[" [section_text / (nz_number *["." nz_number] | |||
| ["." (section_text / "MIME")])] "]" | ["." (section_text / "MIME")])] "]" | |||
| skipping to change at page 68, line 4 ¶ | skipping to change at page 73, line 17 ¶ | |||
| ;; Identifies a set of messages. For message | ;; Identifies a set of messages. For message | |||
| ;; sequence numbers, these are consecutive | ;; sequence numbers, these are consecutive | |||
| ;; numbers from 1 to the number of messages in | ;; numbers from 1 to the number of messages in | |||
| ;; the mailbox | ;; the mailbox | |||
| ;; Comma delimits individual numbers, colon | ;; Comma delimits individual numbers, colon | |||
| ;; delimits between two numbers inclusive. | ;; delimits between two numbers inclusive. | |||
| ;; Example: 2,4:7,9,12:* is 2,4,5,6,7,9,12,13, | ;; Example: 2,4:7,9,12:* is 2,4,5,6,7,9,12,13, | |||
| ;; 14,15 for a mailbox with 15 messages. | ;; 14,15 for a mailbox with 15 messages. | |||
| SPACE ::= <ASCII SP, space, 0x20> | SPACE ::= <ASCII SP, space, 0x20> | |||
| status ::= "STATUS" SPACE mailbox SPACE "(" 1#status_att ")" | status ::= "STATUS" SPACE mailbox SPACE "(" 1#status_att ")" | |||
| status_att ::= "MESSAGES" / "RECENT" / "UIDNEXT" / "UIDVALIDITY" / | status_att ::= "MESSAGES" / "RECENT" / "UIDNEXT" / "UIDVALIDITY" / | |||
| "UNSEEN" | "UNSEEN" | |||
| store ::= "STORE" SPACE set SPACE store_att_flags | store ::= "STORE" SPACE set SPACE store_att_flags | |||
| store_att_flags ::= (["+" / "-"] "FLAGS" [".SILENT"]) SPACE | store_att_flags ::= (["+" / "-"] "FLAGS" [".SILENT"]) SPACE | |||
| (flag_list / #flag) | (flag_list / #flag) | |||
| string ::= quoted / literal | string ::= quoted / literal | |||
| subscribe ::= "SUBSCRIBE" SPACE mailbox | subscribe ::= "SUBSCRIBE" SPACE mailbox | |||
| tag ::= 1*<any ATOM_CHAR except "+"> | tag ::= 1*<any ATOM_CHAR except "+"> | |||
| text ::= 1*TEXT_CHAR | text ::= 1*TEXT_CHAR | |||
| text_mime2 ::= "=?" <charset> "?" <encoding> "?" | text_mime2 ::= "=?" <charset> "?" <encoding> "?" | |||
| <encoded-text> "?=" | <encoded-text> "?=" | |||
| ;; Syntax defined in [MIME-2] | ;; Syntax defined in [MIME-HDRS] | |||
| TEXT_CHAR ::= <any CHAR except CR and LF> | TEXT_CHAR ::= <any CHAR except CR and LF> | |||
| time ::= 2digit ":" 2digit ":" 2digit | time ::= 2digit ":" 2digit ":" 2digit | |||
| ;; Hours minutes seconds | ;; Hours minutes seconds | |||
| uid ::= "UID" SPACE (copy / fetch / search / store) | uid ::= "UID" SPACE (copy / fetch / search / store) | |||
| ;; Unique identifiers used instead of message | ;; Unique identifiers used instead of message | |||
| ;; sequence numbers | ;; sequence numbers | |||
| skipping to change at page 70, line 9 ¶ | skipping to change at page 76, line 9 ¶ | |||
| Seattle, WA 98105-4527 | Seattle, WA 98105-4527 | |||
| Phone: (206) 543-5762 | Phone: (206) 543-5762 | |||
| EMail: MRC@CAC.Washington.EDU | EMail: MRC@CAC.Washington.EDU | |||
| Appendices | Appendices | |||
| A. References | A. References | |||
| [ACAP] Myers, J. "ACAP -- Application Configuration Access Protocol", | ||||
| Work in Progress. | ||||
| [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. | [IMAP-AUTH] Myers, J., "IMAP4 Authentication Mechanism", RFC 1731. | |||
| Carnegie-Mellon University, December 1994. | Carnegie-Mellon University, December 1994. | |||
| [IMAP-COMPAT] Crispin, M. "IMAP4 Compatibility with IMAP2 and | [IMAP-COMPAT] Crispin, M., "IMAP4 Compatibility with IMAP2bis", Work | |||
| IMAP2bis", RFC 1732, University of Washington, December 1994. | in Progress. | |||
| [IMAP-DISC] Austein, R. "Synchronization Operations for Disconnected | [IMAP-DISC] Austein, R., "Synchronization Operations for Disconnected | |||
| IMAP4 Clients", Work in Progress. | IMAP4 Clients", Work in Progress. | |||
| [IMAP-MODEL] Crispin, M. "Distributed Electronic Mail Models in | [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. | IMAP4", RFC 1733, University of Washington, December 1994. | |||
| [IMAP-OBSOLETE] Crispin, M., "Internet Message Access Protocol - | ||||
| Obsolete Syntax", Work in Progress. | ||||
| [IMAP2] Crispin, M., "Interactive Mail Access Protocol - Version 2", | [IMAP2] Crispin, M., "Interactive Mail Access Protocol - Version 2", | |||
| RFC 1176, University of Washington, August 1990. | RFC 1176, University of Washington, August 1990. | |||
| [IMSP] Myers, J. "IMSP -- Internet Message Support Protocol", Work in | [LANGUAGE-TAGS] Alvestrand, H., "Tags for the Identification of | |||
| Progress. | Languages", RFC 1766, March 1995. | |||
| [MIME-1] Borenstein, N., and Freed, N., "MIME (Multipurpose Internet | ||||
| Mail Extensions) Part One: Mechanisms for Specifying and Describing | ||||
| the Format of Internet Message Bodies", RFC 1521, Bellcore, Innosoft, | ||||
| September 1993. | ||||
| [MIME-2] Moore, K., "MIME (Multipurpose Internet Mail Extensions) | ||||
| Part Two: Message Header Extensions for Non-ASCII Text", RFC 1522, | ||||
| University of Tennessee, September 1993. | ||||
| [RFC-1642] Goldsmith, D., and Davis, M., "UTF-7: A Mail-Safe | [MD5] Myers, J., and Rose, M., "The Content-MD5 Header Field", RFC | |||
| Transformation Format of Unicode", RFC 1642, July 1994. | 1864, October 1995. | |||
| [RFC-1766] Alvestrand, H., "Tags for the Identification of | [MIME-IMB] Borenstein, N.., "MIME (Multipurpose Internet Mail | |||
| Languages", RFC 1766, March 1995. | Extensions) Part One: Format of Internet Message Bodies", Work in | |||
| Progress. | ||||
| [RFC-1806] Troost, R., and Dorner, S., "Communicating Presentation | [MIME-IMT] Freed, N., and Borenstein, N.., "MIME (Multipurpose | |||
| Information in Internet Messages: The Content-Disposition Header", | Internet Mail Extensions) Part Two: Media Types", Work in Progress. | |||
| RFC 1806, June 1995. | ||||
| [RFC-1864] Myers, J., and Rose, M., "The Content-MD5 Header Field", | [MIME-HDRS] Moore, K., "MIME (Multipurpose Internet Mail Extensions) | |||
| RFC 1864, October 1995. | Part Three: Message Header Extensions for Non-ASCII Text", Work in | |||
| Progress. | ||||
| [RFC-822] Crocker, D., "Standard for the Format of ARPA Internet Text | [RFC-822] Crocker, D., "Standard for the Format of ARPA Internet Text | |||
| Messages", STD 11, RFC 822, University of Delaware, August 1982. | Messages", STD 11, RFC 822, University of Delaware, August 1982. | |||
| [SMTP] Postel, Jonathan B. "Simple Mail Transfer Protocol", STD 10, | [SMTP] Postel, Jonathan B. "Simple Mail Transfer Protocol", STD 10, | |||
| RFC 821, USC/Information Sciences Institute, August 1982. | 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 | B. Changes from RFC 1730 | |||
| 1) The STATUS command has been added. | 1) The STATUS command has been added. | |||
| 2) Clarify in the formal syntax that the "#" construct can never | 2) Clarify in the formal syntax that the "#" construct can never | |||
| refer to multiple spaces. | refer to multiple spaces. | |||
| 3) Obsolete syntax has been moved to a separate document. | 3) Obsolete syntax has been moved to a separate document. | |||
| 4) The PARTIAL command has been obsoleted. | 4) The PARTIAL command has been obsoleted. | |||
| skipping to change at page 73, line 5 ¶ | skipping to change at page 78, line 17 ¶ | |||
| 14) A description of the international mailbox name convention has | 14) A description of the international mailbox name convention has | |||
| been added. | been added. | |||
| 15) The UID-NEXT and UID-VALIDITY status items are now called UIDNEXT | 15) The UID-NEXT and UID-VALIDITY status items are now called UIDNEXT | |||
| and UIDVALIDITY. This is a change from the IMAP STATUS | and UIDVALIDITY. This is a change from the IMAP STATUS | |||
| 16) Add a clarification that a null mailbox name argument to the LIST | 16) Add a clarification that a null mailbox name argument to the LIST | |||
| command returns an untagged LIST response with the hierarchy | command returns an untagged LIST response with the hierarchy | |||
| delimiter and root of the reference argument. | 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. | ||||
| C. Key Word Index | C. Key Word Index | |||
| +FLAGS <flag list> (store command data item) ............... 38 | +FLAGS <flag list> (store command data item) ............... 44 | |||
| +FLAGS.SILENT <flag list> (store command data item) ........ 38 | +FLAGS.SILENT <flag list> (store command data item) ........ 44 | |||
| -FLAGS <flag list> (store command data item) ............... 38 | -FLAGS <flag list> (store command data item) ............... 44 | |||
| -FLAGS.SILENT <flag list> (store command data item) ........ 38 | -FLAGS.SILENT <flag list> (store command data item) ........ 44 | |||
| ALERT (response code) ...................................... 43 | ALERT (response code) ...................................... 48 | |||
| ALL (fetch item) ........................................... 34 | ALL (fetch item) ........................................... 40 | |||
| ALL (search key) ........................................... 31 | ALL (search key) ........................................... 37 | |||
| ANSWERED (search key) ...................................... 31 | ANSWERED (search key) ...................................... 37 | |||
| APPEND (command) ........................................... 26 | APPEND (command) ........................................... 32 | |||
| AUTHENTICATE (command) ..................................... 15 | AUTHENTICATE (command) ..................................... 18 | |||
| BAD (response) ............................................. 45 | BAD (response) ............................................. 50 | |||
| BCC <string> (search key) .................................. 31 | BCC <string> (search key) .................................. 37 | |||
| BEFORE <date> (search key) ................................. 31 | BEFORE <date> (search key) ................................. 37 | |||
| BODY (fetch item) .......................................... 34 | BODY (fetch item) .......................................... 40 | |||
| BODY (fetch result) ........................................ 51 | BODY (fetch result) ........................................ 57 | |||
| BODY <string> (search key) ................................. 31 | BODY <string> (search key) ................................. 37 | |||
| BODY.PEEK[<section>]<<partial>> (fetch item) ............... 36 | BODY.PEEK[<section>]<<partial>> (fetch item) ............... 42 | |||
| BODYSTRUCTURE (fetch item) ................................. 36 | BODYSTRUCTURE (fetch item) ................................. 42 | |||
| BODYSTRUCTURE (fetch result) ............................... 52 | BODYSTRUCTURE (fetch result) ............................... 57 | |||
| BODY[<section>]<<origin_octet>> (fetch result) ............. 51 | BODY[<section>]<<origin_octet>> (fetch result) ............. 57 | |||
| BODY[<section>]<<partial>> (fetch item) .................... 34 | BODY[<section>]<<partial>> (fetch item) .................... 40 | |||
| BYE (response) ............................................. 46 | BYE (response) ............................................. 51 | |||
| CAPABILITY (command) ....................................... 12 | Body Structure (message attribute) ......................... 7 | |||
| CAPABILITY (response) ...................................... 47 | CAPABILITY (command) ....................................... 16 | |||
| CC <string> (search key) ................................... 31 | CAPABILITY (response) ...................................... 52 | |||
| CHECK (command) ............................................ 28 | CC <string> (search key) ................................... 37 | |||
| CLOSE (command) ............................................ 28 | CHECK (command) ............................................ 34 | |||
| COPY (command) ............................................. 39 | CLOSE (command) ............................................ 34 | |||
| CREATE (command) ........................................... 19 | COPY (command) ............................................. 44 | |||
| DELETE (command) ........................................... 20 | CREATE (command) ........................................... 23 | |||
| DELETED (search key) ....................................... 31 | DELETE (command) ........................................... 24 | |||
| DRAFT (search key) ......................................... 31 | DELETED (search key) ....................................... 37 | |||
| ENVELOPE (fetch item) ...................................... 36 | DRAFT (search key) ......................................... 37 | |||
| ENVELOPE (fetch result) .................................... 55 | ENVELOPE (fetch item) ...................................... 42 | |||
| EXAMINE (command) .......................................... 18 | ENVELOPE (fetch result) .................................... 60 | |||
| EXISTS (response) .......................................... 50 | EXAMINE (command) .......................................... 22 | |||
| EXPUNGE (command) .......................................... 29 | EXISTS (response) .......................................... 55 | |||
| EXPUNGE (response) ......................................... 50 | EXPUNGE (command) .......................................... 35 | |||
| FAST (fetch item) .......................................... 36 | EXPUNGE (response) ......................................... 56 | |||
| FETCH (command) ............................................ 33 | Envelope Structure (message attribute) ..................... 7 | |||
| FETCH (response) ........................................... 51 | FAST (fetch item) .......................................... 42 | |||
| FLAGGED (search key) ....................................... 31 | FETCH (command) ............................................ 39 | |||
| FLAGS (fetch item) ......................................... 37 | FETCH (response) ........................................... 57 | |||
| FLAGS (fetch result) ....................................... 55 | FLAGGED (search key) ....................................... 37 | |||
| FLAGS (response) ........................................... 49 | FLAGS (fetch item) ......................................... 42 | |||
| FLAGS <flag list> (store command data item) ................ 38 | FLAGS (fetch result) ....................................... 61 | |||
| FLAGS.SILENT <flag list> (store command data item) ......... 38 | FLAGS (response) ........................................... 54 | |||
| FROM <string> (search key) ................................. 31 | FLAGS <flag list> (store command data item) ................ 43 | |||
| FULL (fetch item) .......................................... 37 | FLAGS.SILENT <flag list> (store command data item) ......... 43 | |||
| HEADER (part specifier) .................................... 35 | FROM <string> (search key) ................................. 37 | |||
| HEADER <field-name> <string> (search key) .................. 31 | FULL (fetch item) .......................................... 42 | |||
| HEADER.FIELDS <header_list> (part specifier) ............... 35 | Flags (message attribute) .................................. 6 | |||
| HEADER.FIELDS.NOT <header_list> (part specifier) ........... 35 | HEADER (part specifier) .................................... 40 | |||
| INTERNALDATE (fetch item) .................................. 37 | HEADER <field-name> <string> (search key) .................. 37 | |||
| INTERNALDATE (fetch result) ................................ 56 | HEADER.FIELDS <header_list> (part specifier) ............... 40 | |||
| KEYWORD <flag> (search key) ................................ 32 | HEADER.FIELDS.NOT <header_list> (part specifier) ........... 40 | |||
| LARGER <n> (search key) .................................... 32 | INTERNALDATE (fetch item) .................................. 42 | |||
| LIST (command) ............................................. 22 | INTERNALDATE (fetch result) ................................ 61 | |||
| LIST (response) ............................................ 47 | Internal Date (message attribute) .......................... 6 | |||
| LOGIN (command) ............................................ 16 | KEYWORD <flag> (search key) ................................ 38 | |||
| LOGOUT (command) ........................................... 14 | Keyword (type of flag) ..................................... 6 | |||
| LSUB (command) ............................................. 24 | LARGER <n> (search key) .................................... 38 | |||
| LSUB (response) ............................................ 48 | LIST (command) ............................................. 28 | |||
| MAY (specification requirement term) ....................... 2 | LIST (response) ............................................ 52 | |||
| MESSAGES (status item) ..................................... 25 | LOGIN (command) ............................................ 20 | |||
| MIME (part specifier) ...................................... 35 | LOGOUT (command) ........................................... 18 | |||
| LSUB (command) ............................................. 30 | ||||
| LSUB (response) ............................................ 53 | ||||
| MAY (specification requirement term) ....................... 1 | ||||
| MESSAGES (status item) ..................................... 32 | ||||
| MIME (part specifier) ...................................... 41 | ||||
| MUST (specification requirement term) ...................... 1 | MUST (specification requirement term) ...................... 1 | |||
| MUST NOT (specification requirement term) .................. 1 | MUST NOT (specification requirement term) .................. 1 | |||
| NEW (search key) ........................................... 32 | Message Sequence Number (message attribute) ................ 5 | |||
| NO (response) .............................................. 45 | NEW (search key) ........................................... 38 | |||
| NOOP (command) ............................................. 13 | NEWNAME (response code) .................................... 48 | |||
| NOT <search-key> (search key) .............................. 32 | NO (response) .............................................. 50 | |||
| OK (response) .............................................. 44 | NOOP (command) ............................................. 17 | |||
| OLD (search key) ........................................... 32 | NOT <search-key> (search key) .............................. 38 | |||
| ON <date> (search key) ..................................... 32 | OK (response) .............................................. 49 | |||
| OPTIONAL (specification requirement term) .................. 2 | OLD (search key) ........................................... 38 | |||
| OR <search-key1> <search-key2> (search key) ................ 32 | ON <date> (search key) ..................................... 38 | |||
| PARSE (response code) ...................................... 43 | OPTIONAL (specification requirement term) .................. 1 | |||
| PERMANENTFLAGS (response code) ............................. 43 | OR <search-key1> <search-key2> (search key) ................ 38 | |||
| PREAUTH (response) ......................................... 46 | PARSE (response code) ...................................... 48 | |||
| READ-ONLY (response code) .................................. 43 | PERMANENTFLAGS (response code) ............................. 48 | |||
| READ-WRITE (response code) ................................. 44 | PREAUTH (response) ......................................... 51 | |||
| RECENT (response) .......................................... 50 | Permanent Flag (class of flag) ............................. 6 | |||
| RECENT (search key) ........................................ 32 | READ-ONLY (response code) .................................. 49 | |||
| RECENT (status item) ....................................... 25 | READ-WRITE (response code) ................................. 49 | |||
| RENAME (command) ........................................... 21 | RECENT (response) .......................................... 55 | |||
| RECENT (search key) ........................................ 38 | ||||
| RECENT (status item) ....................................... 32 | ||||
| RENAME (command) ........................................... 26 | ||||
| REQUIRED (specification requirement term) .................. 1 | REQUIRED (specification requirement term) .................. 1 | |||
| RFC822 (fetch item) ........................................ 37 | RFC822 (fetch item) ........................................ 42 | |||
| RFC822 (fetch result) ...................................... 56 | RFC822 (fetch result) ...................................... 61 | |||
| RFC822.HEADER (fetch item) ................................. 37 | RFC822.HEADER (fetch item) ................................. 42 | |||
| RFC822.HEADER (fetch result) ............................... 56 | RFC822.HEADER (fetch result) ............................... 61 | |||
| RFC822.SIZE (fetch item) ................................... 37 | RFC822.SIZE (fetch item) ................................... 42 | |||
| RFC822.SIZE (fetch result) ................................. 56 | RFC822.SIZE (fetch result) ................................. 61 | |||
| RFC822.TEXT (fetch item) ................................... 37 | RFC822.TEXT (fetch item) ................................... 42 | |||
| RFC822.TEXT (fetch result) ................................. 56 | RFC822.TEXT (fetch result) ................................. 61 | |||
| SEARCH (command) ........................................... 29 | SEARCH (command) ........................................... 36 | |||
| SEARCH (response) .......................................... 49 | SEARCH (response) .......................................... 54 | |||
| SEEN (search key) .......................................... 32 | SEEN (search key) .......................................... 38 | |||
| SELECT (command) ........................................... 17 | SELECT (command) ........................................... 21 | |||
| SENTBEFORE <date> (search key) ............................. 32 | SENTBEFORE <date> (search key) ............................. 38 | |||
| SENTON <date> (search key) ................................. 32 | SENTON <date> (search key) ................................. 38 | |||
| SENTSINCE <date> (search key) .............................. 32 | SENTSINCE <date> (search key) .............................. 38 | |||
| SHOULD (specification requirement term) .................... 1 | SHOULD (specification requirement term) .................... 1 | |||
| SHOULD NOT (specification requirement term) ................ 1 | SHOULD NOT (specification requirement term) ................ 1 | |||
| SINCE <date> (search key) .................................. 32 | SINCE <date> (search key) .................................. 38 | |||
| SMALLER <n> (search key) ................................... 33 | SMALLER <n> (search key) ................................... 38 | |||
| STATUS (command) ........................................... 25 | STATUS (command) ........................................... 31 | |||
| STATUS (response) .......................................... 49 | STATUS (response) .......................................... 54 | |||
| STORE (command) ............................................ 37 | STORE (command) ............................................ 43 | |||
| SUBJECT <string> (search key) .............................. 33 | SUBJECT <string> (search key) .............................. 38 | |||
| SUBSCRIBE (command) ........................................ 21 | SUBSCRIBE (command) ........................................ 27 | |||
| TEXT (part specifier) ...................................... 35 | Session Flag (class of flag) ............................... 6 | |||
| TEXT <string> (search key) ................................. 33 | System Flag (type of flag) ................................. 6 | |||
| TO <string> (search key) ................................... 33 | TEXT (part specifier) ...................................... 41 | |||
| TRYCREATE (response code) .................................. 44 | TEXT <string> (search key) ................................. 39 | |||
| UID (command) .............................................. 39 | TO <string> (search key) ................................... 39 | |||
| UID (fetch item) ........................................... 37 | TRYCREATE (response code) .................................. 49 | |||
| UID (fetch result) ......................................... 56 | UID (command) .............................................. 45 | |||
| UID <message set> (search key) ............................. 33 | UID (fetch item) ........................................... 43 | |||
| UIDNEXT (status item) ...................................... 26 | UID (fetch result) ......................................... 61 | |||
| UIDVALIDITY (response code) ................................ 44 | UID <message set> (search key) ............................. 39 | |||
| UIDVALIDITY (status item) .................................. 26 | UIDNEXT (status item) ...................................... 32 | |||
| UNANSWERED (search key) .................................... 33 | UIDVALIDITY (response code) ................................ 49 | |||
| UNDELETED (search key) ..................................... 33 | UIDVALIDITY (status item) .................................. 32 | |||
| UNDRAFT (search key) ....................................... 33 | UNANSWERED (search key) .................................... 39 | |||
| UNFLAGGED (search key) ..................................... 33 | UNDELETED (search key) ..................................... 39 | |||
| UNKEYWORD <flag> (search key) .............................. 33 | UNDRAFT (search key) ....................................... 39 | |||
| UNSEEN (response code) ..................................... 44 | UNFLAGGED (search key) ..................................... 39 | |||
| UNSEEN (search key) ........................................ 33 | UNKEYWORD <flag> (search key) .............................. 39 | |||
| UNSEEN (status item) ....................................... 26 | UNSEEN (response code) ..................................... 49 | |||
| UNSUBSCRIBE (command) ...................................... 22 | UNSEEN (search key) ........................................ 39 | |||
| X<atom> (command) .......................................... 41 | UNSEEN (status item) ....................................... 32 | |||
| \Answered (system flag) .................................... 56 | UNSUBSCRIBE (command) ...................................... 28 | |||
| \Deleted (system flag) ..................................... 56 | Unique Identifier (UID) (message attribute) ................ 4 | |||
| \Draft (system flag) ....................................... 56 | X<atom> (command) .......................................... 46 | |||
| \Flagged (system flag) ..................................... 56 | [RFC-822] Size (message attribute) ......................... 7 | |||
| \Marked (mailbox name attribute) ........................... 48 | \Answered (system flag) .................................... 61 | |||
| \Noinferiors (mailbox name attribute) ...................... 48 | \Deleted (system flag) ..................................... 61 | |||
| \Noselect (mailbox name attribute) ......................... 48 | \Draft (system flag) ....................................... 61 | |||
| \Recent (system flag) ...................................... 56 | \Flagged (system flag) ..................................... 61 | |||
| \Seen (system flag) ........................................ 55 | \Marked (mailbox name attribute) ........................... 53 | |||
| \Unmarked (mailbox name attribute) ......................... 48 | \Noinferiors (mailbox name attribute) ...................... 53 | |||
| \Noselect (mailbox name attribute) ......................... 53 | ||||
| Table of Contents | \Recent (system flag) ...................................... 61 | |||
| \Seen (system flag) ........................................ 61 | ||||
| IMAP4rev1 Protocol Specification .................................. 1 | \Unmarked (mailbox name attribute) ......................... 53 | |||
| 1. How to Read This Document ................................. 1 | ||||
| 1.1. Organization of This Document ............................. 1 | ||||
| 1.2. Conventions Used in This Document ......................... 1 | ||||
| 2. Protocol Overview ......................................... 2 | ||||
| 2.1. Link Level ................................................ 2 | ||||
| 2.2. Commands and Responses .................................... 2 | ||||
| 2.2.1. Client Protocol Sender and Server Protocol Receiver ....... 2 | ||||
| 2.2.2. Server Protocol Sender and Client Protocol Receiver ....... 3 | ||||
| 3. State and Flow Diagram .................................... 4 | ||||
| 3.1. Non-Authenticated State ................................... 4 | ||||
| 3.2. Authenticated State ....................................... 4 | ||||
| 3.3. Selected State ............................................ 5 | ||||
| 3.4. Logout State .............................................. 5 | ||||
| 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 ................................ 7 | ||||
| 5.1. Mailbox Naming ............................................ 7 | ||||
| 5.1.1. Mailbox Hierarchy Naming .................................. 8 | ||||
| 5.1.2. Mailbox Namespace Naming Convention ....................... 8 | ||||
| 5.1.3. Mailbox International Naming Convention ................... 8 | ||||
| 5.2. Mailbox Size and Message Status Updates ................... 9 | ||||
| 5.3. Response when no Command in Progress ...................... 10 | ||||
| 5.4. Autologout Timer .......................................... 10 | ||||
| 5.5. Multiple Commands in Progress ............................. 10 | ||||
| 6. Client Commands ........................................... 12 | ||||
| 6.1. Client Commands - Any State ............................... 12 | ||||
| 6.1.1. CAPABILITY Command ........................................ 12 | ||||
| 6.1.2. NOOP Command .............................................. 13 | ||||
| 6.1.3. LOGOUT Command ............................................ 14 | ||||
| 6.2. Client Commands - Non-Authenticated State ................. 14 | ||||
| 6.2.1. AUTHENTICATE Command ...................................... 15 | ||||
| 6.2.2. LOGIN Command ............................................. 16 | ||||
| 6.3. Client Commands - Authenticated State ..................... 17 | ||||
| 6.3.1. SELECT Command ............................................ 17 | ||||
| 6.3.2. EXAMINE Command ........................................... 18 | ||||
| 6.3.3. CREATE Command ............................................ 19 | ||||
| 6.3.4. DELETE Command ............................................ 20 | ||||
| 6.3.5. RENAME Command ............................................ 21 | ||||
| 6.3.6. SUBSCRIBE Command ......................................... 21 | ||||
| 6.3.7. UNSUBSCRIBE Command ....................................... 22 | ||||
| 6.3.8. LIST Command .............................................. 22 | ||||
| 6.3.9. LSUB Command .............................................. 24 | ||||
| 6.3.10. STATUS Command ............................................ 25 | ||||
| 6.3.11. APPEND Command ............................................ 26 | ||||
| 6.4. Client Commands - Selected State .......................... 27 | ||||
| 6.4.1. CHECK Command ............................................. 28 | ||||
| 6.4.2. CLOSE Command ............................................. 28 | ||||
| 6.4.3. EXPUNGE Command ........................................... 29 | ||||
| 6.4.4. SEARCH Command ............................................ 29 | ||||
| 6.4.5. FETCH Command ............................................. 33 | ||||
| 6.4.6. STORE Command ............................................. 37 | ||||
| 6.4.7. COPY Command .............................................. 39 | ||||
| 6.4.8. UID Command ............................................... 39 | ||||
| 6.5. Client Commands - Experimental/Expansion .................. 41 | ||||
| 6.5.1. X<atom> Command ........................................... 41 | ||||
| 7. Server Responses .......................................... 42 | ||||
| 7.1. Server Responses - Status Responses ....................... 43 | ||||
| 7.1.1. OK Response ............................................... 44 | ||||
| 7.1.2. NO Response ............................................... 45 | ||||
| 7.1.3. BAD Response .............................................. 45 | ||||
| 7.1.4. PREAUTH Response .......................................... 46 | ||||
| 7.1.5. BYE Response .............................................. 46 | ||||
| 7.2. Server Responses - Server and Mailbox Status .............. 47 | ||||
| 7.2.1. CAPABILITY Response ....................................... 47 | ||||
| 7.2.2. LIST Response ............................................. 47 | ||||
| 7.2.3. LSUB Response ............................................. 48 | ||||
| 7.2.4 STATUS Response ........................................... 49 | ||||
| 7.2.5. SEARCH Response ........................................... 49 | ||||
| 7.2.6. FLAGS Response ............................................ 49 | ||||
| 7.3. Server Responses - Message Status ......................... 50 | ||||
| 7.3.1. EXISTS Response ........................................... 50 | ||||
| 7.3.2. RECENT Response ........................................... 50 | ||||
| 7.3.3. EXPUNGE Response .......................................... 50 | ||||
| 7.3.4. FETCH Response ............................................ 51 | ||||
| 7.4. Server Responses - Command Continuation Request ........... 56 | ||||
| 8. Sample IMAP4rev1 session .................................. 58 | ||||
| 9. Formal Syntax ............................................. 59 | ||||
| 10. Author's Note ............................................. 69 | ||||
| 11. Security Considerations ................................... 69 | ||||
| 12. Author's Address .......................................... 69 | ||||
| Appendices ........................................................ 70 | ||||
| A. References ................................................ 70 | ||||
| B. Changes from RFC 1730 ..................................... 71 | ||||
| C. Key Word Index ............................................ 73 | ||||
| End of changes. 143 change blocks. | ||||
| 338 lines changed or deleted | 798 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||