view Side-By-Side changes
Network Working Group M. CrispinINTERNET-DRAFT: IMAP4rev1Request for Comments: 3501 University of Washington Obsoletes: 2060October 2002 Document: internet-drafts/draft-crispin-imapv-20.txtMarch 2003 Category: Standards Track INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1 Status of this Memo This documentis an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC 2026. This document isspecifies anInternet-Draft. Internet-Drafts are working documents ofInternet standards track protocol for the InternetEngineering Task Force (IETF), its areas,community, andits working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six monthsrequests discussion andmay be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material orsuggestions for improvements. Please refer tocite them other than as "work in progress." To viewthelist Internet-Draft Shadow Directories, see http://www.ietf.org/shadow.html. A revised versioncurrent edition ofthis draft document will be submitted totheRFC editor as an Proposed Standard"Internet Official Protocol Standards" (STD 1) for theInternet Community. Discussion and suggestions for improvement are requested,standardization state andshould be sent to imap@CAC.Washington.EDU. This document will expire before 1 April 2003.status of this protocol. Distribution of this memo is unlimited.This document is a revision of RFC 2060. Appendix B of this document describes revisions and changes.Copyright Notice Copyright (C) The Internet Society (2003). All Rights Reserved. Abstract The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1) allows a client to access and manipulate electronic mail messages on a server. IMAP4rev1 permits manipulation of mailboxes (remote message folders) in a way that is functionally equivalent to local folders. IMAP4rev1 also provides the capability for an offline client to resynchronize with theserver (see also [IMAP-DISC]).server. IMAP4rev1 includes operations for creating, deleting, and renamingmailboxes;mailboxes, checking for newmessages;messages, permanently removingmessages;messages, setting and clearingflags; [RFC-2822]flags, RFC 2822 and[MIME-IMB] parsing; Crispin [Page i] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 searching;RFC 2045 parsing, searching, and selective fetching of message attributes, texts, and portions thereof. Messages in IMAP4rev1 are accessed by the use of numbers. These numbers are either message sequence numbers or unique identifiers. IMAP4rev1 supports a single server. A mechanism for accessing configuration information to support multiple IMAP4rev1 servers is discussed in[ACAP].RFC 2244. IMAP4rev1 does not specify a means of posting mail; this function is handled by a mail transfer protocol such as[SMTP].RFC 2821. Crispin Standards Track [Pageii] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April1] RFC 3501 IMAPv4 March 2003 Table of Contents IMAP4rev1 Protocol Specification ................................ 4 1. How to Read This Document ............................... 4 1.1. Organization of This DocumentThis document is written from the point of view of the implementor of an IMAP4rev1 client or server. Beyond the protocol overview........................... 4 1.2. Conventions Used insection 2, it is not optimized for someone tryingThis Document ....................... 4 1.3. Special Notes tounderstand the operation of the protocol. The material in sections 3 throughImplementors ........................... 5provides the general context and definitions with which IMAP4rev1 operates. Sections 6, 7,2. Protocol Overview ....................................... 6 2.1. Link Level .............................................. 6 2.2. Commands and9 describe the IMAP commands, responses,Responses .................................. 6 2.2.1. Client Protocol Sender andsyntax, respectively. The relationships among these are such that it is almost impossible to understand any of them separately. In particular, do not attempt to deduce command syntax from the command section alone; instead refer to the Formal Syntax section. 1.2. Conventions Used in This Document "Conventions" are basic principles or procedures. Document conventions are noted in this section. In examples, "C:"Server Protocol Receiver ..... 6 2.2.2. Server Protocol Sender and"S:" indicate lines sent by the clientClient Protocol Receiver ..... 7 2.3. Message Attributes ...................................... 8 2.3.1. Message Numbers ......................................... 8 2.3.1.1. Unique Identifier (UID) Message Attribute ....... 8 2.3.1.2. Message Sequence Number Message Attribute ....... 10 2.3.2. Flags Message Attribute ................................. 11 2.3.3. Internal Date Message Attribute ......................... 12 2.3.4. [RFC-2822] Size Message Attribute ....................... 12 2.3.5. Envelope Structure Message Attribute .................... 12 2.3.6. Body Structure Message Attribute ........................ 12 2.4. Message Texts ........................................... 13 3. State andserver respectively. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "MAY",Flow Diagram .................................. 13 3.1. Not Authenticated State ................................. 13 3.2. Authenticated State ..................................... 13 3.3. Selected State .......................................... 13 3.4. Logout State ............................................ 14 4. Data Formats ............................................ 16 4.1. Atom .................................................... 16 4.2. Number .................................................. 16 4.3. String .................................................. 16 4.3.1. 8-bit and"OPTIONAL" in this document are to be interpreted as described in [KEYWORDS]. The word "can" (not "may") is used to refer to a possible circumstance or situation, as opposed to an optional facility of the protocol. "User" is used to refer to a human user, whereas "client" refers to the software being run by the user. "Connection" refers to the entire sequence of client/server interaction from the initial establishment of the network connection until its termination. "Session" refers to the sequence of client/server interaction from the time that a mailbox is selected (SELECT or EXAMINE command) until the time that selection ends (SELECT or EXAMINE of another mailbox, CLOSE command, or connection termination). Crispin [Page 1] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 Characters are 7-bit US-ASCII unless otherwise specified. Other character sets are indicated using a "CHARSET", as described in [MIME-IMT] and defined in [CHARSET]. CHARSETs have important additional semantics in addition to defining character set; refer to these documents for more detail. There are several protocol conventions in IMAP. These refer to aspects of the specification which are not strictly part of the IMAP protocol, but which reflect generally-accepted practice. Implementations need to be aware of these conventions, and avoid conflicts whether or not they implement the convention. For example, "&" may not be used as a hierarchy delimiter since it conflicts with theBinary Strings ................................ 17 4.4. Parenthesized List ...................................... 17 4.5. NIL ..................................................... 17 5. Operational Considerations .............................. 18 5.1. Mailbox Naming .......................................... 18 5.1.1. Mailbox Hierarchy Naming ................................ 19 5.1.2. Mailbox Namespace Naming Convention ..................... 19 5.1.3. Mailbox International NamingConvention,Convention ................. 19 5.2. Mailbox Size andother uses of "&"Message Status Updates ................. 21 5.3. Response when no Command inmailbox names are impacted as well. 1.3. Special Notes to Implementors Implementors of the IMAP protocol are strongly encouraged to read the IMAP implementation recommendations document [IMAP-IMPLEMENTATION] in conjunction with this document, to help understand the intricacies of this protocol and how best to build an interoperable product. IMAP4rev1 is designed to be upwards compatible from the [IMAP2] and unpublished IMAP2bis protocols. IMAP4rev1 is largely compatible with the IMAP4 protocol described in RFC 1730; the exception being in certain facilities added in RFC 1730 that proved problematic and were subsequently removed. In the course of the evolution of IMAP4rev1, some aspects in the earlier protocols have become obsolete. Obsolete commands, responses, and data formats which an IMAP4rev1 implementation can 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. IMAP was originally developed for the older [RFC-822] standard, and as a consequence several fetch items in IMAP incorporate "RFC822"Progress .................... 21 5.4. Autologout Timer ........................................ 22 5.5. Multiple Commands intheir name. With the exception of RFC822.SIZE, there are more modern replacements; for example, the modern version of RFC822.HEADER is BODY[HEADER.PEEK]. In all cases, "RFC822" should be interpreted as a reference to the updated [RFC-2822] standard.Progress ........................... 22 6. Client Commands ........................................ 23 6.1. Client Commands - Any State ............................ 24 6.1.1. CAPABILITY Command ..................................... 24 6.1.2. NOOP Command ........................................... 25 6.1.3. LOGOUT Command ......................................... 26 Crispin Standards Track [Page 2]INTERNET-DRAFT IMAP4rev1 EXPIRES 1 AprilRFC 3501 IMAPv4 March 20032. Protocol Overview 2.1. Link Level The IMAP4rev1 protocol assumes a reliable data stream such as provided by TCP. When TCP is used, an IMAP4rev1 server listens on port 143. 2.2.6.2. Client Commandsand Responses An IMAP4rev1 connection consists of the establishment of a client/server network connection, an initial greeting from the server, and client/server interactions. These client/server interactions consist of a client command, server data, and a server completion result response. All interactions transmitted by client and server are in the form of lines; that is, strings that end with a CRLF. The protocol receiver of an IMAP4rev1 client or server is either reading a line, or is reading a sequence of octets with a known count followed by a line. 2.2.1.- Not Authenticated State .............. 26 6.2.1. STARTTLS Command ....................................... 27 6.2.2. AUTHENTICATE Command ................................... 28 6.2.3. LOGIN Command .......................................... 30 6.3. ClientProtocol Sender andCommands - Authenticated State .................. 31 6.3.1. SELECT Command ......................................... 32 6.3.2. EXAMINE Command ........................................ 34 6.3.3. CREATE Command ......................................... 34 6.3.4. DELETE Command ......................................... 35 6.3.5. RENAME Command ......................................... 37 6.3.6. SUBSCRIBE Command ...................................... 39 6.3.7. UNSUBSCRIBE Command .................................... 39 6.3.8. LIST Command ........................................... 40 6.3.9. LSUB Command ........................................... 43 6.3.10. STATUS Command ......................................... 44 6.3.11. APPEND Command ......................................... 46 6.4. Client Commands - Selected State ....................... 47 6.4.1. CHECK Command .......................................... 47 6.4.2. CLOSE Command .......................................... 48 6.4.3. EXPUNGE Command ........................................ 49 6.4.4. SEARCH Command ......................................... 49 6.4.5. FETCH Command .......................................... 54 6.4.6. STORE Command .......................................... 58 6.4.7. COPY Command ........................................... 59 6.4.8. UID Command ............................................ 60 6.5. Client Commands - Experimental/Expansion ............... 62 6.5.1. X<atom> Command ........................................ 62 7. ServerProtocol Receiver The client command begins an operation. Each client command is prefixed with an identifier (typically a short alphanumeric string, e.g. A0001, A0002, etc.) called a "tag". A different tagResponses ....................................... 62 7.1. Server Responses - Status Responses .................... 63 7.1.1. OK Response ............................................ 65 7.1.2. NO Response ............................................ 66 7.1.3. BAD Response ........................................... 66 7.1.4. PREAUTH Response ....................................... 67 7.1.5. BYE Response ........................................... 67 7.2. Server Responses - Server and Mailbox Status ........... 68 7.2.1. CAPABILITY Response .................................... 68 7.2.2. LIST Response .......................................... 69 7.2.3. LSUB Response .......................................... 70 7.2.4 STATUS Response ........................................ 70 7.2.5. SEARCH Response ........................................ 71 7.2.6. FLAGS Response ......................................... 71 7.3. Server Responses - Mailbox Size ........................ 71 7.3.1. EXISTS Response ........................................ 71 7.3.2. RECENT Response ........................................ 72 7.4. Server Responses - Message Status ...................... 72 7.4.1. EXPUNGE Response ....................................... 72 7.4.2. FETCH Response ......................................... 73 7.5. Server Responses - Command Continuation Request ........ 79 Crispin Standards Track [Page 3] RFC 3501 IMAPv4 March 2003 8. Sample IMAP4rev1 connection ............................ 80 9. Formal Syntax .......................................... 81 10. Author's Note .......................................... 92 11. Security Considerations ................................ 92 11.1. STARTTLS Security Considerations ....................... 92 11.2. Other Security Considerations .......................... 93 12. IANA Considerations .................................... 94 Appendices ..................................................... 95 A. References ............................................. 95 B. Changes from RFC 2060 .................................. 97 C. Key Word Index ......................................... 103 Author's Address ............................................... 107 Full Copyright Statement ....................................... 108 IMAP4rev1 Protocol Specification 1. How to Read This Document 1.1. Organization of This Document This document isgenerated bywritten from the point of view of the implementor of an IMAP4rev1 clientfor each command. Clients MUST followor server. Beyond thesyntax outlinedprotocol overview inthis specification strictly. Itsection 2, it isa syntax error to send a command with missing or extraneous spaces or arguments. There are two cases in which a line from the client doesnotrepresent a complete command. In one case, a command argument is quoted with an octet count (see the description of literal in String under Data Formats); in the other case, the command arguments require server feedback (see the AUTHENTICATE command). In either case, the server sends a command continuation request response if it is readyoptimized for someone trying to understand theoctets (if appropriate) and the remainderoperation of thecommand. This response is prefixed with the token "+". Note: If, instead, the server detected an errorprotocol. The material in sections 3 through 5 provides thecommand, it sends a BAD completion responsegeneral context and definitions withtag matching the command (as described below) to reject the commandwhich IMAP4rev1 operates. Sections 6, 7, andprevent9 describe theclient from sendingIMAP commands, responses, and syntax, respectively. The relationships among these are such that it is almost impossible to understand anymoreofthe command. Crispin [Page 3] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 It is also possible for the serverthem separately. In particular, do not attempt tosend a completion response for some otherdeduce command(if multiple commands aresyntax from the command section alone; instead refer to the Formal Syntax section. 1.2. Conventions Used inprogress),This Document "Conventions" are basic principles oruntagged data.procedures. Document conventions are noted in this section. Ineither case, the command continuation request is still pending;examples, "C:" and "S:" indicate lines sent by the clienttakes the appropriate action for the response,andreads another response from the server. In all cases, the client MUST send a complete command (including receiving all command continuation request responsesserver respectively. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "MAY", andcommand continuations for the command) before initiating a new command."OPTIONAL" in this document are to be interpreted as described in [KEYWORDS]. Theprotocol receiver of an IMAP4rev1 server readsword "can" (not "may") is used to refer to acommand line from the client, parsespossible circumstance or situation, as opposed to an optional facility of thecommand and its arguments, and transmits server data andprotocol. Crispin Standards Track [Page 4] RFC 3501 IMAPv4 March 2003 "User" is used to refer to aserver command completion result response. 2.2.2. Server Protocol Sender and Client Protocol Receiver Data transmittedhuman user, whereas "client" refers to the software being run by theserveruser. "Connection" refers to theclient and status responses that do not indicate command completion are prefixed withentire sequence of client/server interaction from thetoken "*", and are called untagged responses. Server data MAY be sent as a resultinitial establishment ofa client command, or MAY be sent unilaterally bytheserver. There is no syntactic difference between server data that resulted from a specific command and server data that were sent unilaterally. The server completion result response indicatesnetwork connection until its termination. "Session" refers to thesuccess or failuresequence of client/server interaction from theoperation. Ittime that a mailbox istagged with the same tag asselected (SELECT or EXAMINE command) until theclient command which began the operation. Thus, if more than one command istime that selection ends (SELECT or EXAMINE of another mailbox, CLOSE command, or connection termination). Characters are 7-bit US-ASCII unless otherwise specified. Other character sets are indicated using a "CHARSET", as described inprogress, the tag[MIME-IMT] and defined ina server completion response identifies the command[CHARSET]. CHARSETs have important additional semantics in addition towhich the response applies.defining character set; refer to these documents for more detail. There arethree possible server completion responses: OK (indicating success), NO (indicating failure), or BAD (indicatingseveral protocolerror such as unrecognized command or command syntax error). Servers SHOULD enforce the syntax outlinedconventions inthisIMAP. These refer to aspects of the specificationstrictly. Any client command with a protocol syntax error, including (butwhich are notlimited to) missing or extraneous spaces or arguments, SHOULDstrictly part of the IMAP protocol, but reflect generally-accepted practice. Implementations need to berejected,aware of these conventions, and avoid conflicts whether or not they implement theclient givenconvention. For example, "&" may not be used as aBAD server completion response. Thehierarchy delimiter since it conflicts with the Mailbox International Naming Convention, and other uses of "&" in mailbox names are impacted as well. 1.3. Special Notes to Implementors Implementors of the IMAP protocolreceiverare strongly encouraged to read the IMAP implementation recommendations document [IMAP-IMPLEMENTATION] in conjunction with this document, to help understand the intricacies of this protocol and how best to build an interoperable product. IMAP4rev1client reads a response lineis designed to be upwards compatible from theserver. It then takes action on the response based upon the first token of the response, which can be a tag, a "*", or a "+". A client MUST be prepared to accept any server response at all times. This includes server data that was not requested. Server data SHOULD Crispin [Page 4] INTERNET-DRAFT[IMAP2] and unpublished IMAP2bis protocols. IMAP4rev1EXPIRES 1 April 2003 be recorded, so that the client can reference its recorded copy rather than sending a command tois largely compatible with theserver to requestIMAP4 protocol described in RFC 1730; thedata.exception being in certain facilities added in RFC 1730 that proved problematic and were subsequently removed. In thecasecourse ofcertain server data, the data MUST be recorded. This topic is discussed in greater detail intheServer Responses section. 2.3. Message Attributes In addition to message text, each message has several attributes associated with it. These attributes can be retrieved individually or in conjunction with other attributes or message texts. 2.3.1. Message Numbers Messages in IMAP4rev1 are accessed by oneevolution oftwo numbers;IMAP4rev1, some aspects in theunique identifierearlier protocols have become obsolete. Obsolete commands, responses, andthe message sequence number. 2.3.1.1. Unique Identifier (UID) Message Attribute A 32-bit value assigned to each message,data formats which an IMAP4rev1 implementation can encounter when used withthe unique identifier validity value (see below) forms a 64-bit value that MUST NOT refer to any other messagean earlier implementation are described inthe mailbox or any subsequent mailbox[IMAP-OBSOLETE]. Other compatibility issues with IMAP2bis, thesame name forever. Unique identifiersmost common variant of the earlier protocol, areassigneddiscussed ina strictly ascending fashion[IMAP-COMPAT]. A full discussion of compatibility issues with rare (and presumed extinct) Crispin Standards Track [Page 5] RFC 3501 IMAPv4 March 2003 variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is primarily of historical interest. IMAP was originally developed for themailbox;older [RFC-822] standard, and aseach message is added toa consequence several fetch items in IMAP incorporate "RFC822" in their name. With themailbox itexception of RFC822.SIZE, there are more modern replacements; for example, the modern version of RFC822.HEADER isassignedBODY.PEEK[HEADER]. In all cases, "RFC822" should be interpreted as ahigher UID thanreference to themessage(s) which were added previously. Unlike message sequence numbers, unique identifiers are not necessarily contiguous.updated [RFC-2822] standard. 2. Protocol Overview 2.1. Link Level Theunique identifierIMAP4rev1 protocol assumes a reliable data stream such as that provided by TCP. When TCP is used, an IMAP4rev1 server listens on port 143. 2.2. Commands and Responses An IMAP4rev1 connection consists of the establishment of amessage MUST NOT change duringclient/server network connection, an initial greeting from thesession,server, andSHOULD NOT change between sessions. Any changeclient/server interactions. These client/server interactions consist ofunique identifiers between sessions MUST be detectable using the UIDVALIDITY mechanism discussed below. Persistent unique identifiers are required fora clientto resynchronize its state fromcommand, server data, and aprevious session with theserver(e.g. disconnected or offline access clients); this is discussed further in [IMAP-DISC]. Associated with every mailboxcompletion result response. All interactions transmitted by client and server aretwo values which aidinunique identifier handling: the next unique identifier value andtheunique identifier validity value.form of lines, that is, strings that end with a CRLF. Thenext uniqueprotocol receiver of an IMAP4rev1 client or server is either reading a line, or is reading a sequence of octets with a known count followed by a line. 2.2.1. Client Protocol Sender and Server Protocol Receiver The client command begins an operation. Each client command is prefixed with an identifiervalue(typically a short alphanumeric string, e.g., A0001, A0002, etc.) called a "tag". A different tag is generated by thepredicted value that will be assignedclient for each command. Clients MUST follow the syntax outlined in this specification strictly. It is a syntax error to send anew messagecommand with missing or extraneous spaces or arguments. There are two cases in which a line from themailbox. Unlessclient does not represent a complete command. In one case, a command argument is quoted with an octet count (see theunique identifier validity also changesdescription of literal in String under Data Formats); in the other case, the command arguments require server feedback (seebelow),thenext unique identifier value MUST haveAUTHENTICATE command). In either case, thefollowing two characteristics. First,Crispin Standards Track [Page5] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April6] RFC 3501 IMAPv4 March 2003 server sends a command continuation request response if it is ready for thenext unique identifier value MUST NOT change unless new messages are added to the mailbox;octets (if appropriate) andsecond,thenext unique identifier value MUST change whenever new messages are added toremainder of themailbox, even if those new messages are subsequently expunged. Note: The next unique identifier valuecommand. This response isintended to provideprefixed with the token "+". Note: If instead, the server detected an error in the command, it sends ameans forBAD completion response with aclient to determine whether any messages have been deliveredtag matching the command (as described below) to reject themailbox sincecommand and prevent theprevious time it checked this value. It is not intended to provide any guarantee that any message will have this unique identifier. Aclientcan only assume, at the time that it obtainsfrom sending any more of thenext unique identifier value, that messages which arrive after that time will have a UID thatcommand. It isgreater than or equalalso possible for the server tothat value. The unique identifier validity value is sent in an UIDVALIDITYsend a completion responsecodefor some other command (if multiple commands are inan OKprogress), or untaggedresponse at mailbox selection time. If unique identifiers from an earlier session fail to persist to this session,data. In either case, theunique identifier validity value MUST be greater thancommand continuation request is still pending; theone used inclient takes theearlier session. Note: Ideally, unique identifiers SHOULD persist at all times. Although this specification recognizes that failure to persist can be unavoidable in certain server environments, it STRONGLY ENCOURAGES message store implementation techniques that avoid this problem. For example: 1) Unique identifiers MUST be strictly ascending inappropriate action for themailbox atresponse, and reads another response from the server. In alltimes. Ifcases, thephysical message store is re-ordered byclient MUST send anon-IMAP agent, this requires that the unique identifiers in the mailbox be regenerated, sincecomplete command (including receiving all command continuation request responses and command continuations for theformer unique identifiers are no longer strictly ascending ascommand) before initiating aresultnew command. The protocol receiver of an IMAP4rev1 server reads a command line from there-ordering. 2) Ifclient, parses themessage store has no mechanism to store unique identifiers, it must regenerate unique identifiers at each session,command andeach session must have a unique UIDVALIDITY value. 3) If the mailbox is deletedits arguments, and transmits server data and anew mailbox with the same name is created at a later date,server command completion result response. 2.2.2. Server Protocol Sender and Client Protocol Receiver Data transmitted by the servermust either keep track of unique identifiers fromto theprevious instance ofclient and status responses that do not indicate command completion are prefixed with themailbox, or it must assigntoken "*", and are called untagged responses. Server data MAY be sent as anew UIDVALIDITY value to the new instanceresult of a client command, or MAY be sent unilaterally by themailbox. A good UIDVALIDITY value to use in this caseserver. There is no syntactic difference between server data that resulted from a32-bit representation ofspecific command and server data that were sent unilaterally. The server completion result response indicates thecreation date/timesuccess or failure of themailbox.operation. It isalright to use a constant suchtagged with the same tag as1, but onlythe client command which began the operation. Thus, ifit Crispin [Page 6] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 guaranteed that unique identifiers will never be reused, evenmore than one command is in progress, thecase oftag in amailbox being deleted (or renamed) andserver completion response identifies the command to which the response applies. There are three possible server completion responses: OK (indicating success), NO (indicating failure), or BAD (indicating anew mailbox byprotocol error such as unrecognized command or command syntax error). Servers SHOULD enforce thesame name created at some future time. 4)syntax outlined in this specification strictly. Any client command with a protocol syntax error, including (but not limited to) missing or extraneous spaces or arguments, Crispin Standards Track [Page 7] RFC 3501 IMAPv4 March 2003 SHOULD be rejected, and the client given a BAD server completion response. Thecombinationprotocol receiver ofmailbox name, UIDVALIDITY, and UID must refer toan IMAP4rev1 client reads asingle immutable messageresponse line from the server. It then takes action onthat server forever. In particular,theinternal date, [RFC-2822] size, envelope, body structure, and message texts (RFC822, RFC822.HEADER, RFC822.TEXT, andresponse based upon the first token of the response, which can be a tag, a "*", or a "+". A client MUST be prepared to accept any server response at allBODY[...] fetch data items) must never change.times. Thisdoesincludes server data that was notinclude message numbers, nor does it include attributesrequested. Server data SHOULD be recorded, so that the client canbe set byreference its recorded copy rather than sending aSTOREcommand(e.g. FLAGS). 2.3.1.2. Message Sequence Number Message Attribute A relative position from 1to thenumber of messages inserver to request themailbox. This positiondata. In the case of certain server data, the data MUST beordered by ascending unique identifier. As each new message is added, it is assigned a message sequence number thatrecorded. This topic is1 higher than the number of messagesdiscussed in greater detail in themailbox before that new message was added.Server Responses section. 2.3. Messagesequence numbersAttributes In addition to message text, each message has several attributes associated with it. These attributes can bereassigned duringretrieved 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; thesession. For example,unique identifier or 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 MUST NOT refer to any other messageis permanently removed (expunged) fromin themailbox,mailbox or any subsequent mailbox with the same name forever. Unique identifiers are assigned in a strictly ascending fashion in the mailbox; as each messagesequence number for all subsequent messagesisdecremented. The number of messages inadded to the mailbox it isalso decremented. Similarly, a new message can beassigned a higher UID than the message(s) which were added previously. Unlike message sequencenumber that was once held by some othernumbers, unique identifiers are not necessarily contiguous. The unique identifier of a messageprior to an expunge. In addition to accessing messages by relative position inMUST NOT change during themailbox, message sequence numbers can be used in mathematical calculations. For example, if an untagged "11 EXISTS" is received,session, andpreviously an untagged "8 EXISTS" was received, three new messages have arrived with message sequence numbersSHOULD NOT change between sessions. Any change of9, 10, and 11. Another example; if message 287 in a 523 message mailbox has UID 12345, thereunique identifiers between sessions MUST be detectable using the UIDVALIDITY mechanism discussed below. Persistent unique identifiers areexactly 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 associatedrequired for a client to resynchronize its state from a previous session with themessage. A flag is set by its addition toserver (e.g., disconnected or offline access clients); thislist, andiscleared by its removal. There are two types of flagsdiscussed further inIMAP4rev1. A flag of either type can be permanent or session-only.[IMAP-DISC]. Crispin Standards Track [Page7] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April8] RFC 3501 IMAPv4 March 2003A system flag is a flag name that is pre-defined in this specification. All system flags beginAssociated with"\". Certain system flags (\Deletedevery mailbox are two values which aid in unique identifier handling: the next unique identifier value and\Seen) have special semantics described elsewhere.the unique identifier validity value. Thecurrently-defined system flags are: \Seen Message has been read \Answered Message has been answered \Flagged Message is "flagged" for urgent/special attention \Deleted Message is "deleted" for removal by later EXPUNGE \Draft Message has not completed composition (marked as a draft). \Recent Message is "recently" arrived in this mailbox. This sessionnext unique identifier value is thefirst sessionpredicted value that will be assigned to a new message in the mailbox. Unless the unique identifier validity also changes (see below), the next unique identifier value MUST havebeen notified about this message; ifthesession is read-write, subsequent sessions will not see \Recent set for this message. This flag can not be altered byfollowing two characteristics. First, theclient. If itnext unique identifier value MUST NOT change unless new messages are added to the mailbox; and second, the next unique identifier value MUST change whenever new messages are added to the mailbox, even if those new messages are subsequently expunged. Note: The next unique identifier value isnot possibleintended to provide a means for a client to determine whetheror notany messages have been delivered to the mailbox since the previous time it checked thissessionvalue. It isthe first sessionnot intended tobe notified about a message, thenprovide any guarantee that any messageSHOULD be considered recent. If multiple connectionswill have this unique identifier. A client can only assume, at thesame mailbox selected simultaneously,time that itis undefined which of these connections will see newly-arrivedobtains the next unique identifier value, that messageswith \Recent set and whicharriving after that time willsee it without \Recent set. A keyword is defined by the server implementation. Keywords do not begin with "\". Servers MAY permit the clienthave a UID greater than or equal todefine new keywordsthat value. The unique identifier validity value is sent inthe mailbox (see the description of the PERMANENTFLAGSa UIDVALIDITY response codefor more information). A flag can 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, concurrent and subsequent sessions will see any changeinpermanent flags. Changes toan OK untagged response at mailbox selection time. If unique identifiers from an earlier sessionflags are valid onlyfail to persist inthatthis session, the unique identifier validity value MUST be greater than the one used in the earlier session. Note:The \Recent system flag is a special case of a Crispin [Page 8] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 session flag. \RecentIdeally, unique identifiers SHOULD persist at all times. Although this specification recognizes that failure to persist cannotbeused as an argumentunavoidable ina STORE or APPEND command, and thus can notcertain server environments, it STRONGLY ENCOURAGES message store implementation techniques that avoid this problem. For example: 1) Unique identifiers MUST bechangedstrictly ascending in the mailbox atall. 2.3.3. Internal Date Message Attribute The internal date and time ofall times. If the physical messageon the server. Thisstore isnot the date and time in the [RFC-2822] header, but ratherre-ordered by adate and time which reflects whennon-IMAP agent, this requires that themessage was received. Inunique identifiers in thecase of messages delivered via [SMTP], this SHOULDmailbox be regenerated, since thedate and time of final delivery of the messageformer unique identifiers are no longer strictly ascending asdefined by [SMTP]. In the casea result ofmessages delivered bytheIMAP4rev1 COPY command, this SHOULD bere-ordering. 2) If theinternal datemessage store has no mechanism to store unique identifiers, it must regenerate unique identifiers at each session, andtime of the source message. In the case of messages delivered by the IMAP4rev1 APPEND command, this SHOULD beeach session must have a unique UIDVALIDITY value. Crispin Standards Track [Page 9] RFC 3501 IMAPv4 March 2003 3) If thedatemailbox is deleted andtime as specified ina new mailbox with theAPPEND command description. All other cases are implementation defined. 2.3.4. [RFC-2822] Size Message Attribute The number of octets insame name is created at a later date, themessage, as expressed in [RFC-2822] format. 2.3.5. Envelope Structure Message Attribute A parsed representationserver must either keep track of unique identifiers from the[RFC-2822] headerprevious instance of themessage. Note thatmailbox, or it must assign a new UIDVALIDITY value to theIMAP Envelope structure is notnew instance of thesame as an [SMTP] envelope. 2.3.6. Body Structure Message Attributemailbox. Aparsedgood UIDVALIDITY value to use in this case is a 32-bit representation of the[MIME-IMB] body structure informationcreation date/time of themessage. 2.4. Message Texts In addition to being ablemailbox. It is alright tofetchuse a constant such as 1, but only if it guaranteed that unique identifiers will never be reused, even in thefull [RFC-2822] textcase of amessage, IMAP4rev1 permitsmailbox being deleted (or renamed) and a new mailbox by thefetching of portionssame name created at some future time. 4) The combination ofthe full message text. Specifically, it is possiblemailbox name, UIDVALIDITY, and UID must refer tofetch the [RFC-2822] message header, [RFC-2822] message body,a[MIME-IMB]single immutable message on that server forever. In particular, the internal date, [RFC-2822] size, envelope, bodypart, or a [MIME-IMB] header. Crispin [Page 9] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 3. Statestructure, andFlow Diagram Once the connection between clientmessage texts (RFC822, RFC822.HEADER, RFC822.TEXT, andserver is established, an IMAP4rev1 connection is in one of four states. The initial state is identified in the server greeting. Most commands are only valid in certain states. It is a protocol error for the client to attemptall BODY[...] fetch data items) must never change. This does not include message numbers, nor does it include attributes that can be set by a STORE commandwhile(e.g., FLAGS). 2.3.1.2. Message Sequence Number Message Attribute A relative position from 1 to theconnection isnumber of messages inan inappropriate state, and the server will respond with a BAD or NO (depending upon server implementation) command completion result. 3.1. Not Authenticated State In not authenticated state,theclientmailbox. This position MUSTsupply authentication credentials before most commands willbepermitted. This stateordered by ascending unique identifier. As each new message isentered whenadded, it is assigned aconnection starts unlessmessage sequence number that is 1 higher than theconnection has been pre-authenticated. 3.2. Authenticated State In authenticated state,number of messages in theclient is authenticated and MUST select amailboxto accessbeforecommandsthataffect messages willnew message was added. Message sequence numbers can bepermitted. This state is entered when a pre-authenticated connection starts,reassigned during the session. For example, whenacceptable authentication credentials have been provided, after an error in selectinga message is permanently removed (expunged) from the mailbox,or after a successful CLOSE command. 3.3. Selected State In selected state, a mailbox has been selected to access. This statethe message sequence number for all subsequent messages isentered when a mailbox has been successfully selected. 3.4. Logout State In logout state,decremented. The number of messages in theconnectionmailbox isbeing terminated. This statealso decremented. Similarly, a new message can beentered as a result ofassigned aclient request (via the LOGOUT command) ormessage sequence number that was once held byunilateral action on the part of either the client or server. If the client requests logout state,some other message prior to an expunge. In addition to accessing messages by relative position in theserver MUST sendmailbox, message sequence numbers can be used in mathematical calculations. For example, if an untaggedBYE response"11 EXISTS" 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 atagged OK response to the LOGOUT command before the server closes the connection;523 message mailbox has UID 12345, there are exactly 286 messages which have lesser UIDs andthe client MUST read the tagged OK response to the LOGOUT command before the client closes the connection. A server MUST NOT unilaterally close the connection without sending236 messages which have greater UIDs. Crispin Standards Track [Page 10]INTERNET-DRAFT IMAP4rev1 EXPIRES 1 AprilRFC 3501 IMAPv4 March 2003an untagged BYE response that contains the reason for having done so.2.3.2. Flags Message Attribute Aclient SHOULD NOT unilaterally closelist of zero or more named tokens associated with theconnection,message. A flag is set by its addition to this list, andinstead SHOULD issueis cleared by its removal. There are two types of flags in IMAP4rev1. A flag of either type can be permanent or session-only. A system flag is aLOGOUT command.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. The currently-defined system flags are: \Seen Message has been read \Answered Message has been answered \Flagged Message is "flagged" for urgent/special attention \Deleted Message is "deleted" for removal by later EXPUNGE \Draft Message has not completed composition (marked as a draft). \Recent Message is "recently" arrived in this mailbox. This session is the first session to have been notified about this message; if the session is read-write, subsequent sessions will not see \Recent set for this message. This flag can not be altered by the client. If it is not possible to determine whether or not this session is theserver detectsfirst session to be notified about a message, then that message SHOULD be considered recent. If multiple connections have theclient has unilaterally closed the connection,same mailbox selected simultaneously, it is undefined which of these connections will see newly-arrived messages with \Recent set and which will see it without \Recent set. A keyword is defined by the server implementation. Keywords do not begin with "\". Servers MAYomitpermit theuntagged BYE response and simply close its connection. +----------------------+ |connection established| +----------------------+ || \/ +--------------------------------------+ | server greeting | +--------------------------------------+ || (1) || (2) || (3) \/ || || +-----------------+ || || |Not Authenticated| || || +-----------------+ || || || (7) || (4) || || || \/ \/ || || +----------------+ || || | Authenticated |<=++ || || +----------------+ || || || || (7) || (5) || (6) || || || \/ || || || || +--------+ || || || || |Selected|==++ || || || +--------+ || || || || (7) || \/ \/ \/ \/ +--------------------------------------+ | Logout | +--------------------------------------+ || \/ +-------------------------------+ |both sides closeclient to define new keywords in theconnection| +-------------------------------+ (1) connection without pre-authentication (OK greeting) (2) pre-authenticated connection (PREAUTH greeting) (3) rejected connection (BYE greeting) (4) successful LOGIN or AUTHENTICATE command (5) successful SELECT or EXAMINE command (6) CLOSE command, or failed SELECT or EXAMINE command (7) LOGOUT command, server shutdown, or connection closedmailbox (see the description of the PERMANENTFLAGS response code for more information). Crispin Standards Track [Page 11]INTERNET-DRAFT IMAP4rev1 EXPIRES 1 AprilRFC 3501 IMAPv4 March 20034. Data Formats IMAP4rev1 uses textual commands and responses. Data in IMAP4rev1A flag can bein one of several forms: atom, number, string, parenthesized list,permanent orNIL. Notesession-only on a per-flag basis. Permanent flags are those which the client can add or remove from the message flags permanently; that is, concurrent and subsequent sessions will see any change in permanent flags. Changes to session flags are valid only in that session. Note: The \Recent system flag is aparticular data item may take more than one form; for example,special case of adata item defined as using "astring" syntax maysession flag. \Recent can not beeitherused as anatom orargument in astring. 4.1. Atom An atom consists of one or more non-special characters. 4.2. Number A number consists of oneSTORE ormore digit characters,APPEND command, andrepresents a numeric value. 4.3. String A string is in one of two forms: either literal or quoted string.thus can not be changed at all. 2.3.3. Internal Date Message Attribute Theliteral form is the general forminternal date and time ofstring. The quoted string form is an alternative that avoidstheoverhead of processing a literal atmessage on thecost of limitations of characters which may be used. A literalserver. This isa sequence of zero or more octets (including CRnot the date andLF), prefix-quoted with an octet counttime in theform of an open brace ("{"), the number of octets, close brace ("}"),[RFC-2822] header, but rather a date andCRLF.time which reflects when the message was received. In the case ofliterals transmitted from server to client,messages delivered via [SMTP], this SHOULD be theCRLF is immediately followed bydate and time of final delivery of theoctet data.message as defined by [SMTP]. In the case ofliterals transmitted from client to server,messages delivered by theclient MUST wait to receive a command continuation request (described later inIMAP4rev1 COPY command, thisdocument) before sending the octet data (andSHOULD be theremainderinternal date and time of thecommand). A quoted string is a sequencesource message. In the case ofzero or more 7-bit characters, excluding CR and LF, with double quote (<">) characters at each end.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-2822] Size Message Attribute Theempty string is representednumber of octets in the message, aseither "" (a quoted string with zero characters between double quotes) orexpressed in [RFC-2822] format. 2.3.5. Envelope Structure Message Attribute A parsed representation of the [RFC-2822] header of the message. Note that the IMAP Envelope structure is not the same as{0} followed by CRLF (a literal withanoctet count[SMTP] envelope. 2.3.6. Body Structure Message Attribute A parsed representation of0). Note: Even iftheoctet count is 0, a client transmitting a literal MUST wait to receive a command continuation request.[MIME-IMB] body structure information of the message. Crispin Standards Track [Page 12]INTERNET-DRAFT IMAP4rev1 EXPIRES 1 AprilRFC 3501 IMAPv4 March 20034.3.1. 8-bit and Binary Strings 8-bit textual and binary mail is supported through2.4. Message Texts In addition to being able to fetch theusefull [RFC-2822] text of a[MIME-IMB] content transfer encoding.message, IMAP4rev1implementations MAY transmit 8-bit or multi-octet characters in literals, but SHOULD do so only whenpermits the[CHARSET]fetching of portions of the full message text. Specifically, it isidentified. Althoughpossible to fetch the [RFC-2822] message header, [RFC-2822] message body, aBINARY[MIME-IMB] bodyencoding is defined, unencoded binary strings are not permitted. A "binary string" is any string with NUL characters. Implementations MUST encode binary data intopart, or atextual form such as BASE64 before transmitting[MIME-IMB] header. 3. State and Flow Diagram Once thedata. A string with an excessive amount of CTL characters MAY also be considered to be binary. 4.4. Parenthesized List Data structures are represented as a "parenthesized list"; a sequence of data items, delimited by space,connection between client andbounded at each end by parentheses. A parenthesized list can contain other parenthesized lists, using multiple levelsserver is established, an IMAP4rev1 connection is in one ofparentheses to indicate nesting.four states. Theempty listinitial state is identified in the server greeting. Most commands are only valid in certain states. It isrepresented as () --aparenthesized list with no members. 4.5. NIL The special form "NIL" representsprotocol error for thenon-existence ofclient to attempt aparticular data item thatcommand while the connection isrepresented asin an inappropriate state, and the server will respond with astringBAD orparenthesized list, as distinct fromNO (depending upon server implementation) command completion result. 3.1. Not Authenticated State In theempty string "" ornot authenticated state, theempty parenthesized list (). Note: NILclient MUST supply authentication credentials before most commands will be permitted. This state isnever used for any data item which takes the form of an atom. For example,entered when amailbox name of "NIL"connection starts unless the connection has been pre-authenticated. 3.2. Authenticated State In the authenticated state, the client is authenticated and MUST select a mailboxnamed NIL as opposedtoa non-existant mailbox name.access before commands that affect messages will be permitted. This state isbecause mailbox uses "astring" syntax which is an atom orentered when astring. Conversely, an addr-name of NIL ispre-authenticated connection starts, when acceptable authentication credentials have been provided, after an error in selecting anon-existant personal name, because addr-name uses "nstring" syntax which is NILmailbox, or after astring, but never an atom.successful CLOSE command. 3.3. Selected State In a selected state, a mailbox has been selected to access. This state is entered when a mailbox has been successfully selected. Crispin Standards Track [Page 13]INTERNET-DRAFT IMAP4rev1 EXPIRES 1 AprilRFC 3501 IMAPv4 March 20035. Operational Considerations The following rules are listed here to ensure that all IMAP4rev1 implementations interoperate properly. 5.1. Mailbox Naming Mailbox names are 7-bit. Client implementations MUST NOT attempt to create 8-bit mailbox names, and SHOULD interpret any 8-bit mailbox names returned by LIST or LSUB as UTF-8. Server implementations SHOULD prohibit3.4. Logout State In thecreationlogout state, the connection is being terminated. This state can be entered as a result of8-bit mailbox names, and SHOULD NOT return 8-bit mailbox names in LISTa client request (via the LOGOUT command) orLSUB. See section 5.1.3 for more informationby unilateral action onhow to represent non-ASCII mailbox names. Note: 8-bit mailbox names were undefined in earlier versionsthe part ofthis protocol. Some sites used a local 8-bit character set to represent non-ASCII mailbox names. Such usage is not interoperable,either the client or server. If the client requests the logout state, the server MUST send an untagged BYE response andis now formally deprecated. The case-insensitive mailbox name INBOX isaspecial name reservedtagged OK response tomean "the primary mailbox for this user on this server". The interpretation of all other names is implementation-dependent. In particular, this specification takes no position on case sensitivity in non-INBOX mailbox names. Somethe LOGOUT command before the serverimplementations are fully case-sensitive; others preserve case of a newly-created name but otherwise are case-insensitive;closes the connection; andyet others coerce names to a particular case. Client implementations MUST interact with any of these. If a server implementation interprets non-INBOX mailbox names as case-insensitive, itthe client MUSTtreat names usingread the tagged OK response to the LOGOUT command before theinternational naming convention specially as described in section 5.1.3. There are certainclientconsiderations when creating a new mailbox name: 1) Any character which is one ofcloses theatom-specials (seeconnection. A server MUST NOT unilaterally close theFormal Syntax) will requireconnection without sending an untagged BYE response that contains themailbox name be represented as a quoted string or literal. 2) CTL and other non-graphic characters are difficult to represent in a user interface and are best avoided. 3) Althoughreason for having done so. A client SHOULD NOT unilaterally close thelist-wildcard characters ("%"connection, and"*") are valid ininstead SHOULD issue amailbox name, it is difficult to use such mailbox names withLOGOUT command. If theLIST and LSUB commands due toserver detects that theconflict with wildcard interpretation.client has unilaterally closed the connection, the server MAY omit the untagged BYE response and simply close its connection. Crispin Standards Track [Page 14]INTERNET-DRAFT IMAP4rev1 EXPIRES 1 AprilRFC 3501 IMAPv4 March 20034) Usually, a character (determined by the+----------------------+ |connection established| +----------------------+ || \/ +--------------------------------------+ | serverimplementation) is reserved to delimit levels of hierarchy. 5) Two characters, "#" and "&", have meanings by convention,greeting | +--------------------------------------+ || (1) || (2) || (3) \/ || || +-----------------+ || || |Not Authenticated| || || +-----------------+ || || || (7) || (4) || || || \/ \/ || || +----------------+ || || | Authenticated |<=++ || || +----------------+ || || || || (7) || (5) || (6) || || || \/ || || || || +--------+ || || || || |Selected|==++ || || || +--------+ || || || || (7) || \/ \/ \/ \/ +--------------------------------------+ | Logout | +--------------------------------------+ || \/ +-------------------------------+ |both sides close the connection| +-------------------------------+ (1) connection without pre-authentication (OK greeting) (2) pre-authenticated connection (PREAUTH greeting) (3) rejected connection (BYE greeting) (4) successful LOGIN or AUTHENTICATE command (5) successful SELECT or EXAMINE command (6) CLOSE command, or failed SELECT or EXAMINE command (7) LOGOUT command, server shutdown, or connection closed Crispin Standards Track [Page 15] RFC 3501 IMAPv4 March 2003 4. Data Formats IMAP4rev1 uses textual commands andshouldresponses. Data in IMAP4rev1 can beavoided except when usedin one of several forms: atom, number, string, parenthesized list, or NIL. Note thatconvention. 5.1.1. Mailbox Hierarchy Naming If it is desired to export hierarchical mailbox names, mailbox names MUST be left-to-right hierarchical usingasingle character to separate levels of hierarchy. The same hierarchy separator character is usedparticular data item may take more than one form; forall levels of hierarchy withinexample, asingle name. 5.1.2. Mailbox Namespace Naming Convention By convention, the first hierarchical element of any mailbox name which begins with "#" identifiesdata item defined as using "astring" syntax may be either an atom or a string. 4.1. Atom An atom consists of one or more non-special characters. 4.2. Number A number consists of one or more digit characters, and represents a numeric value. 4.3. String A string is in one of two forms: either literal or quoted string. The literal form is the"namespace"general form of string. The quoted string form is an alternative that avoids theremainderoverhead of processing a literal at thename. This makes it possible to disambiguate between different typescost ofmailbox stores, eachlimitations of characters whichhave their own namespaces. For example, implementations which offer access to USENET newsgroups MAY use the "#news" namespace to partition the USENET newsgroup namespace from thatmay be used. A literal is a sequence ofother mailboxes. Thus,zero or more octets (including CR and LF), prefix-quoted with an octet count in thecomp.mail.misc newsgroup would haveform of anmailbox nameopen brace ("{"), the number of"#news.comp.mail.misc",octets, close brace ("}"), and CRLF. In thename "comp.mail.misc" can refer to a different object (e.g. a user's private mailbox). 5.1.3. Mailbox International Naming Convention By convention, international mailbox names in IMAP4rev1 are specified using a modified versioncase of literals transmitted from server to client, theUTF-7 encoding described in [UTF-7]. Modified UTF-7 may also be usable in servers which implement an earlier version of this protocol. In modified UTF-7, printable US-ASCII characters except for "&" represent themselves; that is, characters with octet values 0x20-0x25 and 0x27-0x7e. The character "&" (0x26)CRLF isrepresentedimmediately followed by thetwo-octet sequence "&-". All other characters (octet values 0x00-0x1f and 0x7f-0xff) are representedoctet data. In the case of literals transmitted from client to server, the client MUST wait to receive a command continuation request (described later inmodified BASE64, withthis document) before sending the octet data (and the remainder of the command). A quoted string is afurther modification from [UTF-7] that ","sequence of zero or more 7-bit characters, excluding CR and LF, with double quote (<">) characters at each end. The empty string isused insteadrepresented as either "" (a quoted string with zero characters between double quotes) or as {0} followed by CRLF (a literal with an octet count of"/". Modified BASE640). Note: Even if the octet count is 0, a client transmitting a literal MUSTNOT be usedwait torepresent any printing US-ASCII character which can represent itself.receive a command continuation request. Crispin Standards Track [Page15] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April16] RFC 3501 IMAPv4 March 2003"&" is used to shift to modified BASE644.3.1. 8-bit and"-" to shift back to US-ASCII. There is no implicit shift from BASE64 to US-ASCII,Binary Strings 8-bit textual andnull shifts ("-&" while in BASE64; note that "&-" whilebinary mail is supported through the use of a [MIME-IMB] content transfer encoding. IMAP4rev1 implementations MAY transmit 8-bit or multi-octet characters inUS-ASCII means "&")literals, but SHOULD do so only when the [CHARSET] is identified. Although a BINARY body encoding is defined, unencoded binary strings are not permitted.However, all names start in US-ASCII, andA "binary string" is any string with NUL characters. Implementations MUSTend in US-ASCII; that is,encode binary data into aname that endstextual form, such as BASE64, before transmitting the data. A string with an excessive amount of CTL characters MAY also be considered to be binary. 4.4. Parenthesized List Data structures are represented as anon-ASCII ISO-10646 character MUST end with"parenthesized list"; a"-"). The purposesequence ofthese modifications isdata items, delimited by space, and bounded at each end by parentheses. A parenthesized list can contain other parenthesized lists, using multiple levels of parentheses tocorrect the following problems with UTF-7: 1) UTF-7 uses the "+" character for shifting; this conflictsindicate nesting. The empty list is represented as () -- a parenthesized list with no members. 4.5. NIL The special form "NIL" represents thecommon usenon-existence of"+" in mailbox names, ina particularUSENET newsgroup names. 2) UTF-7's encodingdata item that isBASE64 which uses the "/" character; this conflicts with the use of "/"represented as apopular hierarchy delimiter. 3) UTF-7 prohibitsstring or parenthesized list, as distinct from theunencoded usage of "\"; this conflicts withempty string "" or theuse of "\" as a popular hierarchy delimiter. 4) UTF-7 prohibitsempty parenthesized list (). Note: NIL is never used for any data item which takes theunencoded usageform of"~"; this conflicts with the usean atom. For example, a mailbox name of"~" in some servers as"NIL" is ahome directory indicator. 5) UTF-7 permits multiple alternate formsmailbox named NIL as opposed torepresent the same string; in particular, printable US-ASCII characters can be represented in encoded form. Although modified UTF-7 isaconvention, it establishes certain requirements on server handling of anynon-existent mailboxname withname. This is because mailbox uses "astring" syntax which is anembedded "&" character. In particular, server implementations MUST preserve the exact form of the modified BASE64 portionatom or a string. Conversely, an addr-name of NIL is amodified UTF-7 name and treat that text as case-sensitive, even if names are otherwise case-insensitivenon-existent personal name, because addr-name uses "nstring" syntax which is NIL orcase-folded. Server implementations SHOULD verify that any mailbox name argument to CREATE witha string, but never anembedded "&" character is in correct modified UTF-7 syntax; that thereatom. Crispin Standards Track [Page 17] RFC 3501 IMAPv4 March 2003 5. Operational Considerations The following rules areno superfluous shifts; andlisted here to ensure thatthere is no encoding in modified BASE64 of any printing US-ASCII character which can represent itself. However, clientall IMAP4rev1 implementations interoperate properly. 5.1. Mailbox Naming Mailbox names are 7-bit. Client implementations MUST NOTdepend upon the server doing this; and SHOULD NOTattempt to createa8-bit mailboxname with an embedded "&" character unless it complies with modified UTF-7 syntax. Server implementations which export a mail store which does not follow the modified UTF-7 convention MUST convert to modified UTF-7names, and SHOULD interpret any 8-bit mailboxname that contains either non-ASCII charactersnames returned by LIST or LSUB as UTF-8. Server implementations SHOULD prohibit the"&" character. Crispin [Page 16] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 For example, here is acreation of 8-bit mailboxname which mixes English, Chinese,names, andJapanese text: ~peter/mail/&U,BTFw-/&ZeVnLIqe- For example, the string "&Jjo!" is not a valid mailbox name because it does not containSHOULD NOT return 8-bit mailbox names in LIST or LSUB. See section 5.1.3 for more information on how to represent non-ASCII mailbox names. Note: 8-bit mailbox names were undefined in earlier versions of this protocol. Some sites used ashiftlocal 8-bit character set toUS-ASCII before the "!". The correct formrepresent non-ASCII mailbox names. Such usage is"&Jjo-!".not interoperable, and is now formally deprecated. Thestring "&U,BTFw-&ZeVnLIqe-"case-insensitive mailbox name INBOX isnot permitted because it containsasuperfluous shift.special name reserved to mean "the primary mailbox for this user on this server". Thecorrect forminterpretation of all other names is"&U,BTF2XlZyyKng-". 5.2. Mailbox Sizeimplementation-dependent. In particular, this specification takes no position on case sensitivity in non-INBOX mailbox names. Some server implementations are fully case-sensitive; others preserve case of a newly-created name but otherwise are case-insensitive; andMessage Status Updates Atyet others coerce names to a particular case. Client implementations MUST interact with anytime,of these. If a servercan send data thatimplementation interprets non-INBOX mailbox names as case-insensitive, it MUST treat names using the international naming convention specially as described in section 5.1.3. There are certain clientdid not request. Sometimes, such behavior is REQUIRED. For example, agents other than the server MAY add messages to the mailbox (e.g.considerations when creating a newmessage delivery), change the flagsmailbox name: 1) Any character which is one ofmessage inthemailbox (e.g. simultaneous access toatom-specials (see thesame mailbox by multiple agents), or even remove messages fromFormal Syntax) will require that themailbox. A server MUST sendmailboxsize updates automatically ifname be represented as amailbox size change is observed during the processing ofquoted string or literal. 2) CTL and other non-graphic characters are difficult to represent in acommand. A server SHOULD send message flag updates automatically, without requiringuser interface and are best avoided. 3) Although theclientlist-wildcard characters ("%" and "*") are valid in a mailbox name, it is difficult torequestuse suchupdates explicitly. Special rules exist for server notification of a client aboutmailbox names with theremoval of messagesLIST and LSUB commands due toprevent synchronization errors; seethedescription ofconflict with wildcard interpretation. Crispin Standards Track [Page 18] RFC 3501 IMAPv4 March 2003 4) Usually, a character (determined by theEXPUNGE response for more detail. In particular, itserver implementation) isNOT permittedreserved tosend an EXISTS response that would reduce the numberdelimit levels ofmessageshierarchy. 5) Two characters, "#" and "&", have meanings by convention, and should be avoided except when used inthe mailbox; only the EXPUNGE response can do this. Regardlessthat convention. 5.1.1. Mailbox Hierarchy Naming If it is desired to export hierarchical mailbox names, mailbox names MUST be left-to-right hierarchical using a single character to separate levels ofwhat implementation decisionshierarchy. The same hierarchy separator character is used for all levels of hierarchy within aclient makes on remembering data fromsingle name. 5.1.2. Mailbox Namespace Naming Convention By convention, theserver, a client implementation MUST record mailbox size updates. It MUST NOT assume thatfirst hierarchical element of anycommand after initialmailboxselection will returnname which begins with "#" identifies thesize"namespace" of themailbox. 5.3. Response when no Command in Progress Server implementations are permittedremainder of the name. This makes it possible tosend an untagged response (except for EXPUNGE) while there is no command in progress. Serverdisambiguate between different types of mailbox stores, each of which have their own namespaces. For example, implementationsthat send such responses MUST deal with flow control considerations. Specifically, they MUST either (1) verify thatwhich offer access to USENET newsgroups MAY use thesize"#news" namespace to partition the USENET newsgroup namespace from that of other mailboxes. Thus, thedata does not exceedcomp.mail.misc newsgroup would have a mailbox name of "#news.comp.mail.misc", and theunderlying transport's available window size, or (2) use non-blocking writes. Crispin [Page 17] INTERNET-DRAFTname "comp.mail.misc" can refer to a different object (e.g., a user's private mailbox). 5.1.3. Mailbox International Naming Convention By convention, international mailbox names in IMAP4rev1EXPIRES 1 April 2003 5.4. Autologout Timer Ifare specified using aserver has an inactivity autologout timer,modified version of thedurationUTF-7 encoding described in [UTF-7]. Modified UTF-7 may also be usable in servers that implement an earlier version of this protocol. In modified UTF-7, printable US-ASCII characters, except for "&", represent themselves; thattimer MUST be at least 30 minutes.is, characters with octet values 0x20-0x25 and 0x27-0x7e. Thereceipt of ANY command fromcharacter "&" (0x26) is represented by theclient duringtwo-octet sequence "&-". All other characters (octet values 0x00-0x1f and 0x7f-0xff) are represented in modified BASE64, with a further modification from [UTF-7] thatinterval SHOULD suffice"," is used instead of "/". Modified BASE64 MUST NOT be used toreset the autologout timer. 5.5. Multiple Commands in Progress The client MAY send another command without waiting for the completion result response of a command, subjectrepresent any printing US-ASCII character which can represent itself. Crispin Standards Track [Page 19] RFC 3501 IMAPv4 March 2003 "&" is used toambiguity rules (see below)shift to modified BASE64 andflow control constraints on the underlying data stream. Similarly, a server MAY begin processing another command before processing the current command"-" tocompletion, subjectshift back toambiguity rules.US-ASCII. There is no implicit shift from BASE64 to US-ASCII, and null shifts ("-&" while in BASE64; note that "&-" while in US-ASCII means "&") are not permitted. However,any command continuation request responsesall names start in US-ASCII, andcommand continuationsMUSTbe negotiated before any subsequent command is initiated. The exception is if an ambiguity would result because ofend in US-ASCII; that is, acommandname thatwould affect the results of other commands. Clients MUST NOT send multiple commands without waiting if an ambiguity would result. If the server detectsends with apossible ambiguity, itnon-ASCII ISO-10646 character MUSTexecute commandsend with a "-"). The purpose of these modifications is tocompletion incorrect theorder given byfollowing problems with UTF-7: 1) UTF-7 uses theclient. The most obvious example"+" character for shifting; this conflicts with the common use ofambiguity"+" in mailbox names, in particular USENET newsgroup names. 2) UTF-7's encoding iswhen a command would affectBASE64 which uses theresults of another command; for example, a FETCH"/" character; this conflicts with the use of "/" as amessage's flags andpopular hierarchy delimiter. 3) UTF-7 prohibits the unencoded usage of "\"; this conflicts with the use of "\" as aSTOREpopular hierarchy delimiter. 4) UTF-7 prohibits the unencoded usage ofthat same message's flags. A non-obvious ambiguity occurs"~"; this conflicts withcommands that permit an untagged EXPUNGE response (commands other than FETCH, STORE, and SEARCH), since an untagged EXPUNGE response can invalidate sequence numbersthe use of "~" in some servers as asubsequent command. Thishome directory indicator. 5) UTF-7 permits multiple alternate forms to represent the same string; in particular, printable US-ASCII characters can be represented in encoded form. Although modified UTF-7 isnotaproblem for FETCH, STORE, or SEARCH commands because servers are prohibited from sending EXPUNGE responses whileconvention, it establishes certain requirements on server handling of any mailbox name with an embedded "&" character. In particular, server implementations MUST preserve the exact form ofthose commandsthe modified BASE64 portion of a modified UTF-7 name and treat that text as case-sensitive, even if names are otherwise case-insensitive or case-folded. Server implementations SHOULD verify that any mailbox name with an embedded "&" character, used as an argument to CREATE, is: inprogress. Therefore, iftheclient sendscorrectly modified UTF-7 syntax, has no superfluous shifts, and has no encoding in modified BASE64 of anycommand other than FETCH, STORE, or SEARCH, itprinting US-ASCII character which can represent itself. However, client implementations MUSTwait forNOT depend upon thecompletion result response before sendingserver doing this, and SHOULD NOT attempt to create acommandmailbox name withmessage sequence numbers. Note: UID FETCH, UID STORE, and UID SEARCH are different commands from FETCH, STORE, and SEARCH. If the client sends a UID command,an embedded "&" character unless itmust wait for a completion result response before sending a commandcomplies withmessage sequence numbers. Crispin [Page 18] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 For example,thefollowing non-waiting command sequences are invalid: FETCH + NOOP + STORE STORE + COPY + FETCH COPY + COPY CHECK + FETCH The following are examples of valid non-waiting command sequences: FETCH + STORE + SEARCH + CHECK STORE + COPY + EXPUNGE UID SEARCH + UID SEARCH may be valid or invalid asmodified UTF-7 syntax. Server implementations which export anon-waiting command sequence, depending upon whether ormail store that does not follow thesecond UID SEARCHmodified UTF-7 convention MUST convert to modified UTF-7 any mailbox name that containsmessage sequence numbers.either non-ASCII characters or the "&" character. Crispin Standards Track [Page19] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April20] RFC 3501 IMAPv4 March 20036. Client Commands IMAP4rev1 commands are described in this section. Commands are organized by the state in which the commandFor example, here ispermitted. Commandsa mailbox name whichare permitted in multiple states are listed in the minimum permitted state (for example, commands valid in authenticatedmixes English, Chinese, andselected state are listed in the authenticated state commands). Command arguments, identified by "Arguments:" inJapanese text: ~peter/mail/&U,BTFw-/&ZeVnLIqe- For example, thecommand descriptions below, are described by function,string "&Jjo!" is notby syntax.a valid mailbox name because it does not contain a shift to US-ASCII before the "!". Theprecise syntax of command argumentscorrect form isdescribed in the Formal Syntax section. Some commands cause specific server responses to be returned; these are identified by "Responses:" in the command descriptions below. See the response descriptions in the Responses section for information on these responses, and the Formal Syntax section for the precise syntax of these responses. It"&Jjo-!". The string "&U,BTFw-&ZeVnLIqe-" ispossible for server data to be transmitted asnot permitted because it contains aresult ofsuperfluous shift. The correct form is "&U,BTF2XlZyyKng-". 5.2. Mailbox Size and Message Status Updates At anycommand; thus, commandstime, a server can send data thatdothe client did notspecifically requirerequest. Sometimes, such behavior is REQUIRED. For example, agents other than the serverdata specify "no specific responses for this command" insteadMAY add messages to the mailbox (e.g., new message delivery), change the flags of"none". The "Result:"the messages in thecommand description refersmailbox (e.g., simultaneous access to thepossible tagged status responses to a command, and any special interpretation of these status responses. The state of a connection is only changedsame mailbox bysuccessful commands which are documented as changing state. A rejected command (BAD response) never changes the state of the connectionmultiple agents), orofeven remove messages from theselectedmailbox. Afailed command (NO response) generally does notserver MUST send mailbox size updates automatically if a mailbox size change is observed during thestateprocessing of a command. A server SHOULD send message flag updates automatically, without requiring theconnection orclient to request such updates explicitly. Special rules exist for server notification of a client about theselected mailbox; the exception being the SELECT and EXAMINE commands. which 6.1. Client Commands - Any State The following commands are valid in any state: CAPABILITY, NOOP, and LOGOUT. Crispin [Page 20] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 6.1.1. CAPABILITY Command Arguments: none Responses: REQUIRED untagged response: CAPABILITY Result: OK - capability completed BAD - command unknown or arguments invalid The CAPABILITY command requests a listing of capabilities that the server supports. The server MUST send a single untagged CAPABILITY response with "IMAP4rev1" as oneremoval of messages to prevent synchronization errors; see thelisted capabilities before the (tagged) OK response. A capability name which begins with "AUTH=" indicates that the server supports that particular authentication mechanism. All such names are, by definition, partdescription ofthis specification. For example,theauthorization capabilityEXPUNGE response for more detail. In particular, it is NOT permitted to send anexperimental "blurdybloop" authenticatorEXISTS response that wouldbe "AUTH=XBLURDYBLOOP" and not "XAUTH=BLURDYBLOOP" or "XAUTH=XBLURDYBLOOP". Other capability names refer to extensions, revisions, or amendments to this specification. Seereduce thedocumentationnumber of messages in theCAPABILITY response for additional information. No capabilities, beyondmailbox; only thebase IMAP4rev1 set defined in this specification, are enabled without explicitEXPUNGE response can do this. Regardless of what implementation decisions a clientaction to invokemakes on remembering data from thecapability. Client and server implementationsserver, a client implementation MUSTimplementrecord mailbox size updates. It MUST NOT assume that any command after theSTARTTLS, LOGINDISABLED, and AUTH=PLAIN (described in [IMAP-TLS]) capabilities. Seeinitial mailbox selection will return theSecurity Considerations section for important information. Seesize of thesection entitled "Client Commands - Experimental/Expansion" for information aboutmailbox. 5.3. Response when no Command in Progress Server implementations are permitted to send an untagged response (except for EXPUNGE) while there is no command in progress. Server implementations that send such responses MUST deal with flow control considerations. Specifically, they MUST either (1) verify that theformsize ofsitethe data does not exceed the underlying transport's available window size, orimplementation-specific capabilities. Example: C: abcd CAPABILITY S: * CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI LOGINDISABLED S: abcd OK CAPABILITY completed C: efgh STARTTLS S: efgh OK STARTLS completed <TLS negotiation, further commands are under [TLS] layer> C: ijkl CAPABILITY S: * CAPABILITY IMAP4rev1 AUTH=GSSAPI AUTH=PLAIN S: ijkl OK CAPABILITY completed(2) use non-blocking writes. Crispin Standards Track [Page 21]INTERNET-DRAFT IMAP4rev1 EXPIRES 1 AprilRFC 3501 IMAPv4 March 20036.1.2. NOOP Command Arguments: none Responses: no specific responses for this command (but see below) Result: OK - noop completed BAD - command unknown or arguments invalid The NOOP command always succeeds. It does nothing. Since any command can return a status update as untagged data, the NOOP command can be used as a periodic poll for new messages or message status updates during5.4. Autologout Timer If aperiod ofserver has an inactivity(this isautologout timer, thepreferred method to do this).duration of that timer MUST be at least 30 minutes. TheNOOPreceipt of ANY commandcan also be usedfrom the client during that interval SHOULD suffice to resetany inactivitythe autologouttimer ontimer. 5.5. Multiple Commands in Progress The client MAY send another command without waiting for theserver. Example: C: a002 NOOP S: a002 OK NOOP completed . . . C: a047 NOOP S: * 22 EXPUNGE S: * 23 EXISTS S: * 3 RECENT S: * 14 FETCH (FLAGS (\Seen \Deleted)) S: a047 OK NOOP completed 6.1.3. LOGOUT Command Arguments: none Responses: REQUIRED untagged response: BYE Result: OK - logout completed BAD - command unknown or arguments invalid The LOGOUT command informscompletion result response of a command, subject to ambiguity rules (see below) and flow control constraints on the underlying data stream. Similarly, a serverthatMAY begin processing another command before processing theclientcurrent command to completion, subject to ambiguity rules. However, any command continuation request responses and command continuations MUST be negotiated before any subsequent command isdone with the connection.initiated. Theserver MUST sendexception is if an ambiguity would result because of aBYE untagged response beforecommand that would affect the(tagged) OK response, and then closeresults of other commands. Clients MUST NOT send multiple commands without waiting if an ambiguity would result. If thenetwork connection. Example: C: A023 LOGOUT S: * BYE IMAP4rev1 Server logging out S: A023 OK LOGOUT completed (Server and client then closeserver detects a possible ambiguity, it MUST execute commands to completion in theconnection) Crispin [Page 22] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 6.2. Client Commands - Not Authenticated State In not authenticated state,order given by theAUTHENTICATE or LOGIN command establishes authentication and enters authenticated state.client. TheAUTHENTICATEmost obvious example of ambiguity is when a commandprovideswould affect the results of another command, e.g., ageneral mechanism forFETCH of avarietymessage's flags and a STORE ofauthentication techniques, privacy protection, and integrity checking; whereas the LOGIN command uses a traditional user name and plaintext password pair and has no means of establishing privacy protection or integrity checking. The STARTTLS command isthat same message's flags. A non-obvious ambiguity occurs with commands that permit analternate form of establishing session privacy protectionuntagged EXPUNGE response (commands other than FETCH, STORE, andintegrity checking, but does not establish authentication or enter authenticated state. Server implementations MAY allow access to certain mailboxes without establishing authentication. ThisSEARCH), since an untagged EXPUNGE response canbe done by means of the ANONYMOUS [SASL] authenticator describedinvalidate sequence numbers in[ANONYMOUS]. An older conventiona subsequent command. This is not aLOGIN command using the userid "anonymous";problem for FETCH, STORE, or SEARCH commands because servers are prohibited from sending EXPUNGE responses while any of those commands are inthis case a password is required althoughprogress. Therefore, if theserver may choose to acceptclient sends anypassword. It is implementation-dependent what restrictions are placed on anonymous users. Once authenticated (including as anonymous),command other than FETCH, STORE, or SEARCH, itis not possible to re-enter not authenticated state. In addition toMUST wait for theuniversal commands (CAPABILITY, NOOP,completion result response before sending a command with message sequence numbers. Note: UID FETCH, UID STORE, andLOGOUT), the following commandsUID SEARCH arevalid in not authenticated state: STARTTLS, AUTHENTICATEdifferent commands from FETCH, STORE, andLOGIN. SeeSEARCH. If theSecurity Considerations sectionclient sends a UID command, it must wait forimportant information about these commands. 6.2.1. STARTTLS Command Arguments: none Responses: no specifica completion result responsefor thisbefore sending a commandResult: OK - starttls completed, begin TLS negotiation BAD -with message sequence numbers. Crispin Standards Track [Page 22] RFC 3501 IMAPv4 March 2003 For example, the following non-waiting commandunknownsequences are invalid: FETCH + NOOP + STORE STORE + COPY + FETCH COPY + COPY CHECK + FETCH The following are examples of valid non-waiting command sequences: FETCH + STORE + SEARCH + CHECK STORE + COPY + EXPUNGE UID SEARCH + UID SEARCH may be valid orargumentsinvalidA [TLS] negotiation begins immediately afteras a non-waiting command sequence, depending upon whether or not theCRLF atsecond UID SEARCH contains message sequence numbers. 6. Client Commands IMAP4rev1 commands are described in this section. Commands are organized by theend ofstate in which thetagged OK response fromcommand is permitted. Commands which are permitted in multiple states are listed in theserver. Once a client issues a STARTTLS command, it MUST NOT issue furtherminimum permitted state (for example, commandsuntil a server response is seenvalid in authenticated and selected state are listed in the[TLS] negotiation is complete. The server remainsauthenticated state commands). Command arguments, identified by "Arguments:" innon-authenticated state, even if client credentials are supplied duringthe[TLS] negotiation. This doescommand descriptions below, are described by function, notpreclude an authentication mechanism such as EXTERNAL (definedby syntax. The precise syntax of command arguments is described in[SASL]) from using client identity determinedthe Formal Syntax section. Some commands cause specific server responses to be returned; these are identified by "Responses:" in the[TLS] Crispin [Page 23] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 negotiation. Once [TLS] has been started,command descriptions below. See theclient MUST discard cachedresponse descriptions in the Responses section for informationabout server capabilitieson these responses, andSHOULD re-issuetheCAPABILITY command. ThisFormal Syntax section for the precise syntax of these responses. It isnecessarypossible for server data toprotect against man-in- the-middle attacks which alterbe transmitted as a result of any command. Thus, commands that do not specifically require server data specify "no specific responses for this command" instead of "none". The "Result:" in thecapabilities list priorcommand description refers toSTARTTLS.the possible tagged status responses to a command, and any special interpretation of these status responses. Theserver MAY advertise different capabilities after STARTTLS. Example: C: a001 CAPABILITY S: * CAPABILITY IMAP4rev1 STARTTLS LOGINDISABLED S: a001 OK CAPABILITY completed C: a002 STARTTLS S: a002 OK Begin TLS negotiation now <TLS negotiation, furtherstate of a connection is only changed by successful commands which areunder [TLS] layer> C: a003 CAPABILITY S: * CAPABILITY IMAP4rev1 AUTH=PLAIN S: a003 OK CAPABILITY completed C: a004 LOGIN joe password S: a004 OK LOGIN completed 6.2.2. AUTHENTICATE Command Arguments: authentication mechanism name Responses: continuation data can be requested Result: OK - authenticate completed, now in authenticated state NO - authenticate failure: unsupported authentication mechanism, credentialsdocumented as changing state. A rejectedBAD - command unknown or arguments invalid, authentication exchange cancelled The AUTHENTICATEcommandindicates a [SASL] authentication mechanism to(BAD response) never changes theserver. Ifstate of theserver supportsconnection or of therequested authentication mechanism, it performs an authentication protocol exchange to authenticate and identify the client. It MAY also negotiate an OPTIONAL security layer for subsequent protocol interactions. If the requested authentication mechanism is not supported, the server SHOULD reject the AUTHENTICATE command by sending a tagged NO response. The AUTHENTICATEselected mailbox. A failed command (NO response) generally does notsupportchange theoptional "initial response" featurestate of[SASL]. Section 5.1the connection or of[SASL] specifies how to handle an authentication mechanism which uses an initial response.the selected mailbox; the exception being the SELECT and EXAMINE commands. Crispin Standards Track [Page24] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April23] RFC 3501 IMAPv4 March 2003 6.1. Client Commands - Any State Theservice name specified by this protocol's profile of [SASL] is "imap".following commands are valid in any state: CAPABILITY, NOOP, and LOGOUT. 6.1.1. CAPABILITY Command Arguments: none Responses: REQUIRED untagged response: CAPABILITY Result: OK - capability completed BAD - command unknown or arguments invalid Theauthentication protocol exchange consists ofCAPABILITY command requests aserieslisting ofserver challenges and client responsescapabilities thatare specific totheauthentication mechanism. Aserverchallenge consists of a command continuation request response with the "+" token followed by a BASE64 encoded string.supports. Theclient response consists ofserver MUST send a singleline consistinguntagged CAPABILITY response with "IMAP4rev1" as one ofa BASE64 encoded string. Iftheclient wishes to cancel an authentication exchange, it issues a line consisting of a single "*". Iflisted capabilities before the (tagged) OK response. A capability name which begins with "AUTH=" indicates that the serverreceivessupports that particular authentication mechanism. All suchan response, it MUST reject the AUTHENTICATE commandnames are, bysending a tagged BAD response. If a security layer is negotiated through the [SASL] authentication exchange, it takes effect immediately following the CRLF that concludesdefinition, part of this specification. For example, theauthentication exchangeauthorization capability forthe client,an experimental "blurdybloop" authenticator would be "AUTH=XBLURDYBLOOP" and not "XAUTH=BLURDYBLOOP" or "XAUTH=XBLURDYBLOOP". Other capability names refer to extensions, revisions, or amendments to this specification. See theCRLFdocumentation of thetagged OKCAPABILITY response for additional information. No capabilities, beyond theserver. While client and server implementations MUST implement the AUTHENTICATE command itself, it is not required to implement any authentication mechanisms other than the PLAIN mechanism describedbase IMAP4rev1 set defined in[IMAP-TLS]. Also, an authentication mechanism is not requiredthis specification, are enabled without explicit client action tosupport any security layers. Note: a server implementation MUST implement a configuration in which it does NOT permit any plaintext password mechanisms, unless either the STARTTLS command has been negotiated or some other mechanism that protectsinvoke thesession from password snooping has been provided. Server sites SHOULD NOT use any configuration which permits a plaintext password mechanism without such a protection mechanism against password snooping.capability. Client and server implementationsSHOULDMUST implementadditional [SASL] mechanisms which do not use plaintext passwords, suchtheGSSAPI mechanism described in [SASL] and/or the [DIGEST-MD5] mechanism. ServersSTARTTLS, LOGINDISABLED, andclients can support multiple authentication mechanisms. The server SHOULD list its supported authentication mechanismsAUTH=PLAIN (described in [IMAP-TLS]) capabilities. See theresponse toSecurity Considerations section for important information. See theCAPABILITY command so thatsection entitled "Client Commands - Experimental/Expansion" for information about theclient knows which authentication mechanisms to use. A server MAY include a CAPABILITY response code in the tagged OK responseform ofa successful AUTHENTICATE command in order to send capabilities automatically. It is unnecessary for a client to send a separate CAPABILITY command if it recognizes these automaticsite or implementation-specific capabilities.This should only be done if a securityCrispin Standards Track [Page25] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April24] RFC 3501 IMAPv4 March 2003layer was not negotiated by the AUTHENTICATE command, because the tagged OK response as part of an AUTHENTICATE command is not protected by encryption/integrity checking. [SASL] requires the client to re-issue a CAPABILITY command in this case. If an AUTHENTICATE command fails with a NO response, the client MAY try another authentication mechanism by issuing another AUTHENTICATE command. It MAY also attempt to authenticate by using the LOGIN command (see section 6.2.3 for more detail). In other words, the client MAY request authentication types in decreasing order of preference, with the LOGIN command as a last resort. The authorization identity passed from the client to the server during the authentication exchange is interpreted by the server as the user name whose privileges the client is requesting.Example: C: abcd CAPABILITY S: *OKCAPABILITY IMAP4rev1Server C: A001 AUTHENTICATE GSSAPISTARTTLS AUTH=GSSAPI LOGINDISABLED S:+abcd OK CAPABILITY completed C:YIIB+wYJKoZIhvcSAQICAQBuggHqMIIB5qADAgEFoQMCAQ6iBw MFACAAAACjggEmYYIBIjCCAR6gAwIBBaESGxB1Lndhc2hpbmd0 b24uZWR1oi0wK6ADAgEDoSQwIhsEaW1hcBsac2hpdmFtcy5jYW Mud2FzaGluZ3Rvbi5lZHWjgdMwgdCgAwIBAaEDAgEDooHDBIHA cS1GSa5b+fXnPZNmXB9SjL8Ollj2SKyb+3S0iXMljen/jNkpJX AleKTz6BQPzj8duz8EtoOuNfKgweViyn/9B9bccy1uuAE2HI0y C/PHXNNU9ZrBziJ8Lm0tTNc98kUpjXnHZhsMcz5Mx2GR6dGknb I0iaGcRerMUsWOuBmKKKRmVMMdR9T3EZdpqsBd7jZCNMWotjhi vd5zovQlFqQ2Wjc2+y46vKP/iXxWIuQJuDiisyXF0Y8+5GTpAL pHDc1/pIGmMIGjoAMCAQGigZsEgZg2on5mSuxoDHEA1w9bcW9n FdFxDKpdrQhVGVRDIzcCMCTzvUboqb5KjY1NJKJsfjRQiBYBdE NKfzK+g5DlV8nrw81uOcP8NOQCLR5XkoMHC0Dr/80ziQzbNqhx O6652Npft0LQwJvenwDI13YxpwOdMXzkWZN/XrEqOWp6GCgXTB vCyLWLlWnbaUkZdEYbKHBPjd8t/1x5Yg==efgh STARTTLS S:+ YGgGCSqGSIb3EgECAgIAb1kwV6ADAgEFoQMCAQ+iSzBJoAMC AQGiQgRAtHTEuOP2BXb9sBYFR4SJlDZxmg39IxmRBOhXRKdDA0 uHTCOT9Bq3OsUTXUlk0CsFLoa8j+gvGDlgHuqzWHPSQg==efgh OK STARTLS completed <TLS negotiation, further commands are under [TLS] layer> C: ijkl CAPABILITY S:+ YDMGCSqGSIb3EgECAgIBAAD/////6jcyG4GE3KkTzBeBiVHe ceP2CWY0SR0fAQAgAAQEBAQ= C: YDMGCSqGSIb3EgECAgIBAAD/////3LQBHXTpFfZgrejpLlLImP wkhbfa2QteAQAgAG1yYwE=* CAPABILITY IMAP4rev1 AUTH=GSSAPI AUTH=PLAIN S:A001ijkl OKGSSAPI authentication successful Note: The line breaks in the first client response are for editorial clarity and are not in real authenticators. Crispin [Page 26] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 6.2.3. LOGINCAPABILITY completed 6.1.2. NOOP Command Arguments:user name passwordnone Responses: no specific responses for this command (but see below) Result: OK -login completed, now in authenticated state NO - login failure: user name or password rejectednoop completed BAD - command unknown or arguments invalid TheLOGINNOOP commandidentifies the client to the server and carries the plaintext password authenticating this user. A server MAY includealways succeeds. It does nothing. Since any command can return aCAPABILITY response code instatus update as untagged data, thetagged OK response to a successful LOGINNOOP commandin order to send capabilities automatically. It is unnecessarycan be used as a periodic poll for new messages or message status updates during aclientperiod of inactivity (this is the preferred method tosend a separate CAPABILITYdo this). The NOOP commandif it recognizes these automatic capabilities.can also be used to reset any inactivity autologout timer on the server. Example: C:a001 LOGIN SMITH SESAMEa002 NOOP S:a001a002 OKLOGINNOOP completedNote: Use of the LOGIN. . . C: a047 NOOP S: * 22 EXPUNGE S: * 23 EXISTS S: * 3 RECENT S: * 14 FETCH (FLAGS (\Seen \Deleted)) S: a047 OK NOOP completed Crispin Standards Track [Page 25] RFC 3501 IMAPv4 March 2003 6.1.3. LOGOUT Command Arguments: none Responses: REQUIRED untagged response: BYE Result: OK - logout completed BAD - commandover an insecure network (such asunknown or arguments invalid The LOGOUT command informs theInternet)server that the client isa security risk, because anyone monitoring network traffic can obtain plaintext passwords. The LOGIN command SHOULD NOT be used except as a last resort, and it is recommended that client implementations have a means to disable any automatic use ofdone with theLOGIN command. Aconnection. The serverimplementationMUSTimplementsend aconfiguration in which, unless either the STARTTLS command has been negotiated or some other mechanism that protects the session from password snooping has been provided, it advertisesBYE untagged response before theLOGINDISABLED capability(tagged) OK response, anddoes NOT permitthen close theLOGIN command.network connection. Example: C: A023 LOGOUT S: * BYE IMAP4rev1 Serversites SHOULD NOT use any configuration which permits the LOGIN command without such a protection mechanism against password snooping. Alogging out S: A023 OK LOGOUT completed (Server and clientimplementation MUST NOT send a LOGIN command ifthen close theLOGINDISABLED capability is advertised. Crispin [Page 27] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 6.3.connection) 6.2. Client Commands - Not Authenticated State In the not authenticated state,commands that manipulate mailboxes as atomic entities are permitted. Of these commands,theSELECTAUTHENTICATE or LOGIN command establishes authentication andEXAMINE commands will selectenters the authenticated state. The AUTHENTICATE command provides amailboxgeneral mechanism foraccessa variety of authentication techniques, privacy protection, andenter selected state. In addition tointegrity checking; whereas theuniversal commands (CAPABILITY, NOOP,LOGIN command uses a traditional user name andLOGOUT),plaintext password pair and has no means of establishing privacy protection or integrity checking. The STARTTLS command is an alternate form of establishing session privacy protection and integrity checking, but does not establish authentication or enter thefollowing commands are valid inauthenticated state. Server implementations MAY allow access to certain mailboxes without establishing authentication. This can be done by means of the ANONYMOUS [SASL] authenticator described in [ANONYMOUS]. An older convention is a LOGIN command using the userid "anonymous"; in this case, a password is required although the server may choose to accept any password. The restrictions placed on anonymous users are implementation-dependent. Once authenticated (including as anonymous), it is not possible to re-enter not authenticated state. Crispin Standards Track [Page 26] RFC 3501 IMAPv4 March 2003 In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), the following commands are valid in the not authenticated state:SELECT, EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS,STARTTLS, AUTHENTICATE andAPPEND. 6.3.1. SELECTLOGIN. See the Security Considerations section for important information about these commands. 6.2.1. STARTTLS Command Arguments:mailbox namenone Responses:REQUIRED untagged responses: FLAGS, EXISTS, RECENT REQUIRED OK untagged responses: UNSEEN, PERMANENTFLAGS, UIDNEXT, UIDVALIDITYno specific response for this command Result: OK -selectstarttls completed,now in selected state NO - select failure, now in authenticated state: no such mailbox, can't access mailboxbegin TLS negotiation BAD - command unknown or arguments invalidThe SELECT command selects a mailbox so that messages inA [TLS] negotiation begins immediately after themailbox can be accessed. Before returning anCRLF at the end of the tagged OKtoresponse from theclient,server. Once a client issues a STARTTLS command, it MUST NOT issue further commands until a server response is seen and the [TLS] negotiation is complete. The serverMUST sendremains in thefollowing untagged data tonon-authenticated state, even if client credentials are supplied during theclient. Note that earlier versions of this protocol only required the FLAGS, EXISTS, and RECENT untagged data; consequently, client implementations SHOULD implement default behavior for missing data[TLS] negotiation. This does not preclude an authentication mechanism such asdiscussed with the individual item. FLAGS Defined flags in the mailbox. See the description of the FLAGS response for more detail. <n> EXISTS The number of messages in the mailbox. See the description of the EXISTS response for more detail. <n> RECENT The number of messages with the \Recent flag set. See the description of the RECENT response for more detail. OK [UNSEEN <n>] The message sequence number of the first unseen messageEXTERNAL (defined in [SASL]) from using client identity determined by themailbox. If this is missing,[TLS] negotiation. Once [TLS] has been started, the clientcan not make any assumptionsMUST discard cached information aboutthe first unseen message in the mailbox,server capabilities andneeds to issue a SEARCH command if it wants to find it. Crispin [Page 28] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 OK [PERMANENTFLAGS (<list of flags>)] A list of message flags thatSHOULD re-issue theclient can change permanently. If thisCAPABILITY command. This ismissing, the client should assume that all flags can be changed permanently. OK [UIDNEXT <n>] The next unique identifier value. Refernecessary tosection 2.3.1.1 for more information. If this is missing, the client can not make any assumptions aboutprotect against man-in- the-middle attacks which alter thenext unique identifier value. OK [UIDVALIDITY <n>] The unique identifier validity value. Refercapabilities list prior tosection 2.3.1.1 for more information. If this is missing, theSTARTTLS. The serverdoes not support unique identifiers. Only one mailboxMAY advertise different capabilities after STARTTLS. Example: C: a001 CAPABILITY S: * CAPABILITY IMAP4rev1 STARTTLS LOGINDISABLED S: a001 OK CAPABILITY completed C: a002 STARTTLS S: a002 OK Begin TLS negotiation now <TLS negotiation, further commands are under [TLS] layer> C: a003 CAPABILITY S: * CAPABILITY IMAP4rev1 AUTH=PLAIN S: a003 OK CAPABILITY completed C: a004 LOGIN joe password S: a004 OK LOGIN completed Crispin Standards Track [Page 27] RFC 3501 IMAPv4 March 2003 6.2.2. AUTHENTICATE Command Arguments: authentication mechanism name Responses: continuation data can beselected at a timerequested Result: OK - authenticate completed, now ina connection; simultaneous access to multiple mailboxes requires multiple connections.authenticated state NO - authenticate failure: unsupported authentication mechanism, credentials rejected BAD - command unknown or arguments invalid, authentication exchange cancelled TheSELECTAUTHENTICATE commandautomatically deselects any currently selected mailbox before attempting the new selection. Consequently, if a mailbox is selected andindicates aSELECT command that fails is attempted, no mailbox is selected. If the client is permitted[SASL] authentication mechanism tomodifythemailbox,server. If the serverSHOULD prefix the text ofsupports thetagged OK response withrequested authentication mechanism, it performs an authentication protocol exchange to authenticate and identify the"[READ-WRITE]" response code.client. It MAY also negotiate an OPTIONAL security layer for subsequent protocol interactions. If theclientrequested authentication mechanism is notpermitted to modify the mailbox but is permitted read access, the mailbox is selected as read-only, andsupported, the serverMUST prefix the text ofSHOULD reject the AUTHENTICATE command by sending a taggedOK response to SELECT with the "[READ-ONLY]" response code. Read-only access through SELECT differs from the EXAMINENO response. The AUTHENTICATE commandin that certain read-only mailboxes MAY permitdoes not support thechangeoptional "initial response" feature ofpermanent state on a per-user (as opposed[SASL]. Section 5.1 of [SASL] specifies how toglobal) basis. Netnews messages marked in a server-based .newsrc file arehandle anexampleauthentication mechanism which uses an initial response. The service name specified by this protocol's profile ofsuch per-user permanent state that can be modified with read-only mailboxes. Example: C: A142 SELECT INBOX S: * 172 EXISTS S: * 1 RECENT S: * OK [UNSEEN 12] Message 12[SASL] isfirst unseen S: * OK [UIDVALIDITY 3857529045] UIDs valid S: * OK [UIDNEXT 4392] Predicted next UID S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited S: A142 OK [READ-WRITE] SELECT completed Crispin [Page 29] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 6.3.2. EXAMINE Command Arguments: mailbox name Responses: REQUIRED untagged responses: FLAGS, EXISTS, RECENT REQUIRED OK untagged responses: UNSEEN, PERMANENTFLAGS, UIDNEXT, UIDVALIDITY Result: OK - examine completed, now in selected state NO - examine failure, now in authenticated state: no such mailbox, can't access mailbox BAD - command unknown or arguments invalid"imap". TheEXAMINE command is identical to SELECTauthentication protocol exchange consists of a series of server challenges andreturns the same output; however, the selected mailbox is identified as read-only. No changesclient responses that are specific to thepermanent stateauthentication mechanism. A server challenge consists of a command continuation request response with themailbox, including per-user state, are permitted; in particular, EXAMINE MUST NOT cause messages to lose the \Recent flag."+" token followed by a BASE64 encoded string. Thetextclient response consists of a single line consisting of a BASE64 encoded string. If thetagged OK responseclient wishes to cancel an authentication exchange, it issues a line consisting of a single "*". If theEXAMINE commandserver receives such a response, it MUSTbegin withreject the"[READ-ONLY]" response code. Example: C: A932 EXAMINE blurdybloop S: * 17 EXISTS S: * 2 RECENT S: * OK [UNSEEN 8] Message 8 is first unseen S: * OK [UIDVALIDITY 3857529045] UIDs valid S: * OK [UIDNEXT 4392] Predicted next UID S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) S: * OK [PERMANENTFLAGS ()] No permanent flags permitted S: A932 OK [READ-ONLY] EXAMINE completed 6.3.3. CREATE Command Arguments: mailbox name Responses: no specific responses for this command Result: OK - create completed NO - create failure: can't create mailbox with that name BAD - command unknown or arguments invalid The CREATEAUTHENTICATE commandcreates a mailbox with the given name. An OK response is returned only if a new mailbox with that name has been created. It is an error to attempt to create INBOX or a mailbox with a name that refers to an extant mailbox. Any error in creation will returnby sending a taggedNOBAD response.Crispin [Page 30] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003Ifthe mailbox name is suffixed with the server's hierarchy separator character (as returned from the server byaLIST command), thissecurity layer isa declaration thatnegotiated through theclient intends to create mailbox names under this name in the hierarchy. Server implementations that do not require this declaration MUST ignore the declaration. In any case,[SASL] authentication exchange, it takes effect immediately following thenameCRLF thatis created isconcludes thename withoutauthentication exchange for thetrailing hierarchy delimiter. Ifclient, and theserver's hierarchy separator character appears elsewhere inCRLF of thename,tagged OK response for the server. While client and serverSHOULD create any superior hierarchical names that are needed forimplementations MUST implement theCREATEAUTHENTICATE command itself, it is not required tocomplete successfully. Inimplement any authentication mechanisms otherwords,than the PLAIN mechanism described Crispin Standards Track [Page 28] RFC 3501 IMAPv4 March 2003 in [IMAP-TLS]. Also, anattemptauthentication mechanism is not required tocreate "foo/bar/zap" onsupport any security layers. Note: a server implementation MUST implement a configuration in which"/" isit does NOT permit any plaintext password mechanisms, unless either thehierarchy separator characterSTARTTLS command has been negotiated or some other mechanism that protects the session from password snooping has been provided. Server sites SHOULDcreate foo/NOT use any configuration which permits a plaintext password mechanism without such a protection mechanism against password snooping. Client andfoo/bar/ if theyserver implementations SHOULD implement additional [SASL] mechanisms that do notalready exist. If a new mailbox is created withuse plaintext passwords, such thesame name as a mailbox which was deleted,GSSAPI mechanism described in [SASL] and/or the [DIGEST-MD5] mechanism. Servers and clients can support multiple authentication mechanisms. The server SHOULD list itsunique identifiers MUST be greater than any unique identifiers usedsupported authentication mechanisms in theprevious incarnation ofresponse to themailbox UNLESSCAPABILITY command so that thenew incarnation hasclient knows which authentication mechanisms to use. A server MAY include adifferent unique identifier validity value. See the description ofCAPABILITY response code in theUID command for more detail. Example: C: A003 CREATE owatagusiam/ S: A003 OK CREATE completed C: A004 CREATE owatagusiam/blurdybloop S: A004tagged OKCREATE completed Note: The interpretation of this example depends on whether "/" was returned as the hierarchy separator from LIST. If "/" is the hierarchy separator, a new levelresponse ofhierarchy named "owatagusiam" withamember called "blurdybloop"successful AUTHENTICATE command in order to send capabilities automatically. It iscreated. Otherwise, two mailboxes at the same hierarchy level are created. 6.3.4. DELETE Command Arguments: mailbox name Responses: no specific responsesunnecessary forthis command Result: OK - delete completed NO - delete failure: can't delete mailbox with that name BAD - command unknown or arguments invalid The DELETEa client to send a separate CAPABILITY commandpermanently removesif it recognizes these automatic capabilities. This should only be done if a security layer was not negotiated by themailbox withAUTHENTICATE command, because thegiven name. Atagged OK response as part of an AUTHENTICATE command isreturned only ifnot protected by encryption/integrity checking. [SASL] requires themailbox has been deleted. It is an error to attemptclient todelete INBOX orre-issue aCrispin [Page 31] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 mailbox name that does not exist. The DELETECAPABILITY commandMUST NOT remove inferior hierarchical names. For example, if a mailbox "foo" hasin this case. If aninferior "foo.bar" (assuming "." is the hierarchy delimiter character), removing "foo" MUST NOT remove "foo.bar".AUTHENTICATE command fails with a NO response, the client MAY try another authentication mechanism by issuing another AUTHENTICATE command. Itis an error toMAY also attempt todelete a name that has inferior hierarchical names and also hasauthenticate by using the\Noselect mailbox name attributeLOGIN command (seethe description of the LIST responsesection 6.2.3 for moredetails). It is permitted to delete a name that has inferior hierarchical names and does not have the \Noselect mailbox name attribute.detail). Inthis case, all messages in that mailbox are removed, and the name will acquire the \Noselect mailbox name attribute. The value ofother words, thehighest-used unique identifierclient MAY request authentication types in decreasing order of preference, with thedeleted mailbox MUST be preserved so thatLOGIN command as anew mailbox created withlast resort. The authorization identity passed from thesame name will not reuseclient to theidentifiers ofserver during theformer incarnation, UNLESSauthentication exchange is interpreted by thenew incarnation has a different unique identifier validity value. Seeserver as thedescription ofuser name whose privileges theUID command for more detail. Examples: C: A682 LIST "" *client is requesting. Crispin Standards Track [Page 29] RFC 3501 IMAPv4 March 2003 Example: S: *LIST () "/" blurdybloopOK IMAP4rev1 Server C: A001 AUTHENTICATE GSSAPI S:* LIST (\Noselect) "/" foo+ C: YIIB+wYJKoZIhvcSAQICAQBuggHqMIIB5qADAgEFoQMCAQ6iBw MFACAAAACjggEmYYIBIjCCAR6gAwIBBaESGxB1Lndhc2hpbmd0 b24uZWR1oi0wK6ADAgEDoSQwIhsEaW1hcBsac2hpdmFtcy5jYW Mud2FzaGluZ3Rvbi5lZHWjgdMwgdCgAwIBAaEDAgEDooHDBIHA cS1GSa5b+fXnPZNmXB9SjL8Ollj2SKyb+3S0iXMljen/jNkpJX AleKTz6BQPzj8duz8EtoOuNfKgweViyn/9B9bccy1uuAE2HI0y C/PHXNNU9ZrBziJ8Lm0tTNc98kUpjXnHZhsMcz5Mx2GR6dGknb I0iaGcRerMUsWOuBmKKKRmVMMdR9T3EZdpqsBd7jZCNMWotjhi vd5zovQlFqQ2Wjc2+y46vKP/iXxWIuQJuDiisyXF0Y8+5GTpAL pHDc1/pIGmMIGjoAMCAQGigZsEgZg2on5mSuxoDHEA1w9bcW9n FdFxDKpdrQhVGVRDIzcCMCTzvUboqb5KjY1NJKJsfjRQiBYBdE NKfzK+g5DlV8nrw81uOcP8NOQCLR5XkoMHC0Dr/80ziQzbNqhx O6652Npft0LQwJvenwDI13YxpwOdMXzkWZN/XrEqOWp6GCgXTB vCyLWLlWnbaUkZdEYbKHBPjd8t/1x5Yg== S:* LIST () "/" foo/bar+ YGgGCSqGSIb3EgECAgIAb1kwV6ADAgEFoQMCAQ+iSzBJoAMC AQGiQgRAtHTEuOP2BXb9sBYFR4SJlDZxmg39IxmRBOhXRKdDA0 uHTCOT9Bq3OsUTXUlk0CsFLoa8j+gvGDlgHuqzWHPSQg== C: S:A682 OK LIST completed+ YDMGCSqGSIb3EgECAgIBAAD/////6jcyG4GE3KkTzBeBiVHe ceP2CWY0SR0fAQAgAAQEBAQ= C:A683 DELETE blurdybloopYDMGCSqGSIb3EgECAgIBAAD/////3LQBHXTpFfZgrejpLlLImP wkhbfa2QteAQAgAG1yYwE= S:A683A001 OKDELETE 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 () "." blurdybloop 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 Crispin [Page 32] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 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. RENAMEGSSAPI authentication successful Note: The line breaks within server challenges and client responses are for editorial clarity and are not in real authenticators. 6.2.3. LOGIN Command Arguments:existing mailbox name new mailboxuser name password Responses: no specific responses for this command Result: OK -rename completedlogin completed, now in authenticated state NO -renamelogin failure:can't rename mailbox with that name, can't rename to mailbox with thatuser name or password rejected BAD - command unknown or arguments invalid TheRENAMELOGIN commandchangesidentifies thename of a mailbox.client to the server and carries the plaintext password authenticating this user. Crispin Standards Track [Page 30] RFC 3501 IMAPv4 March 2003 A server MAY include a CAPABILITY response code in the tagged OK responseis returned only if the mailbox has been renamed.to a successful LOGIN command in order to send capabilities automatically. It isan errorunnecessary for a client toattempt to rename from a mailbox name that does not exist or to a mailbox name that already exists. Any error in renaming will returnsend atagged NO response. Ifseparate CAPABILITY command if it recognizes these automatic capabilities. Example: C: a001 LOGIN SMITH SESAME S: a001 OK LOGIN completed Note: Use of thename has inferior hierarchical names, thenLOGIN command over an insecure network (such as theinferior hierarchical names MUST alsoInternet) is a security risk, because anyone monitoring network traffic can obtain plaintext passwords. The LOGIN command SHOULD NOT berenamed. For example,used except as arename of "foo" to "zap" will rename "foo/bar" (assuming "/"last resort, and it isthe hierarchy delimiter character)recommended that client implementations have a means to"zap/bar". If the server's hierarchy separator character appears in the name, the server SHOULD createdisable anysuperior hierarchical names that are needed forautomatic use of theRENAMELOGIN command. Unless either the STARTTLS commandto complete successfully. Inhas been negotiated or some otherwords, an attempt to rename "foo/bar/zap" to baz/rag/zowie onmechanism that protects the session from password snooping has been provided, a server implementation MUST implement a configuration in which"/" isit advertises thehierarchy separator character SHOULD create baz/LOGINDISABLED capability andbaz/rag/ if they do not already exist. The value ofdoes NOT permit thehighest-used unique identifier ofLOGIN command. Server sites SHOULD NOT use any configuration which permits theold mailbox nameLOGIN command without such a protection mechanism against password snooping. A client implementation MUSTbe preserved so thatNOT send anew mailbox created with the same nameLOGIN command if the LOGINDISABLED capability is advertised. 6.3. Client Commands - Authenticated State In the authenticated state, commands that manipulate mailboxes as atomic entities are permitted. Of these commands, the SELECT and EXAMINE commands willnot reuseselect a mailbox for access and enter theidentifiers ofselected state. In addition to theformer incarnation, UNLESSuniversal commands (CAPABILITY, NOOP, and LOGOUT), thenew incarnation hasfollowing commands are valid in the authenticated state: SELECT, EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, and APPEND. Crispin Standards Track [Page 31] RFC 3501 IMAPv4 March 2003 6.3.1. SELECT Command Arguments: mailbox name Responses: REQUIRED untagged responses: FLAGS, EXISTS, RECENT REQUIRED OK untagged responses: UNSEEN, PERMANENTFLAGS, UIDNEXT, UIDVALIDITY Result: OK - select completed, now in selected state NO - select failure, now in authenticated state: no such mailbox, can't access mailbox BAD - command unknown or arguments invalid The SELECT command selects adifferent unique identifier validity value.mailbox so that messages in the mailbox can be accessed. Before returning an OK to the client, the server MUST send the following untagged data to the client. Note that earlier versions of this protocol only required the FLAGS, EXISTS, and RECENT untagged data; consequently, client implementations SHOULD implement default behavior for missing data as discussed with the individual item. FLAGS Defined flags in the mailbox. See the description of theUID commandFLAGS response for more detail.Renaming INBOX is permitted, and has special behavior. It moves all<n> EXISTS The number of messages inINBOX to a new mailbox with the given name, Crispin [Page 33] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 leaving INBOX empty. Iftheserver implementation supports inferior hierarchical names of INBOX, these are unaffected by a renamemailbox. See the description ofINBOX. 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 Arguments: mailbox Responses: no specific responsesthe EXISTS response forthis command Result: OK - subscribe completed NO - subscribe failure: can't subscribe to that name BAD - command unknown or arguments invalidmore detail. <n> RECENT TheSUBSCRIBE command addsnumber of messages with thespecified mailbox name to\Recent flag set. See theserver's setdescription of"active" or "subscribed" mailboxes as returned bytheLSUB command. This command returns a tagged OKRECENT responseonly iffor more detail. OK [UNSEEN <n>] The message sequence number of thesubscriptionfirst unseen message in the mailbox. If this issuccessful. Crispin [Page 34] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 A server MAY validatemissing, themailbox argument to SUBSCRIBEclient can not make any assumptions about the first unseen message in the mailbox, and needs toverify that it exists. However,issue a SEARCH command if itMUST NOT unilaterally remove an existing mailbox name from the subscriptionwants to find it. OK [PERMANENTFLAGS (<list of flags>)] A listeven if a mailbox byof message flags thatname no longer exists. Note: This requirementthe client can change permanently. If this isbecause a server sitemissing, the client should assume that all flags canchoosebe changed permanently. OK [UIDNEXT <n>] The next unique identifier value. Refer toroutinely remove a mailbox with a well-known name (e.g. "system-alerts") after its contents expire, withsection 2.3.1.1 for more information. If this is missing, theintention of recreating it when new contents are appropriate. Example: C: A002 SUBSCRIBE #news.comp.mail.mime S: A002client can not make any assumptions about the next unique identifier value. Crispin Standards Track [Page 32] RFC 3501 IMAPv4 March 2003 OKSUBSCRIBE completed 6.3.7. UNSUBSCRIBE Command Arguments: mailbox name Responses: no specific responses[UIDVALIDITY <n>] The unique identifier validity value. Refer to section 2.3.1.1 for more information. If thiscommand Result: OK - unsubscribe completed NO - unsubscribe failure: can't unsubscribe that name BAD - command unknown or arguments invalidis missing, the server does not support unique identifiers. Only one mailbox can be selected at a time in a connection; simultaneous access to multiple mailboxes requires multiple connections. TheUNSUBSCRIBESELECT commandremoves the specifiedautomatically deselects any currently selected mailboxname frombefore attempting theserver's set of "active" or "subscribed" mailboxes as returned by the LSUB command. This command returnsnew selection. Consequently, if a mailbox is selected and a SELECT command that fails is attempted, no mailbox is selected. If the client is permitted to modify the mailbox, the server SHOULD prefix the text of the tagged OK responseonly ifwith theunsubscription"[READ-WRITE]" response code. If the client issuccessful.not permitted to modify the mailbox but is permitted read access, the mailbox is selected as read-only, and the server MUST prefix the text of the tagged OK response to SELECT with the "[READ-ONLY]" response code. Read-only access through SELECT differs from the EXAMINE command in that certain read-only mailboxes MAY permit the change of permanent state on a per-user (as opposed to global) basis. Netnews messages marked in a server-based .newsrc file are an example of such per-user permanent state that can be modified with read-only mailboxes. Example: C:A002 UNSUBSCRIBE #news.comp.mail.mimeA142 SELECT INBOX S:A002* 172 EXISTS S: * 1 RECENT S: * OKUNSUBSCRIBE[UNSEEN 12] Message 12 is first unseen S: * OK [UIDVALIDITY 3857529045] UIDs valid S: * OK [UIDNEXT 4392] Predicted next UID S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited S: A142 OK [READ-WRITE] SELECT completed6.3.8. LISTCrispin Standards Track [Page 33] RFC 3501 IMAPv4 March 2003 6.3.2. EXAMINE Command Arguments:reference namemailbox namewith possible wildcardsResponses: REQUIRED untagged responses:LISTFLAGS, EXISTS, RECENT REQUIRED OK untagged responses: UNSEEN, PERMANENTFLAGS, UIDNEXT, UIDVALIDITY Result: OK -list completedexamine completed, now in selected state NO -list failure:examine failure, now in authenticated state: no such mailbox, can'tlist that reference or nameaccess mailbox BAD - command unknown or arguments invalid TheLISTEXAMINE commandreturns a subset of names from the complete set of all names availableis identical tothe client. Zero or more untagged LIST Crispin [Page 35] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 replies are returned, containing the name attributes, hierarchy delimiter,SELECT andname; see the description ofreturns theLIST reply for more detail. The LIST command SHOULD return its data quickly, without undue delay. For example, it SHOULD NOT go to excess trouble to calculate \Marked or \Unmarked status or perform other processing; if each name requires 1 second of processing, then a list of 1200 names would take 20 minutes! An empty ("" string) reference name argument indicates thatsame output; however, the selected mailboxnameisinterpretedidentified asby SELECT. The returned mailbox names MUST match the supplied mailbox name pattern. A non-empty reference name argument is the name of a mailbox or a level of mailbox hierarchy, and indicates the context in which the mailbox name is interpreted. An empty ("" string) mailbox name argument is a special requestread-only. No changes toreturn the hierarchy delimiter andtheroot namepermanent state of thename givenmailbox, including per-user state, are permitted; in particular, EXAMINE MUST NOT cause messages to lose thereference.\Recent flag. Thevalue returned astext of theroot MAY betagged OK response to theempty string ifEXAMINE command MUST begin with thereference is non-rooted or"[READ-ONLY]" response code. Example: C: A932 EXAMINE blurdybloop S: * 17 EXISTS S: * 2 RECENT S: * OK [UNSEEN 8] Message 8 isthe empty string. In all cases, a hierarchy delimiter (or NIL if there is no hierarchy) is returned. This permits a client to get the hierarchy delimiter (or find out that thefirst unseen S: * OK [UIDVALIDITY 3857529045] UIDs valid S: * OK [UIDNEXT 4392] Predicted next UID S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) S: * OK [PERMANENTFLAGS ()] No permanent flags permitted S: A932 OK [READ-ONLY] EXAMINE completed 6.3.3. CREATE Command Arguments: mailboxnames are flat) even whenname Responses: nomailboxes byspecific responses for this command Result: OK - create completed NO - create failure: can't create mailbox with that namecurrently exist.BAD - command unknown or arguments invalid Thereference andCREATE command creates a mailboxname arguments are interpreted intowith the given name. An OK response is returned only if acanonical formnew mailbox with thatrepresentsname has been created. It is anunambiguous left-to-right hierarchy. The returnederror to attempt to create INBOX or a mailboxnames will bewith a name that refers to an extant mailbox. Any error in creation will return a tagged NO response. Crispin Standards Track [Page 34] RFC 3501 IMAPv4 March 2003 If theinterpreted form. Note: The interpretation of the reference argumentmailbox name isimplementation-defined. It depends upon whethersuffixed with theserver implementation has a concept of "current working directory" and leading "break out characters" which overrideserver's hierarchy separator character (as returned from thecurrent working directory. For example, on aserverwhich exportsby aUNIX or NT filesystems, the reference argument contains the current working directory andLIST command), this is a declaration that the client intends to create mailbox names under this nameargument would containin the hierarchy. Server implementations that do not require this declaration MUST ignore the declaration. In any case, the nameas interpreted increated is without thecurrent working directory.trailing hierarchy delimiter. Ifa server implementation has no concept of break out characters,thecanonical form is normallyserver's hierarchy separator character appears elsewhere in thereference name appended withname, themailbox name. Noteserver SHOULD create any superior hierarchical names thatifare needed for the CREATE command to be successfully completed. In other words, an attempt to create "foo/bar/zap" on a serverimplements the namespace convention (section 5.1.2), "#"in which "/" isa break outthe hierarchy separator character SHOULD create foo/ andmust be treated Crispin [Page 36] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 as such. If the reference argument isfoo/bar/ if they do not already exist. If alevel ofnew mailboxhierarchy (that is, itisa \NoInferiors name), and/or the reference argument does not endcreated with thehierarchy delimiter, it is implementation-dependent how this is interpreted. For example, a reference of "foo/bar" and mailboxsame nameof "rag/baz" could be interpretedas"foo/bar/rag/baz", "foo/barrag/baz", or "foo/rag/baz". A client SHOULD NOT use suchareference argument except at the explicit request of the user. A hierarchical browsermailbox which was deleted, its unique identifiers MUSTNOT makebe greater than anyassumptions about server interpretationunique identifiers used in the previous incarnation of thereference unlessmailbox UNLESS thereference isnew incarnation has alevel of mailbox hierarchy AND ends withdifferent unique identifier validity value. See thehierarchy delimiter. Any partdescription of thereference argument that is included in the interpreted form SHOULD prefix the interpreted form. It SHOULD also be in the same formUID command for more detail. Example: C: A003 CREATE owatagusiam/ S: A003 OK CREATE completed C: A004 CREATE owatagusiam/blurdybloop S: A004 OK CREATE completed Note: The interpretation of this example depends on whether "/" was returned as thereference name argument. This rule permits the client to determine if the returned mailbox namehierarchy separator from LIST. If "/" isinthecontexthierarchy separator, a new level of hierarchy named "owatagusiam" with a member called "blurdybloop" is created. Otherwise, two mailboxes at thereference argument,same hierarchy level are created. 6.3.4. DELETE Command Arguments: mailbox name Responses: no specific responses for this command Result: OK - delete completed NO - delete failure: can't delete mailbox with that name BAD - command unknown orif something aboutarguments invalid Crispin Standards Track [Page 35] RFC 3501 IMAPv4 March 2003 The DELETE command permanently removes the mailboxargument overrodewith thereference argument. Without this rule,given name. A tagged OK response is returned only if theclient would havemailbox has been deleted. It is an error tohave knowledge of the server's naming semantics including what characters are "breakouts" that overrideattempt to delete INBOX or anaming context.mailbox name that does not exist. The DELETE command MUST NOT remove inferior hierarchical names. For example,here are some examples of how references andif a mailboxnames might be interpreted on"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 aUNIX-based server: Reference Mailbox Name Interpretation ------------ ------------ -------------- ~smith/Mail/ foo.* ~smith/Mail/foo.* archive/ % archive/% #news. comp.mail.* #news.comp.mail.* ~smith/Mail/ /usr/doc/foo /usr/doc/foo archive/ ~fred/Mail/* ~fred/Mail/* The first three examples demonstrate interpretations in the context of the reference argument. Note that "~smith/Mail" SHOULD NOT be transformed into something like "/u2/users/smith/Mail", or it would be impossible for the client to determinename thatthe interpretation was in the context of the reference. The character "*" is a wildcard,has inferior hierarchical names andmatches zero or more characters at this position. The character "%" is similar to "*", but it does not match a hierarchy delimiter. If the "%" wildcard Crispin [Page 37] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 is the last character of a mailbox name argument, matching levels of hierarchy are also returned. If these levels of hierarchy are notalsoselectable mailboxes, they are returned withhas the \Noselect mailbox name attribute (see the description of the LIST response for more details).Server implementations areIt is permitted to"hide" otherwise accessible mailboxes from the wildcard characters, by preventing certain characters or names from matching a wildcard in certain situations. For example,delete aUNIX-based server might restrict the interpretation of "*" soname thatan initial "/" characterhas inferior hierarchical names and does notmatch. The special name INBOX is included inhave theoutput from LIST, if INBOX is supported by this server for\Noselect mailbox name attribute. In thisusercase, all messages in that mailbox are removed, andiftheuppercase string "INBOX" matchesname will acquire theinterpreted reference and\Noselect mailbox namearguments with wildcards as described above.attribute. Thecriteria for omitting INBOX is whether SELECT INBOX will return failure; it is not relevant whethervalue of theuser's real INBOX resides on this or some other server. Example:highest-used unique identifier of the deleted mailbox MUST be preserved so that a new mailbox created with the same name will not reuse the identifiers of the former incarnation, UNLESS the new incarnation has a different unique identifier validity value. See the description of the UID command for more detail. Examples: C:A101A682 LIST """"* S: * LIST () "/" blurdybloop S: * LIST (\Noselect) "/"""foo S:A101* LIST () "/" foo/bar S: A682 OK LIST completed C: A683 DELETE blurdybloop 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:A102A686 LIST#news.comp.mail.misc"" * S: * LIST (\Noselect)"." #news."/" foo S:A102A686 OK LIST completed C: A687 DELETE foo S: A687 OK DELETE Completed Crispin Standards Track [Page 36] RFC 3501 IMAPv4 March 2003 C:A103A82 LIST/usr/staff/jones"" * S: * LIST(\Noselect) "/" /() "." blurdybloop S:A103* 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:A202A85 LIST~/Mail/ %"" * S: * LIST(\Noselect) "/" ~/Mail/foo() "." foo.bar S: A85 OK LIST completed C: A86 LIST "" % S: * LIST() "/" ~/Mail/meetings(\Noselect) "." foo S:A202A86 OK LIST completed6.3.9. LSUB6.3.5. RENAME Command Arguments:referenceexisting mailbox name new mailbox namewith possible wildcardsResponses:untagged responses: LSUBno specific responses for this command Result: OK -lsubrename completed NO -lsubrename failure: can'tlistrename mailbox with that name, can't rename to mailbox with thatreference orname BAD - command unknown or arguments invalid TheLSUBRENAME commandreturnschanges the name of asubset of names from the set of names Crispin [Page 38] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 thatmailbox. A tagged OK response is returned only if theusermailbox hasdeclared as being "active" or "subscribed". Zerobeen renamed. It is an error to attempt to rename from a mailbox name that does not exist ormore untagged LSUB replies are returned. The argumentstoLSUB are in the same form as those for LIST. The returned untagged LSUB response MAY contain differenta mailboxflags fromname that already exists. Any error in renaming will return aLIST untaggedtagged NO response. Ifthis should happen, the flags intheuntagged LIST are considered more authoritative. A special situation occurs when using LSUB withname has inferior hierarchical names, then the% wildcard. Consider what happens if "foo/bar" (withinferior hierarchical names MUST also be renamed. For example, ahierarchy delimiterrename of"/") is subscribed but"foo" to "zap" will rename "foo/bar" (assuming "/" isnot. A "%" wildcardthe hierarchy delimiter character) toLSUB must return foo, not foo/bar,"zap/bar". If the server's hierarchy separator character appears in theLSUB response, and it MUST be flagged withname, the\Noselect attribute. TheserverMUST NOT unilaterally removeSHOULD create any superior hierarchical names that are needed for the RENAME command to complete successfully. In other words, anexisting mailbox name fromattempt to rename "foo/bar/zap" to baz/rag/zowie on a server in which "/" is thesubscription list evenhierarchy separator character SHOULD create baz/ and baz/rag/ ifa mailbox by that name no longer exists. Example: C: A002 LSUB "#news." "comp.mail.*" S: * LSUB () "." #news.comp.mail.mime S: * LSUB () "." #news.comp.mail.misc S: A002 OK LSUB completed C: A003 LSUB "#news." "comp.%" S: * LSUB (\NoSelect) "." #news.comp.mail S: A003 OK LSUB completed 6.3.10. STATUS Command Arguments: mailbox name status data item names Responses: untagged responses: STATUS Result: OK - status completed NO - status failure: no status for that name BAD - command unknown or arguments invalidthey do not already exist. Crispin Standards Track [Page 37] RFC 3501 IMAPv4 March 2003 TheSTATUS command requests the statusvalue of theindicated mailbox. It does not change the currently selected mailbox, nor does it affect the statehighest-used unique identifier ofany messages inthequeriedold mailbox(in particular, STATUSname MUSTNOT cause messages to lose the \Recent flag). The STATUS command provides an alternative to opening a second IMAP4rev1 connection and doing an EXAMINE command onbe preserved so that a new mailboxto query that mailbox's status without deselectingcreated with thecurrent mailbox insame name will not reuse thefirst IMAP4rev1 connection. Crispin [Page 39] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 Unlikeidentifiers of theLIST command,former incarnation, UNLESS theSTATUSnew incarnation has a different unique identifier validity value. See the description of the UID command for more detail. Renaming INBOX isnot guaranteed to be fastpermitted, and has special behavior. It moves all messages inits response. Under certain circumstances, it can be quite slow. In some implementations, the server is obligedINBOX toopen thea new mailboxread-only internally to obtain certain status information. Also unlikewith theLIST command,given name, leaving INBOX empty. If theSTATUS command does not accept wildcards. Note: The STATUS command is intended to access information mailboxes other than the currently selected mailbox. Because the STATUS command can cause the mailbox to be opened internally, and because this information is availableserver implementation supports inferior hierarchical names of INBOX, these are unaffected byother means on the selected mailbox, the STATUS command SHOULD NOT be used on the currently selected mailbox. The STATUS command MUST NOT be used asa"check for new messages in the selected mailbox" operation (refer to sections 7, 7.3.1, and 7.3.2 for more information about the proper method for new message checking). Because the STATUS command is not guaranteed to be fast in its results, clients SHOULD NOT expect to be able to issue many consecutive STATUS commands and obtain reasonable performance. The currently defined status data items that can be requested are: MESSAGES The number of messages in the mailbox. RECENT The number of messages with the \Recent flag set. UIDNEXT The next unique identifier value of the mailbox. Refer to section 2.3.1.1 for more information. UIDVALIDITY The unique identifier validity value of the mailbox. Refer to section 2.3.1.1 for more information. UNSEEN The numberrename ofmessages which do not have the \Seen flag set. Example:INBOX. Examples: C:A042 STATUSA682 LIST "" * S: * LIST () "/" blurdybloop(UIDNEXT MESSAGES)S: *STATUSLIST (\Noselect) "/" foo S: * LIST () "/" foo/bar S: A682 OK LIST completed C: A683 RENAME blurdybloop(MESSAGES 231 UIDNEXT 44292)sarasoop S:A042A683 OKSTATUSRENAME completedCrispin [Page 40] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 6.3.11. APPEND Command Arguments: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 Crispin Standards Track [Page 38] RFC 3501 IMAPv4 March 2003 6.3.6. SUBSCRIBE Command Arguments: mailboxname OPTIONAL flag parenthesized list OPTIONAL date/time string message literalResponses: no specific responses for this command Result: OK -appendsubscribe completed NO -append error:subscribe failure: can'tappendsubscribe to thatmailbox, error in flags or date/time or message textname BAD - command unknown or arguments invalid TheAPPENDSUBSCRIBE commandappendsadds theliteral argument as a new messagespecified mailbox name to theendserver's set of "active" or "subscribed" mailboxes as returned by thespecified destination mailbox.LSUB command. Thisargument SHOULD be in the format of an [RFC-2822] message. 8-bit characters are permitted incommand returns a tagged OK response only if themessage.subscription is successful. A serverimplementation that is unable to preserve 8-bit data properly MUST be able to reversibly convert 8-bit APPEND data to 7-bit using a [MIME-IMB] content transfer encoding. Note: ThereMAYbe exceptions, e.g. draft messages, in which required [RFC-2822] header lines are omitted invalidate themessage literalmailbox argument toAPPEND. The full implications of doing soSUBSCRIBE to verify that it exists. However, it MUSTbe understood and carefully weighed. If a flag parenthesized list is specified, the flags SHOULD be set in the resulting message; otherwise,NOT unilaterally remove an existing mailbox name from theflagsubscription listof the resulting message is set empty by default. In either case, the Recent flag is also set. Ifeven if adate-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, themailboxMUST be restored to its state before the APPEND attempt;by that name nopartial appendinglonger exists. Note: This requirement ispermitted. If the destination mailbox does not exist,because a serverMUST return an error, and MUST NOT automatically createsite can choose to routinely remove a mailbox with a well-known name (e.g., "system-alerts") after its contents expire, with themailbox. Unlessintention of recreating itis certainwhen new contents are appropriate. Example: C: A002 SUBSCRIBE #news.comp.mail.mime S: A002 OK SUBSCRIBE completed 6.3.7. UNSUBSCRIBE Command Arguments: mailbox name Responses: no specific responses for this command Result: OK - unsubscribe completed NO - unsubscribe failure: can't unsubscribe that name BAD - command unknown or arguments invalid The UNSUBSCRIBE command removes thedestinationspecified mailboxcan not be created, the server MUST send the response code "[TRYCREATE]" as the prefix ofname from thetextserver's set of "active" or "subscribed" mailboxes as returned by thetagged NO response.LSUB command. Thisgivescommand returns ahint totagged OK response only if theclient that it can attempt a CREATE command and retry the APPEND if the CREATEunsubscription is successful.Crispin [Page 41] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 If the mailbox is currently selected, the normal new message actions SHOULD occur. Specifically, the server SHOULD notify the client immediately via an untagged EXISTS response. If the server does not do so, the client MAY issue a NOOP command (or failing that, a CHECK command) after one or more APPEND commands.Example: C:A003 APPEND saved-messages (\Seen) {310} S: + Ready for literal data C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST) C: From: Fred Foobar <foobar@Blurdybloop.COM> C: Subject: afternoon meeting C: To: mooch@owatagu.siam.edu C: Message-Id: <B27397-0100000@Blurdybloop.COM> C: MIME-Version: 1.0 C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII C: C: Hello Joe, do you think we can meet at 3:30 tomorrow? C:A002 UNSUBSCRIBE #news.comp.mail.mime S:A003A002 OKAPPENDUNSUBSCRIBE completedNote: The APPEND command is not used for message delivery, because it does not provide a mechanism to transfer [SMTP] envelope information. 6.4. Client Commands - Selected State In selected state, commands that manipulate messages in a mailbox are permitted. In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), and the authenticated state commands (SELECT, EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, and APPEND), the following commands are valid in the selected state: CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, and UID. 6.4.1. CHECKCrispin Standards Track [Page 39] RFC 3501 IMAPv4 March 2003 6.3.8. LIST Command Arguments:nonereference name mailbox name with possible wildcards Responses:no specific responses for this commanduntagged responses: LIST Result: OK -checklist completed NO - list failure: can't list that reference or name BAD - command unknown or arguments invalid TheCHECKLIST commandrequestsreturns acheckpointsubset of names from thecurrently selected mailbox. A checkpoint referscomplete set of all names available toany implementation-dependent housekeeping associated withthemailbox (e.g. resolvingclient. Zero or more untagged LIST replies are returned, containing theCrispin [Page 42] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 server's in-memory state ofname attributes, hierarchy delimiter, and name; see themailbox withdescription of thestate onLIST reply for more detail. The LIST command SHOULD return itsdisk)data quickly, without undue delay. For example, it SHOULD NOT go to excess trouble to calculate the \Marked or \Unmarked status or perform other processing; if each name requires 1 second of processing, then a list of 1200 names would take 20 minutes! An empty ("" string) reference name argument indicates that the mailbox name isnot normally executedinterpreted aspart of each command.by SELECT. The returned mailbox names MUST match the supplied mailbox name pattern. Acheckpoint MAY take a non-instantaneous amountnon-empty reference name argument is the name ofreal time to complete. Ifaserver implementation has no such housekeeping considerations, CHECK is equivalent to NOOP. There is no guarantee that an EXISTS untagged response will happen asmailbox or aresultlevel ofCHECK. NOOP, not CHECK, SHOULD be used for new message polling. Example: C: FXXZ CHECK S: FXXZ OK CHECK Completed 6.4.2. CLOSE Command Arguments: none Responses: no specific responses for this command Result: OK - close completed, nowmailbox hierarchy, and indicates the context inauthenticated state BAD - command unknown or arguments invalid The CLOSE command permanently removes fromwhich thecurrently selectedmailboxall messages that have the \Deleted flag set, and returnsname is interpreted. An empty ("" string) mailbox name argument is a special request toauthenticated state from selected state. No untagged EXPUNGE responses are sent. No messages are removed,return the hierarchy delimiter andno error is given,the root name of the name given in the reference. The value returned as the root MAY be the empty string if themailboxreference isselected by an EXAMINE commandnon-rooted or isotherwise selected read-only. Even ifan empty string. In all cases, amailboxhierarchy delimiter (or NIL if there isselected, a SELECT, EXAMINE, or LOGOUT command MAY be issued without previously issuingno hierarchy) is returned. This permits aCLOSE command. The SELECT, EXAMINE, and LOGOUT commands implicitly closeclient to get the hierarchy delimiter (or find out that thecurrently selectedmailboxwithout doing an expunge. However,names are flat) even whenmany messagesno mailboxes by that name currently exist. The reference and mailbox name arguments aredeleted,interpreted into aCLOSE-LOGOUT or CLOSE-SELECT sequence is considerably faster thancanonical form that represents anEXPUNGE-LOGOUT or EXPUNGE-SELECT because no untagged EXPUNGE responses (whichunambiguous left-to-right hierarchy. The returned mailbox names will be in theclient would probably ignore) are sent. Example: C: A341 CLOSE S: A341 OK CLOSE completedinterpreted form. Crispin Standards Track [Page43] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April40] RFC 3501 IMAPv4 March 20036.4.3. EXPUNGE Command Arguments: none Responses: untagged responses: EXPUNGE Result: OK - expunge completed NO - expunge failure: can't expunge (e.g. permission denied) BAD - command unknown or arguments invalidNote: TheEXPUNGE command permanently removes frominterpretation of thecurrently selected mailbox all messages that havereference argument is implementation-defined. It depends upon whether the\Deleted flag set. Before returning an OK toserver implementation has a concept of theclient, an untagged EXPUNGE response is sent for each message that is removed. Example: C: A202 EXPUNGE S: * 3 EXPUNGE S: * 3 EXPUNGE S: * 5 EXPUNGE S: * 8 EXPUNGE S: A202 OK EXPUNGE completed Note: In this example, messages 3, 4, 7,"current working directory" and11 hadleading "break out characters", which override the\Deleted flag set. Seecurrent working directory. For example, on a server which exports a UNIX or NT filesystem, thedescription ofreference argument contains theEXPUNGE response for further explanation. 6.4.4. SEARCH Command Arguments: OPTIONAL [CHARSET] specification searching criteria (one or more) Responses: REQUIRED untagged response: SEARCH Result: OK - search completed NO - search error: can't search that [CHARSET] or criteria BAD - command unknown or arguments invalid The SEARCH command searchescurrent working directory, and the mailboxfor messages that matchname argument would contain thegiven searching criteria. Searching criteria consist of one or more search keys. The untagged SEARCH response fromname as interpreted in theserver containscurrent working directory. If alistingserver implementation has no concept ofmessage sequence numbers corresponding to those messages that match the searching criteria. When multiple keys are specified,break out characters, theresultcanonical form is normally theintersection (AND function) of allreference name appended with themessagesmailbox name. Note thatmatch those keys. For Crispin [Page 44] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 example,if thecriteria DELETED FROM "SMITH" SINCE 1-Feb-1994 refers to all deleted messages from Smith that were placed inserver implements themailbox since February 1, 1994. A search key can alsonamespace convention (section 5.1.2), "#" is a break out character and must be treated as such. If the reference argument is not aparenthesized listlevel ofone or more search keys (e.g. for usemailbox hierarchy (that is, it is a \NoInferiors name), and/or the reference argument does not end with theORhierarchy delimiter, it is implementation-dependent how this is interpreted. For example, a reference of "foo/bar" and mailbox name of "rag/baz" could be interpreted as "foo/bar/rag/baz", "foo/barrag/baz", or "foo/rag/baz". A client SHOULD NOTkeys). Server implementations MAY exclude [MIME-IMB] body parts with terminal content media types other than TEXT and MESSAGE from consideration in SEARCH matching. The OPTIONAL [CHARSET] specification consistsuse such a reference argument except at the explicit request of theword "CHARSET" followed byuser. A hierarchical browser MUST NOT make any assumptions about server interpretation of the reference unless the reference is aregistered [CHARSET]. It indicateslevel of mailbox hierarchy AND ends with the[CHARSET]hierarchy delimiter. Any part of thestringsreference argument thatappearis included in thesearch criteria. [MIME-IMB] content transfer encodings, and [MIME-HDRS] strings in [RFC-2822]/[MIME-IMB] headers, MUSTinterpreted form SHOULD prefix the interpreted form. It SHOULD also bedecoded before comparing textina [CHARSET] other than US-ASCII. US-ASCII MUST be supported; other [CHARSET]s MAY be supported. Iftheserver does not supportsame form as thespecified [CHARSET], it MUST return a tagged NO response (not a BAD).reference name argument. Thisresponse SHOULD contain the BADCHARSET response code, which MAY listrule permits the[CHARSET]s supported by the server. In all search keys that use strings, a message matches the keyclient to determine if thestring is a substring of the field. The matchingreturned mailbox name iscase-insensitive. The defined search keys are as follows. Refer to the Formal Syntax section forin theprecise syntactic definitionscontext of thearguments. <sequence set> Messages with message sequence numbers corresponding toreference argument, or if something about thespecified message sequence number set ALL All messages inmailbox argument overrode themailbox;reference argument. Without this rule, thedefault initial key for ANDing. ANSWERED Messages withclient would have to have knowledge of the\Answered flag set. BCC <string> Messagesserver's naming semantics including what characters are "breakouts" thatcontain the specified string in the envelope structure's BCC field. BEFORE <date> Messages whose internal date (disregarding time and timezone)override a naming context. Crispin Standards Track [Page45] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April41] RFC 3501 IMAPv4 March 2003is earlier than the specified date. BODY <string> Messages that contain the specified stringFor example, here are some examples of how references and mailbox names might be interpreted on a UNIX-based server: Reference Mailbox Name Interpretation ------------ ------------ -------------- ~smith/Mail/ foo.* ~smith/Mail/foo.* archive/ % archive/% #news. comp.mail.* #news.comp.mail.* ~smith/Mail/ /usr/doc/foo /usr/doc/foo archive/ ~fred/Mail/* ~fred/Mail/* The first three examples demonstrate interpretations in thebodycontext of themessage. CC <string> Messagesreference argument. Note thatcontain"~smith/Mail" SHOULD NOT be transformed into something like "/u2/users/smith/Mail", or it would be impossible for thespecified string inclient to determine that theenvelope structure's CC field. DELETED Messages withinterpretation was in the\Deleted flag set. DRAFT Messages withcontext of the\Draft flag set. FLAGGED Messages with the \Flagged flag set. FROM <string> Messages that contain the specified string in the envelope structure's FROM field. HEADER <field-name> <string> Messages that havereference. The character "*" is aheader with the specified field-name (as defined in [RFC-2822])wildcard, andthat contains the specified string in the text of the header (what comes after the colon).matches zero or more characters at this position. The character "%" is similar to "*", but it does not match a hierarchy delimiter. If thestring to search"%" wildcard iszero-length, this matches all messages that have a header line withthespecified field-name regardlesslast character ofthe contents. KEYWORD <flag> Messagesa mailbox name argument, matching levels of hierarchy are also returned. If these levels of hierarchy are not also selectable mailboxes, they are returned with thespecified keyword flag set. LARGER <n> Messages with an [RFC-2822] size larger than\Noselect mailbox name attribute (see thespecified numberdescription ofoctets. NEW Messages that havethe\Recent flag set but not the \Seen flag. This is functionally equivalentLIST response for more details). Server implementations are permitted to"(RECENT UNSEEN)". NOT <search-key> Messages that do not match"hide" otherwise accessible mailboxes from thespecified search key. OLD Messageswildcard characters, by preventing certain characters or names from matching a wildcard in certain situations. For example, a UNIX-based server might restrict the interpretation of "*" so thatdoan initial "/" character does nothavematch. The special name INBOX is included in the\Recent flag set. Thisoutput from LIST, if INBOX isfunctionally equivalent to "NOT RECENT" (as opposed to "NOT Crispin [Page 46] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 NEW"). ON <date> Messages whose internal date (disregarding time and timezone) is within the specified date. OR <search-key1> <search-key2> Messages that match either search key. RECENT Messages that have the \Recent flag set. SEEN Messages that have the \Seen flag set. SENTBEFORE <date> Messages whose [RFC-2822] Date: header (disregarding timesupported by this server for this user andtimezone) is earlier thanif thespecified date. SENTON <date> Messages whose [RFC-2822] Date: header (disregarding time and timezone) is withinuppercase string "INBOX" matches thespecified date. SENTSINCE <date> Messages whose [RFC-2822] Date: header (disregarding timeinterpreted reference andtimezone)mailbox name arguments with wildcards as described above. The criteria for omitting INBOX iswithin or later than the specified date. SINCE <date> Messages whose internal date (disregarding time and timezone)whether SELECT INBOX will return failure; it iswithin or later than the specified date. SMALLER <n> Messages with an [RFC-2822] size smaller than the specified number of octets. SUBJECT <string> Messages that contain the specified string in the envelope structure's SUBJECT field. TEXT <string> Messages that contain the specified string innot relevant whether theheaderuser's real INBOX resides on this orbody of the message. TO <string> Messages that contain the specified string in the envelopesome other server. Crispin Standards Track [Page47] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April42] RFC 3501 IMAPv4 March 2003structure's TO field. UID <sequence set> Messages with unique identifiers corresponding to the specified unique identifier set. Sequence set ranges are permitted. UNANSWERED Messages that do not have the \Answered flag set. UNDELETED Messages that do not have the \Deleted flag set. UNDRAFT Messages that do not have the \Draft flag set. UNFLAGGED Messages that do not have the \Flagged flag set. UNKEYWORD <flag> Messages that do not have the specified keyword flag set. UNSEEN Messages that do not have the \Seen flag set.Example: C:A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM "Smith"A101 LIST "" "" S: *SEARCH 2 84 882LIST (\Noselect) "/" "" S:A282A101 OKSEARCH completedLIST Completed C:A283 SEARCH TEXT "string not in mailbox"A102 LIST #news.comp.mail.misc "" S: *SEARCHLIST (\Noselect) "." #news. S:A283A102 OKSEARCH completedLIST Completed C: A103 LIST /usr/staff/jones "" S:A284 SEARCH CHARSET UTF-8 TEXT {6} XXXXXX* LIST (\Noselect) "/" / S: A103 OK LIST Completed C: A202 LIST ~/Mail/ % S: *SEARCH 43LIST (\Noselect) "/" ~/Mail/foo S:A284* LIST () "/" ~/Mail/meetings S: A202 OKSEARCHLIST completedNote: Since this document is restricted to 7-bit ASCII text, it is not possible to show actual UTF-8 data. The "XXXXXX" is a placeholder for what would be 6 octets of 8-bit data in an actual transaction. Crispin [Page 48] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 6.4.5. FETCH6.3.9. LSUB Command Arguments:sequence set message data item names or macroreference name mailbox name with possible wildcards Responses: untagged responses:FETCHLSUB Result: OK -fetchlsub completed NO -fetch error:lsub failure: can'tfetchlist thatdatareference or name BAD - command unknown or arguments invalid TheFETCHLSUB commandretrieves data associated withreturns amessage insubset of names from themailbox.set of names that the user has declared as being "active" or "subscribed". Zero or more untagged LSUB replies are returned. Thedata itemsarguments tobe fetched can be either a single atom or a parenthesized list. Most data items, identified in the formal syntax under the msg-att-static rule,LSUB arestatic and MUST NOT change for any particular message. Other data items, identifiedin theformal syntax under the msg-att-dynamic rule, MAY change, eithersame form asa result of a STORE command or due to external events. For example, if a client receives an ENVELOPEthose for LIST. The returned untagged LSUB response MAY contain different mailbox flags from amessage when it already knowsLIST untagged response. If this should happen, theenvelope, it can safely ignoreflags in thenewly transmitted envelope. Thereuntagged LIST arethree macros which specify commonly-used sets of data items, and can be used insteadconsidered more authoritative. A special situation occurs when using LSUB with the % wildcard. Consider what happens if "foo/bar" (with a hierarchy delimiter ofdata items."/") is subscribed but "foo" is not. Amacro"%" wildcard to LSUB mustbe used by itself, andreturn foo, not foo/bar, inconjunction with other macros or data items. ALL Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE) FAST Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE) FULL Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY) The currently defined data items that canthe LSUB response, and it MUST befetched are: BODY Non-extensible form of BODYSTRUCTURE. BODY[<section>]<<partial>> The text of a particular body section.flagged with the \Noselect attribute. Thesection specification isserver MUST NOT unilaterally remove an existing mailbox name from the subscription list even if aset of zero or more part specifiers Crispin [Page 49] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 delimitedmailbox byperiods. A part specifier is either a part numberthat name no longer exists. Crispin Standards Track [Page 43] RFC 3501 IMAPv4 March 2003 Example: C: A002 LSUB "#news." "comp.mail.*" S: * LSUB () "." #news.comp.mail.mime S: * LSUB () "." #news.comp.mail.misc S: A002 OK LSUB completed C: A003 LSUB "#news." "comp.%" S: * LSUB (\NoSelect) "." #news.comp.mail S: A003 OK LSUB completed 6.3.10. STATUS Command Arguments: mailbox name status data item names Responses: untagged responses: STATUS Result: OK - status completed NO - status failure: no status for that name BAD - command unknown oronearguments invalid The STATUS command requests the status of thefollowing: HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and TEXT. An empty section specification refers toindicated mailbox. It does not change theentire message, includingcurrently selected mailbox, nor does it affect theheader. Every message has at least one part number. Non-[MIME-IMB] messages, and non-multipart [MIME-IMB] messages with no encapsulated message, only have a part 1. Multipartstate of any messagesare assigned consecutive part numbers, as they occurin themessage. If a particular part is of type message or multipart, its partsqueried mailbox (in particular, STATUS MUSTbe indicated by a period followed by the part number within that nested multipart part. A part of type MESSAGE/RFC822 also has nested part numbers, referringNOT cause messages toparts oflose theMESSAGE part's body.\Recent flag). TheHEADER, HEADER.FIELDS, HEADER.FIELDS.NOT,STATUS command provides an alternative to opening a second IMAP4rev1 connection andTEXT part specifiers can be the sole part specifier or can be prefixed by one or more numeric part specifiers, provided that the numeric part specifier refers to a part of type MESSAGE/RFC822. The MIME part specifier MUST be prefixed by one or more numeric part specifiers. The HEADER, HEADER.FIELDS, and HEADER.FIELDS.NOT part specifiers refer to the [RFC-2822] header of the message or ofdoing anencapsulated [MIME-IMT] MESSAGE/RFC822 message. HEADER.FIELDS and HEADER.FIELDS.NOT are followed by a list of field-name (as defined in [RFC-2822]) names, and return a subset of the header. The subset returned by HEADER.FIELDS contains only those header fields withEXAMINE command on afield-namemailbox to query thatmatches one ofmailbox's status without deselecting thenamescurrent mailbox in thelist; similarly,first IMAP4rev1 connection. Unlike thesubset returned by HEADER.FIELDS.NOT contains onlyLIST command, theheader fields with a non-matching field-name. The field-matchingSTATUS command iscase-insensitive but otherwise exact. Subsetting doesnotexclude the [RFC-2822] delimiting blank line between the header and the body;guaranteed to be fast in its response. Under certain circumstances, it can be quite slow. In some implementations, theblank lineserver isincluded in all header fetches, except inobliged to open thecase of a message which has no body and no blank line. The MIME part specifier refersmailbox read-only internally to obtain certain status information. Also unlike the[MIME-IMB] header for this part.LIST command, the STATUS command does not accept wildcards. Note: TheTEXT part specifier refersSTATUS command is intended to access thetext bodystatus of mailboxes other than themessage, omittingcurrently selected mailbox. Because the[RFC-2822] header. Crispin [Page 50] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 Here is an example of a complex message with some of its part specifiers: HEADER ([RFC-2822] header ofSTATUS command can cause themessage) TEXT ([RFC-2822] text body ofmailbox to be opened internally, and because this information is available by other means on themessage) MULTIPART/MIXED 1 TEXT/PLAIN 2 APPLICATION/OCTET-STREAM 3 MESSAGE/RFC822 3.HEADER ([RFC-2822] header ofselected mailbox, themessage) 3.TEXT ([RFC-2822] text body ofSTATUS command SHOULD NOT be used on themessage) MULTIPART/MIXED 3.1 TEXT/PLAIN 3.2 APPLICATION/OCTET-STREAM 4 MULTIPART/MIXED 4.1 IMAGE/GIF 4.1.MIME ([MIME-IMB] headercurrently selected mailbox. Crispin Standards Track [Page 44] RFC 3501 IMAPv4 March 2003 The STATUS command MUST NOT be used as a "check for new messages in theIMAGE/GIF) 4.2 MESSAGE/RFC822 4.2.HEADER ([RFC-2822] header ofselected mailbox" operation (refer to sections 7, 7.3.1, and 7.3.2 for more information about themessage) 4.2.TEXT ([RFC-2822] text body ofproper method for new message checking). Because themessage) MULTIPART/MIXED 4.2.1 TEXT/PLAIN 4.2.2 MULTIPART/ALTERNATIVE 4.2.2.1 TEXT/PLAIN 4.2.2.2 TEXT/RICHTEXT ItSTATUS command ispossiblenot guaranteed tofetch a substringbe fast in its results, clients SHOULD NOT expect to be able to issue many consecutive STATUS commands and obtain reasonable performance. The currently defined status data items that can be requested are: MESSAGES The number of messages in thedesignated text. This is done by appending an open angle bracket ("<"),mailbox. RECENT The number of messages with theoctet position\Recent flag set. UIDNEXT The next unique identifier value of thefirst desired octet, a period,mailbox. Refer to section 2.3.1.1 for more information. UIDVALIDITY The unique identifier validity value of themaximummailbox. Refer to section 2.3.1.1 for more information. UNSEEN The number ofoctets desired, and a close angle bracket (">") tomessages which do not have thepart specifier. If\Seen flag set. Example: C: A042 STATUS blurdybloop (UIDNEXT MESSAGES) S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) S: A042 OK STATUS completed Crispin Standards Track [Page 45] RFC 3501 IMAPv4 March 2003 6.3.11. APPEND Command Arguments: mailbox name OPTIONAL flag parenthesized list OPTIONAL date/time string message literal Responses: no specific responses for this command Result: OK - append completed NO - append error: can't append to that mailbox, error in flags or date/time or message text BAD - command unknown or arguments invalid The APPEND command appends thestarting octet is beyondliteral argument as a new message to the end of thetext, an empty string is returned. Any partial fetch that attempts to read beyondspecified destination mailbox. This argument SHOULD be in theendformat of an [RFC-2822] message. 8-bit characters are permitted in thetext is truncated as appropriate.message. Apartial fetchserver implementation thatstarts at octet 0isreturned asunable to preserve 8-bit data properly MUST be able to reversibly convert 8-bit APPEND data to 7-bit using apartial fetch, even if this truncation happened.[MIME-IMB] content transfer encoding. Note:This means that BODY[]<0.2048> of a 1500-octetThere MAY be exceptions, e.g., draft messages, in which required [RFC-2822] header lines are omitted in the messagewill return BODY[]<0> with aliteral argument to APPEND. The full implications ofsize 1500, not BODY[]. Note: A substring fetch ofdoing so MUST be understood and carefully weighed. If aHEADER.FIELDS or HEADER.FIELDS.NOT part specifier is calculated after subsetting the header. The \Seenflag parenthesized list isimplicitly set; if this causesspecified, the flagsto change theySHOULD beincluded as part of the FETCH responses. BODY.PEEK[<section>]<<partial>> Crispin [Page 51] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 An alternate form of BODY[<section>] that does not implicitlyset in the\Seen flag. BODYSTRUCTURE The [MIME-IMB] body structureresulting message; otherwise, the flag list of themessage. Thisresulting message iscomputedset to empty by default. In either case, theserver by parsingRecent flag is also set. If a date-time is specified, the[MIME-IMB] header fieldsinternal date SHOULD be set in the[RFC-2822] header and [MIME-IMB] headers. ENVELOPE The envelope structureresulting message; otherwise, the internal date of themessage. Thisresulting message iscomputed byset to theservercurrent date and time byparsing the [RFC-2822] header intodefault. If thecomponent parts, defaulting various fields as necessary. FLAGS The flags that are setappend is unsuccessful forthis message. INTERNALDATE The internal date ofany reason, themessage. RFC822 Functionally equivalentmailbox MUST be restored toBODY[], differing inits state before thesyntax ofAPPEND attempt; no partial appending is permitted. If theresulting untagged FETCH data (RFC822destination mailbox does not exist, a server MUST return an error, and MUST NOT automatically create the mailbox. Unless it isreturned). RFC822.HEADER Functionally equivalent to BODY.PEEK[HEADER], differing incertain that thesyntaxdestination mailbox can not be created, the server MUST send the response code "[TRYCREATE]" as the prefix of theresulting untagged FETCH data (RFC822.HEADER is returned). RFC822.SIZE The [RFC-2822] sizetext of themessage. RFC822.TEXT Functionally equivalenttagged NO response. This gives a hint toBODY[TEXT], differing inthesyntax ofclient that it can attempt a CREATE command and retry theresulting untagged FETCH data (RFC822.TEXT is returned). UID The unique identifier forAPPEND if themessage. Example: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)]) S: * 2 FETCH .... S: * 3 FETCH .... S: * 4 FETCH .... S: A654 OK FETCH completedCREATE is successful. Crispin Standards Track [Page52] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April46] RFC 3501 IMAPv4 March 20036.4.6. STORE Command Arguments: sequence set message data item name value for message data item Responses: untagged responses: FETCH Result: OK - store completed NO - store error: can't store that data BAD - command unknown or arguments invalid The STORE command alters data associated with a message in the mailbox. Normally, STORE will return the updated value of the data with an untagged FETCH response. A suffix of ".SILENT" inIf thedata item name preventsmailbox is currently selected, theuntagged FETCH, andnormal new message actions SHOULD occur. Specifically, the server SHOULDassume thatnotify the clienthas determinedimmediately via an untagged EXISTS response. If theupdated value itself orserver does notcare about the updated value. Note: Regardless of whether or not the ".SILENT" suffix was used,do so, theserver SHOULD send an untagged FETCH response if a change toclient MAY issue amessage's flags from an external source is observed. The intent is that the status of the flags is determinate withoutNOOP command (or failing that, arace condition. The currently defined data items that can be stored are: FLAGS <flag list> Replace the flagsCHECK command) after one or more APPEND commands. Example: C: A003 APPEND saved-messages (\Seen) {310} S: + Ready forthe message (other than \Recent) with the argument. The new value of the flagsliteral data C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST) C: From: Fred Foobar <foobar@Blurdybloop.COM> C: Subject: afternoon meeting C: To: mooch@owatagu.siam.edu C: Message-Id: <B27397-0100000@Blurdybloop.COM> C: MIME-Version: 1.0 C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII C: C: Hello Joe, do you think we can meet at 3:30 tomorrow? C: S: A003 OK APPEND completed Note: The APPEND command isreturned as ifnot used for message delivery, because it does not provide aFETCH of those flags was done. FLAGS.SILENT <flag list> Equivalentmechanism toFLAGS, but without returning a new value. +FLAGS <flag list> Addtransfer [SMTP] envelope information. 6.4. Client Commands - Selected State In theargumentselected state, commands that manipulate messages in a mailbox are permitted. In addition to theflags foruniversal commands (CAPABILITY, NOOP, and LOGOUT), and themessage. The new value ofauthenticated state commands (SELECT, EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, and APPEND), theflags is returned as iffollowing commands are valid in the selected state: CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, and UID. 6.4.1. CHECK Command Arguments: none Responses: no specific responses for this command Result: OK - check completed BAD - command unknown or arguments invalid The CHECK command requests aFETCHcheckpoint ofthose flags was done. +FLAGS.SILENT <flag list> Equivalent to +FLAGS, but without returning a new value. -FLAGS <flag list> Removetheargument fromcurrently selected mailbox. A checkpoint refers to any implementation-dependent housekeeping associated with theflags formailbox (e.g., resolving themessage. The new valueserver's in-memory state of theflags is returned as if a FETCH of those flags wasmailbox with the state on its Crispin Standards Track [Page53] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April47] RFC 3501 IMAPv4 March 2003done. -FLAGS.SILENT <flag list> Equivalentdisk) that is not normally executed as part of each command. A checkpoint MAY take a non-instantaneous amount of real time to-FLAGS, but without returningcomplete. If a server implementation has no such housekeeping considerations, CHECK is equivalent to NOOP. There is no guarantee that an EXISTS untagged response will happen as a result of CHECK. NOOP, not CHECK, SHOULD be used for newvalue.message polling. Example: C:A003 STORE 2:4 +FLAGS (\Deleted) S: * 2 FETCH (FLAGS (\Deleted \Seen)) S: * 3 FETCH (FLAGS (\Deleted)) S: * 4 FETCH (FLAGS (\Deleted \Flagged \Seen))FXXZ CHECK S:A003FXXZ OKSTORE completed 6.4.7. COPYCHECK Completed 6.4.2. CLOSE Command Arguments:sequence set mailbox namenone Responses: no specific responses for this command Result: OK -copy completed NO - copy error: can't copy those messages or to that nameclose completed, now in authenticated state BAD - command unknown or arguments invalid TheCOPYCLOSE commandcopies the specified message(s) to the end ofpermanently removes all messages that have thespecified destination mailbox. The flags and internal date of\Deleted flag set from themessage(s) SHOULD be preserved,currently selected mailbox, and returns to theRecent flag SHOULD be set, inauthenticated state from thecopy. Ifselected state. No untagged EXPUNGE responses are sent. No messages are removed, and no error is given, if thedestinationmailboxdoes not exist, a server SHOULD returnis selected by anerror. It SHOULD NOT automatically create the mailbox. Unless itEXAMINE command or iscertain that the destinationotherwise selected read-only. Even if a mailboxcan not be created, the server MUST send the response code "[TRYCREATE]" as the prefix of the text of the tagged NO response. This gives a hint to the client that it can attemptis selected, aCREATESELECT, EXAMINE, or LOGOUT command MAY be issued without previously issuing a CLOSE command. The SELECT, EXAMINE, andretry the COPY if the CREATE is successful. If the COPY command is unsuccessful for any reason, server implementations MUST restoreLOGOUT commands implicitly close thedestinationcurrently selected mailboxto its state beforewithout doing an expunge. However, when many messages are deleted, a CLOSE-LOGOUT or CLOSE-SELECT sequence is considerably faster than an EXPUNGE-LOGOUT or EXPUNGE-SELECT because no untagged EXPUNGE responses (which theCOPY attempt.client would probably ignore) are sent. Example: C:A003 COPY 2:4 MEETINGA341 CLOSE S:A003A341 OKCOPYCLOSE completed Crispin Standards Track [Page54] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April48] RFC 3501 IMAPv4 March 20036.4.8. UID6.4.3. EXPUNGE Command Arguments:command name command argumentsnone Responses: untagged responses:FETCH, SEARCHEXPUNGE Result: OK -UID commandexpunge completed NO -UID command errorexpunge failure: can't expunge (e.g., permission denied) BAD - command unknown or arguments invalid TheUID command has two forms. In the first form, it takes as its arguments a COPY, FETCH, or STOREEXPUNGE commandwith arguments appropriate forpermanently removes all messages that have theassociated command. However,\Deleted flag set from thenumbers incurrently selected mailbox. Before returning an OK to thesequence set argument are unique identifiers instead of message sequence numbers. Sequence set ranges are permitted, however, there is no guarantee that unique identifiers be contiguous. A non-existent unique identifierclient, an untagged EXPUNGE response isignored without any errorsent for each messagegenerated. Thus itthat ispossible for a UID FETCH command to return OK without any data or a UID COPY or UID STORE to returnremoved. Example: C: A202 EXPUNGE S: * 3 EXPUNGE S: * 3 EXPUNGE S: * 5 EXPUNGE S: * 8 EXPUNGE S: A202 OKwithout performing any operations.EXPUNGE completed Note: In this example, messages 3, 4, 7, and 11 had thesecond form,\Deleted flag set. See theUID command takes adescription of the EXPUNGE response for further explanation. 6.4.4. SEARCHcommand withCommand Arguments: OPTIONAL [CHARSET] specification searching criteria (one or more) Responses: REQUIRED untagged response: SEARCH Result: OK - search completed NO - search error: can't search that [CHARSET] or criteria BAD - commandarguments. The interpretation of theunknown or argumentsisinvalid The SEARCH command searches thesame as with SEARCH; however,mailbox for messages that match thenumbers returned in agiven searching criteria. Searching criteria consist of one or more search keys. The untagged SEARCH responseforfrom the server contains aUID SEARCH command are unique identifiers insteadlisting of message sequencenumbers. For example, the command UID SEARCH 1:100 UID 443:557 returns the unique identifiersnumbers corresponding to those messages that match the searching criteria. Crispin Standards Track [Page 49] RFC 3501 IMAPv4 March 2003 When multiple keys are specified, the result is the intersection (AND function) oftwo sequence sets;all themessage sequence number range 1:100 andmessages that match those keys. For example, theUID range 443:557. Note:criteria DELETED FROM "SMITH" SINCE 1-Feb-1994 refers to all deleted messages from Smith that were placed in theabove example, the UID range 443:557 appears. The same comment aboutmailbox since February 1, 1994. A search key can also be anon-existent unique identifier being ignored without any error message also applies here. Hence, even if neither UID 443parenthesized list of one or557 exist, this range is validmore search keys (e.g., for use with the OR andwould include an existing UID 495. Also note that a UID rangeNOT keys). Server implementations MAY exclude [MIME-IMB] body parts with terminal content media types other than TEXT and MESSAGE from consideration in SEARCH matching. The OPTIONAL [CHARSET] specification consists of559:* always includestheUIDword "CHARSET" followed by a registered [CHARSET]. It indicates the [CHARSET] of thelast messagestrings that appear in themailbox, even if 559 is highersearch criteria. [MIME-IMB] content transfer encodings, and [MIME-HDRS] strings in [RFC-2822]/[MIME-IMB] headers, MUST be decoded before comparing text in a [CHARSET] other thanany assigned UID value.US-ASCII. US-ASCII MUST be supported; other [CHARSET]s MAY be supported. If the server does not support the specified [CHARSET], it MUST return a tagged NO response (not a BAD). Thisis becauseresponse SHOULD contain thecontents ofBADCHARSET response code, which MAY list the [CHARSET]s supported by the server. In all search keys that use strings, arange are independent ofmessage matches theorderkey if the string is a substring of therange endpoints. Thus, any UID range with *field. The matching is case-insensitive. The defined search keys are asonefollows. Refer to the Formal Syntax section for the precise syntactic definitions of theendpoints indicates at least onearguments. <sequence set> Messages with message(thesequence numbers corresponding to the specified messagewithsequence number set. ALL All messages in thehighest numbered UID), unlessmailbox; themailbox is empty.default initial key for ANDing. ANSWERED Messages with the \Answered flag set. Crispin Standards Track [Page55] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April50] RFC 3501 IMAPv4 March 2003The number afterBCC <string> Messages that contain the"*"specified string inan untagged FETCH responsethe envelope structure's BCC field. BEFORE <date> Messages whose internal date (disregarding time and timezone) isalways a message sequence number, not a unique identifier, even forearlier than the specified date. BODY <string> Messages that contain the specified string in the body of the message. CC <string> Messages that contain the specified string in the envelope structure's CC field. DELETED Messages with the \Deleted flag set. DRAFT Messages with the \Draft flag set. FLAGGED Messages with the \Flagged flag set. FROM <string> Messages that contain the specified string in the envelope structure's FROM field. HEADER <field-name> <string> Messages that have aUID command response. However, server implementations MUST implicitly includeheader with theUID message data item as partspecified field-name (as defined in [RFC-2822]) and that contains the specified string in the text ofany FETCH response caused bythe header (what comes after the colon). If the string to search is zero-length, this matches all messages that have aUID command,header line with the specified field-name regardless ofwhether a UID wasthe contents. KEYWORD <flag> Messages with the specifiedas a message data item tokeyword flag set. LARGER <n> Messages with an [RFC-2822] size larger than theFETCH. Example: C: A999 UID FETCH 4827313:4828442 FLAGS S: * 23 FETCH (FLAGS (\Seen) UID 4827313) S: * 24 FETCH (FLAGS (\Seen) UID 4827943) S: * 25 FETCH (FLAGS (\Seen) UID 4828442) S: A999 OK UID FETCH completed 6.5. Client Commands - Experimental/Expansion 6.5.1. X<atom> Command Arguments: implementation defined Responses: implementation defined Result: OK - command completed NO - failure BAD - command unknown or arguments invalid Any command prefixed with an X is an experimental command. Commands which are not part of this specification, a standard or standards-track revisionspecified number ofthis specification, or an IESG-approved experimental protocol, MUST use the X prefix. Any added untagged responses issued by an experimental command MUST also be prefixed with an X. Server implementations MUST NOT send any such untagged responses, unlessoctets. NEW Messages that have theclient requested it by issuing\Recent flag set but not theassociated experimental command. Example: C: a441 CAPABILITY S: * CAPABILITY IMAP4rev1 XPIG-LATIN S: a441 OK CAPABILITY completed C: A442 XPIG-LATIN S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay S: A442 OK XPIG-LATIN ompleted-cay\Seen flag. This is functionally equivalent to "(RECENT UNSEEN)". Crispin Standards Track [Page56] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April51] RFC 3501 IMAPv4 March 20037. Server Responses Server responses are in three forms: status responses, server data, and command continuation request. The information contained in a server response, identified by "Contents:" inNOT <search-key> Messages that do not match theresponse descriptions below, is described by function,specified search key. OLD Messages that do notby syntax. The precise syntax of server responses is described inhave theFormal Syntax section. The client MUST be prepared\Recent flag set. This is functionally equivalent toaccept any response at all times. Status responses can be tagged or untagged. Tagged status responses indicate the completion result (OK, NO, or BAD status) of a client command, and have a tag matching the command. Some status responses,"NOT RECENT" (as opposed to "NOT NEW"). ON <date> Messages whose internal date (disregarding time andall server data, are untagged. An untagged responsetimezone) isindicated bywithin thetoken "*" instead of a tag. Untagged status responses indicate server greeting, or server statusspecified date. OR <search-key1> <search-key2> Messages thatdoes not indicatematch either search key. RECENT Messages that have thecompletion of a command (for example, an impending system shutdown alert). For historical reasons, untagged server data responses are also called "unsolicited data", although strictly speaking only unilateral server data is truly "unsolicited". Certain server data MUST be recorded by\Recent flag set. SEEN Messages that have theclient when it is received; this\Seen flag set. SENTBEFORE <date> Messages whose [RFC-2822] Date: header (disregarding time and timezone) isnoted in the description of that data. Such data conveys critical information which affectsearlier than theinterpretation of all subsequent commandsspecified date. SENTON <date> Messages whose [RFC-2822] Date: header (disregarding time andresponses (e.g. updates reflectingtimezone) is within thecreationspecified date. SENTSINCE <date> Messages whose [RFC-2822] Date: header (disregarding time and timezone) is within ordestruction of messages). Other server data SHOULD be recorded forlaterreference; if the client does not need to recordthan thedata,specified date. SINCE <date> Messages whose internal date (disregarding time and timezone) is within orif recordinglater than thedata has no obvious purpose (e.g. a SEARCH response when no SEARCH command is in progress),specified date. SMALLER <n> Messages with an [RFC-2822] size smaller than thedata SHOULD be ignored. An examplespecified number ofunilateral untagged server data occurs whenoctets. Crispin Standards Track [Page 52] RFC 3501 IMAPv4 March 2003 SUBJECT <string> Messages that contain theIMAP connection isspecified string inselected state. In selected state,theserver checksenvelope structure's SUBJECT field. TEXT <string> Messages that contain themailbox for new messages as part of command execution. Normally, this is part ofspecified string in theexecutionheader or body ofevery command; hence, a NOOP command sufficesthe message. TO <string> Messages that contain the specified string in the envelope structure's TO field. UID <sequence set> Messages with unique identifiers corresponding tocheck for new messages. If new messages are found,theserver sends untagged EXISTS and RECENT responses reflectingspecified unique identifier set. Sequence set ranges are permitted. UNANSWERED Messages that do not have thenew size of\Answered flag set. UNDELETED Messages that do not have themailbox. Server implementations\Deleted flag set. UNDRAFT Messages thatoffer multiple simultaneous access todo not have thesame mailbox SHOULD also send appropriate unilateral untagged FETCH and EXPUNGE responses if another agent changes\Draft flag set. UNFLAGGED Messages that do not have thestate of any message flags or expunges any messages. Command continuation request responses use\Flagged flag set. UNKEYWORD <flag> Messages that do not have thetoken "+" instead of a tag. These responses are sent byspecified keyword flag set. UNSEEN Messages that do not have theserver to indicate acceptance\Seen flag set. Crispin Standards Track [Page57] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April53] RFC 3501 IMAPv4 March 2003of an incomplete client command and readinessExample: C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM "Smith" S: * SEARCH 2 84 882 S: A282 OK SEARCH completed C: A283 SEARCH TEXT "string not in mailbox" S: * SEARCH S: A283 OK SEARCH completed C: A284 SEARCH CHARSET UTF-8 TEXT {6} C: XXXXXX S: * SEARCH 43 S: A284 OK SEARCH completed Note: Since this document is restricted to 7-bit ASCII text, it is not possible to show actual UTF-8 data. The "XXXXXX" is a placeholder forthe remainderwhat would be 6 octets ofthe command. 7.1. Server Responses8-bit data in an actual transaction. 6.4.5. FETCH Command Arguments: sequence set message data item names or macro Responses: untagged responses: FETCH Result: OK -Status Responses Status responses are OK, NO, BAD, PREAUTH and BYE. OK, NO, andfetch completed NO - fetch error: can't fetch that data BAD - command unknown or arguments invalid The FETCH command retrieves data associated with a message in the mailbox. The data items to be fetched can betaggedeither a single atom oruntagged. PREAUTH and BYE are always untagged. Status responses MAY include an OPTIONAL "response code". A response code consists ofa parenthesized list. Most datainside square bracketsitems, identified in theform of an atom, possibly followed by a spaceformal syntax under the msg-att-static rule, are static andarguments. The response code contains additional information or status codesMUST NOT change forclient software beyondany particular message. Other data items, identified in theOK/NO/BAD condition, and are defined when there isformal syntax under the msg-att-dynamic rule, MAY change, either as aspecific action thatresult of a STORE command or due to external events. For example, if a client receives an ENVELOPE for a message when it already knows the envelope, it cantake based uponsafely ignore theadditional information.newly transmitted envelope. There are three macros which specify commonly-used sets of data items, and can be used instead of data items. A macro must be used by itself, and not in conjunction with other macros or data items. Crispin Standards Track [Page 54] RFC 3501 IMAPv4 March 2003 ALL Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE) FAST Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE) FULL Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY) The currently definedresponse codesdata items that can be fetched are:ALERTBODY Non-extensible form of BODYSTRUCTURE. BODY[<section>]<<partial>> Thehuman-readabletextcontains a special alert that MUST be presented to the user inof afashion that calls the user's attention to the message. BADCHARSET Optionally followed byparticular body section. The section specification is aparenthesized listset ofcharsets. A SEARCH failed because the given charset is not supportedzero or more part specifiers delimited bythis implementation. If the optional list of charsetsperiods. A part specifier isgiven, this lists the charsets that are supported by this implementation. CAPABILITY Followed byeither alistpart number or one ofcapabilities. This can appear intheinitial OK or PREAUTH response to transmit an initial capabilities list. This makes it unnecessary for a clientfollowing: HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and TEXT. An empty section specification refers tosend a separate CAPABILITY command if it recognizes this response. PARSE The human-readable text represents an error in parsingthe[RFC-2822] header orentire message, including the header. Every message has at least one part number. Non-[MIME-IMB] messages, and non-multipart [MIME-IMB]headers ofmessages with no encapsulated message, only have amessagepart 1. Multipart messages are assigned consecutive part numbers, as they occur in theCrispin [Page 58] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 mailbox. PERMANENTFLAGS Followed bymessage. If aparenthesized list of flags, indicates whichparticular part is of type message or multipart, its parts MUST be indicated by a period followed by theknown flagspart number within that nested multipart part. A part of type MESSAGE/RFC822 also has nested part numbers, referring to parts of theclientMESSAGE part's body. The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, and TEXT part specifiers canchange permanently. Any flags that are in the FLAGS untagged response, but notbe thePERMANENTFLAGS list,sole part specifier or cannotbeset permanently. Ifprefixed by one or more numeric part specifiers, provided that theclient attemptsnumeric part specifier refers toSTOREaflag that is not in the PERMANENTFLAGS list, the server will either ignore the change or store the state change for the remainderpart ofthe current session only.type MESSAGE/RFC822. ThePERMANENTFLAGS list can also include the special flag \*, which indicates that it is possible to create new keywordsMIME part specifier MUST be prefixed byattemptingone or more numeric part specifiers. The HEADER, HEADER.FIELDS, and HEADER.FIELDS.NOT part specifiers refer tostore those flags inthemailbox. READ-ONLY The mailbox is selected read-only,[RFC-2822] header of the message orits access while selected has changed from read-write to read-only. READ-WRITE The mailbox is selected read-write, or its access while selected has changed from read-only to read-write. TRYCREATE An APPEND or COPY attempt is failing because the target mailbox does not existof an encapsulated [MIME-IMT] MESSAGE/RFC822 message. HEADER.FIELDS and HEADER.FIELDS.NOT are followed by a list of field-name (asopposed to some other reason). This isdefined in [RFC-2822]) names, and return ahint toCrispin Standards Track [Page 55] RFC 3501 IMAPv4 March 2003 subset of theclientheader. The subset returned by HEADER.FIELDS contains only those header fields with a field-name that matches one of theoperation can succeed ifnames in themailbox is first created bylist; similarly, theCREATE command. UIDNEXT Followedsubset returned bya decimal number, indicatesHEADER.FIELDS.NOT contains only thenext unique identifier value. Refer to section 2.3.1.1 for more information. UIDVALIDITY Followed byheader fields with adecimal number, indicatesnon-matching field-name. The field-matching is case-insensitive but otherwise exact. Subsetting does not exclude theunique identifier validity value. Refer[RFC-2822] delimiting blank line between the header and the body; the blank line is included in all header fetches, except in the case of a message which has no body and no blank line. The MIME part specifier refers tosection 2.3.1.1the [MIME-IMB] header formore information. UNSEEN Followed by a decimal number, indicatesthis part. The TEXT part specifier refers to thenumbertext body of thefirstmessage, omitting the [RFC-2822] header. Here is an example of a complex messagewithoutwith some of its part specifiers: HEADER ([RFC-2822] header of the\Seen flag set. Crispin [Page 59] INTERNET-DRAFT IMAP4rev1 EXPIRESmessage) TEXT ([RFC-2822] text body of the message) MULTIPART/MIXED 1April 2003 Additional response codes defined by particular client or server implementations SHOULD be prefixed with an "X" until they are added to a revisionTEXT/PLAIN 2 APPLICATION/OCTET-STREAM 3 MESSAGE/RFC822 3.HEADER ([RFC-2822] header ofthis protocol. Client implementations SHOULD ignore response codes that they do not recognize. 7.1.1. OK Response Contents: OPTIONAL response code human-readablethe message) 3.TEXT ([RFC-2822] textThe OK response indicates an information message frombody of theserver. When tagged, it indicates successful completionmessage) MULTIPART/MIXED 3.1 TEXT/PLAIN 3.2 APPLICATION/OCTET-STREAM 4 MULTIPART/MIXED 4.1 IMAGE/GIF 4.1.MIME ([MIME-IMB] header for the IMAGE/GIF) 4.2 MESSAGE/RFC822 4.2.HEADER ([RFC-2822] header of theassociated command. The human-readablemessage) 4.2.TEXT ([RFC-2822] textMAY be presentedbody of the message) MULTIPART/MIXED 4.2.1 TEXT/PLAIN 4.2.2 MULTIPART/ALTERNATIVE 4.2.2.1 TEXT/PLAIN 4.2.2.2 TEXT/RICHTEXT It is possible to fetch a substring of theuser as an information message. The untagged form indicatesdesignated text. This is done by appending aninformation-only message;open angle bracket ("<"), thenatureoctet position of theinformation MAY be indicated byfirst desired octet, aresponse code. The untagged formperiod, the maximum number of octets desired, and a close angle bracket (">") to the part specifier. If the starting octet isalso used as onebeyond the end ofthree possible greetings at connection startup. It indicatesthe text, an empty string is returned. Crispin Standards Track [Page 56] RFC 3501 IMAPv4 March 2003 Any partial fetch that attempts to read beyond theconnectionend of the text isnot yet authenticated andtruncated as appropriate. A partial fetch thata LOGIN commandstarts at octet 0 isneeded. Example: S: * OK IMAP4rev1 server ready C: A001 LOGIN fred blurdybloop S: * OK [ALERT] System shutdown in 10 minutes S: A001 OK LOGIN Completed 7.1.2. NO Response Contents: OPTIONAL response code human-readable text The NO response indicates an operational errorreturned as a partial fetch, even if this truncation happened. Note: This means that BODY[]<0.2048> of a 1500-octet messagefrom the server. When tagged, it indicates unsuccessful completionwill return BODY[]<0> with a literal of size 1500, not BODY[]. Note: A substring fetch ofthe associated command. The untagged form indicatesawarning;HEADER.FIELDS or HEADER.FIELDS.NOT part specifier is calculated after subsetting thecommand can still complete successfully.header. Thehuman-readable text describes the condition. Example: C: A222 COPY 1:2 owatagusiam S: * NO Disk is 98% full, please delete unnecessary data S: A222 OK COPY completed C: A223 COPY 3:200 blurdybloop S: * NO Disk is 98% full, please delete unnecessary data S: * NO Disk is 99% full, please delete unnecessary data S: A223 NO COPY failed: disk\Seen flag isfull Crispin [Page 60] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 7.1.3. BAD Response Contents: OPTIONAL response code human-readable text The BAD response indicates an error message from the server. When tagged, it reports a protocol-level error in the client's command;implicitly set; if this causes thetag indicatesflags to change, they SHOULD be included as part of thecommandFETCH responses. BODY.PEEK[<section>]<<partial>> An alternate form of BODY[<section>] thatcauseddoes not implicitly set theerror.\Seen flag. BODYSTRUCTURE Theuntagged form indicates a protocol-level error for which[MIME-IMB] body structure of the message. This is computed by theassociated command can not be determined; it can also indicate an internalserverfailure. The human-readable text describesby parsing thecondition. Example: C: ...very long command line... S: * BAD Command line too long C: ...empty line... S: * BAD Empty command line C: A443 EXPUNGE S: * BAD Disk crash, attempting salvage to a new disk! S: * OK Salvage successful, no data lost S: A443 OK Expunge completed 7.1.4. PREAUTH Response Contents: OPTIONAL response code human-readable text The PREAUTH response is always untagged,[MIME-IMB] header fields in the [RFC-2822] header andis one[MIME-IMB] headers. ENVELOPE The envelope structure ofthree possible greetings at connection startup. It indicates thattheconnection has already been authenticated by external means and thus no LOGIN commandmessage. This isneeded. Example: S: * PREAUTH IMAP4rev1computed by the serverlogged inby parsing the [RFC-2822] header into the component parts, defaulting various fields asSmith 7.1.5. BYE Response Contents: OPTIONAL response code human-readable textnecessary. FLAGS TheBYE response is always untagged, and indicatesflags that are set for this message. INTERNALDATE The internal date of theserver is aboutmessage. RFC822 Functionally equivalent tocloseBODY[], differing in theconnection. The human-readable text MAY be displayed tosyntax of theuserresulting untagged FETCH data (RFC822 is returned). RFC822.HEADER Functionally equivalent to BODY.PEEK[HEADER], differing ina status report bytheclient. The BYE response is sent under one of four conditions: 1) as partsyntax ofa normal logout sequence. The server will closetheconnection after sendingresulting untagged FETCH data (RFC822.HEADER is returned). RFC822.SIZE The [RFC-2822] size of thetagged OK response to the LOGOUT command.message. Crispin Standards Track [Page61] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April57] RFC 3501 IMAPv4 March 20032) as a panic shutdown announcement. The server closes the connection immediately. 3) as an announcement of an inactivity autologout. The server closesRFC822.TEXT Functionally equivalent to BODY[TEXT], differing in theconnection immediately. 4) as onesyntax ofthree possible greetings at connection startup, indicating thattheserverresulting untagged FETCH data (RFC822.TEXT isnot willing to accept a connection from this client.returned). UID Theserver closesunique identifier for theconnection immediately. The difference between a BYE that occurs as part of a normal LOGOUTmessage. Example: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)]) S: * 2 FETCH .... S: * 3 FETCH .... S: * 4 FETCH .... S: A654 OK FETCH completed 6.4.6. STORE Command Arguments: sequence(the first case) and a BYEset message data item name value for message data item Responses: untagged responses: FETCH Result: OK - store completed NO - store error: can't store thatoccurs because ofdata BAD - command unknown or arguments invalid The STORE command alters data associated with afailure (the other three cases) is that the connection closes immediatelymessage in thefailure case. In all casesmailbox. Normally, STORE will return the updated value of theclient SHOULD continue to read responsedatafromwith an untagged FETCH response. A suffix of ".SILENT" in theserver untildata item name prevents theconnection is closed; this will ensure that any pendinguntaggedor completion responses are readFETCH, andprocessed. Example: S: * BYE Autologout; idle for too long 7.2. Server Responses - Server and Mailbox Status These responses are always untagged. This is how server and mailbox status data are transmitted fromthe servertoSHOULD assume that theclient. Manyclient has determined the updated value itself or does not care about the updated value. Note: Regardless ofthese responses typically result from a command withwhether or not thesame name. 7.2.1. CAPABILITY Response Contents: capability listing The CAPABILITY".SILENT" suffix was used, the server SHOULD send an untagged FETCH responseoccurs asif aresult ofchange to aCAPABILITY command.message's flags from an external source is observed. Thecapability listing contains a space-separated listing of capability namesintent is that theserver supports. The capability listing MUST include the atom "IMAP4rev1". In addition, client and server implementations MUST implementstatus of theSTARTTLS, LOGINDISABLED, and AUTH=PLAIN (described in [IMAP-TLS]) capabilities. Seeflags is determinate without a race condition. Crispin Standards Track [Page 58] RFC 3501 IMAPv4 March 2003 The currently defined data items that can be stored are: FLAGS <flag list> Replace theSecurity Considerations sectionflags forimportant information. A capability name which beginsthe message (other than \Recent) with"AUTH=" indicates thattheserver supports that particular authentication mechanism.argument. TheLOGINDISABLED capability indicates thatnew value of theLOGIN commandflags isdisabled, and that the server will respond withreturned as if atagged NO response to any attemptFETCH of those flags was done. FLAGS.SILENT <flag list> Equivalent touseFLAGS, but without returning a new value. +FLAGS <flag list> Add theLOGIN command even ifargument to theuser name and password are valid. An IMAP client MUST NOT issueflags for theCrispin [Page 62] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 LOGIN command if the server advertises the LOGINDISABLED capability. Other capability names indicate that the server supports an extension, revision, or amendment tomessage. The new value of theIMAP4rev1 protocol. Server responses MUST conformflags is returned as if a FETCH of those flags was done. +FLAGS.SILENT <flag list> Equivalent tothis document until the client issues+FLAGS, but without returning acommand that uses the associated capability. Capability names MUST either begin with "X" or be standard or standards-track IMAP4rev1 extensions, revisions, or amendments registered with IANA. A server MUST NOT offer unregistered or non-standard capability names, unless such names are prefixed with an "X". Client implementations SHOULD NOT require any capability name other than "IMAP4rev1", and MUST ignore any unknown capability names. A server MAY send capabilities automatically, by usingnew value. -FLAGS <flag list> Remove theCAPABILITY response code inargument from theinitial PREAUTH or OK responses, and by sending an updated CAPABILITY response code inflags for thetagged OK response as partmessage. The new value ofa successful authentication. Itthe flags isunnecessary forreturned as if aclientFETCH of those flags was done. -FLAGS.SILENT <flag list> Equivalent tosend-FLAGS, but without returning aseparate CAPABILITY command if it recognizes these automatic capabilities.new value. Example: C: A003 STORE 2:4 +FLAGS (\Deleted) S: *CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI XPIG-LATIN 7.2.2. LIST Response Contents:2 FETCH (FLAGS (\Deleted \Seen)) S: * 3 FETCH (FLAGS (\Deleted)) S: * 4 FETCH (FLAGS (\Deleted \Flagged \Seen)) S: A003 OK STORE completed 6.4.7. COPY Command Arguments: sequence set mailbox nameattributes hierarchy delimiter name The LIST response occurs as a result of a LIST command. It returns a single name that matches the LIST specification. There can be multiple LISTResponses: no specific responses fora single LIST command. Four name attributes are defined: \Noinferiors It is not possible for any child levels of hierarchy to exist underthisname; no child levels exist now and none can be created in the future. \Noselectcommand Result: OK - copy completed NO - copy error: can't copy those messages or to that name BAD - command unknown or arguments invalid Crispin Standards Track [Page63] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April59] RFC 3501 IMAPv4 March 2003It is not possibleThe COPY command copies the specified message(s) touse this name as a selectablethe end of the specified destination mailbox.\MarkedThemailbox has been marked "interesting" byflags and internal date of theserver;message(s) SHOULD be preserved, and themailbox probably contains messages that have been added sinceRecent flag SHOULD be set, in thelast timecopy. If themailbox was selected. \Unmarked Thedestination mailbox does notcontain any additional messages since the last timeexist, a server SHOULD return an error. It SHOULD NOT automatically create themailbox was selected. Ifmailbox. Unless it is certain that the destination mailbox can notfeasible forbe created, the server MUST send the response code "[TRYCREATE]" as the prefix of the text of the tagged NO response. This gives a hint todetermine whetherthemailbox is "interesting" or not, orclient that it can attempt a CREATE command and retry the COPY if thenameCREATE isa \Noselect name,successful. If theserver SHOULD NOT send either \MarkedCOPY command is unsuccessful for any reason, server implementations MUST restore the destination mailbox to its state before the COPY attempt. Example: C: A003 COPY 2:4 MEETING S: A003 OK COPY completed 6.4.8. UID Command Arguments: command name command arguments Responses: untagged responses: FETCH, SEARCH Result: OK - UID command completed NO - UID command error BAD - command unknown or\Unmarked.arguments invalid Thehierarchy delimiter isUID command has two forms. In the first form, it takes as its arguments acharacter used to delimit levels of hierarchyCOPY, FETCH, or STORE command with arguments appropriate for the associated command. However, the numbers ina mailbox name.the sequence set argument are unique identifiers instead of message sequence numbers. Sequence set ranges are permitted, but there is no guarantee that unique identifiers will be contiguous. Aclient can usenon-existent unique identifier is ignored without any error message generated. Thus, it is possible for a UID FETCH command tocreate child mailboxes, and to search higherreturn an OK without any data orlower levels of naming hierarchy. All children ofatop-level hierarchy node MUST useUID COPY or UID STORE to return an OK without performing any operations. In thesame separator character. A NIL hierarchy delimiter means that no hierarchy exists;second form, thename isUID command takes a"flat" name.SEARCH command with SEARCH command arguments. Thename represents an unambiguous left-to-right hierarchy, and MUST be valid for use as a reference in LIST and LSUB commands. Unless \Noselectinterpretation of the arguments isindicated,thename MUST also be validsame asan argument for commands, such as SELECT, that accept mailbox names. Example: S: * LIST (\Noselect) "/" ~/Mail/foo 7.2.3. LSUB Response Contents: name attributes hierarchy delimiter name The LSUB response occurs as a result of an LSUB command. It returns a single name that matcheswith SEARCH; however, theLSUB specification. There can be multiple LSUB responsesnumbers returned in a SEARCH response for asingle LSUB command. The data is identical in format to the LIST response. Example: S: * LSUB () "." #news.comp.mail.miscUID SEARCH command are unique identifiers instead Crispin Standards Track [Page64] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April60] RFC 3501 IMAPv4 March 20037.2.4 STATUS Response Contents: name status parenthesized list The STATUS response occurs as a resultofan STATUS command. Itmessage sequence numbers. For example, the command UID SEARCH 1:100 UID 443:557 returns themailbox name that matchesunique identifiers corresponding to theSTATUS specificationintersection of two sequence sets, the message sequence number range 1:100 and therequested mailbox status information. Example: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) 7.2.5. SEARCH Response Contents: zero or more numbersUID range 443:557. Note: in the above example, the UID range 443:557 appears. TheSEARCH response occurs as a result ofsame comment about aSEARCHnon-existent unique identifier being ignored without any error message also applies here. Hence, even if neither UID 443 or 557 exist, this range is valid and would include an existing UIDSEARCH command. The number(s) refer to those messages495. Also note thatmatcha UID range of 559:* always includes thesearch criteria. For SEARCH, these are message sequence numbers; forUIDSEARCH, these are unique identifiers. Each number is delimited by a space. Example: S: * SEARCH 2 3 6 7.2.6. FLAGS Response Contents: flag parenthesized list The FLAGS response occurs as a resultofa SELECT or EXAMINE command. The flag parenthesized list identifiestheflags (at a minimum,last message in thesystem-defined flags) that are applicable for this mailbox. Flags othermailbox, even if 559 is higher than any assigned UID value. This is because thesystem flags can also exist, depending on server implementation. The update fromcontents of a range are independent of theFLAGS response MUST be recorded byorder of theclient. Example: S:range endpoints. Thus, any UID range with *FLAGS (\Answered \Flagged \Deleted \Seen \Draft) Crispin [Page 65] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 7.3. Server Responses - Mailbox Size These responses are always untagged. This is how changes in the sizeas one of themailbox are transmitted fromendpoints indicates at least one message (the message with theserver tohighest numbered UID), unless theclient. Immediately followingmailbox is empty. The number after the "*"tokenin an untagged FETCH response isa number that representsalways a messagecount. 7.3.1. EXISTS Response Contents: none The EXISTS response reports the number of messages insequence number, not a unique identifier, even for a UID command response. However, server implementations MUST implicitly include themailbox. This response occursUID message data item asa resultpart of any FETCH response caused by aSELECT or EXAMINEUID command,and if the sizeregardless of whether a UID was specified as a message data item to themailbox changes (e.g. new messages).FETCH. Note: Theupdate fromrule about including theEXISTS response MUST be recorded by the client. Example: S: * 23 EXISTS 7.3.2. RECENT Response Contents: none The RECENT response reports the number of messages with the \Recent flag set. This response occursUID message data item asa resultpart of aSELECT or EXAMINE command, and if the size of the mailbox changes (e.g. new messages). Note: It is not guaranteed thatFETCH response primarily applies to themessage sequence numbers of recent messages will beUID FETCH and UID STORE commands, including acontiguous 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 isUID FETCH command that does notthe case are: multiple clients having the same mailbox open (the first session to be notified will see it as recent, others will probably see itinclude UID asnon-recent), and when the mailbox is re-ordered byanon-IMAP agent. The only reliable way to identify recent messages is to look atmessageflags to see which havedata item. Although it is unlikely that the\Recent flag set, orother UID commands will cause an untagged FETCH, this rule applies todo a SEARCH RECENT. The update from the RECENT response MUST be recorded by the client.these commands as well. Example: C: A999 UID FETCH 4827313:4828442 FLAGS S: *5 RECENT23 FETCH (FLAGS (\Seen) UID 4827313) S: * 24 FETCH (FLAGS (\Seen) UID 4827943) S: * 25 FETCH (FLAGS (\Seen) UID 4828442) S: A999 OK UID FETCH completed Crispin Standards Track [Page66] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April61] RFC 3501 IMAPv4 March 20037.4. Server Responses - Message Status These responses are always untagged. This6.5. Client Commands - Experimental/Expansion 6.5.1. X<atom> Command Arguments: implementation defined Responses: implementation defined Result: OK - command completed NO - failure BAD - command unknown or arguments invalid Any command prefixed with an X ishow message dataan experimental command. Commands which aretransmitted from the server to the client, often as a resultnot part of this specification, a standard or standards-track revision of this specification, or an IESG-approved experimental protocol, MUST use the X prefix. Any added untagged responses issued by an experimental command MUST also be prefixed with an X. Server implementations MUST NOT send any such untagged responses, unless thesame name. Immediately following the "*" token is a number that represents a message sequence number. 7.4.1. EXPUNGE Response Contents: none The EXPUNGE response reports that the specified message sequence number has been permanently removed fromclient requested it by issuing themailbox.associated experimental command. Example: C: a441 CAPABILITY S: * CAPABILITY IMAP4rev1 XPIG-LATIN S: a441 OK CAPABILITY completed C: A442 XPIG-LATIN S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay S: A442 OK XPIG-LATIN ompleted-cay 7. Server Responses Server responses are in three forms: status responses, server data, and command continuation request. Themessage sequence number for each successive messageinformation contained in a server response, identified by "Contents:" in themailboxresponse descriptions below, isimmediately decrementeddescribed by1, and this decrement is reflected in message sequence numbers in subsequent responses (including other untagged EXPUNGE responses).function, not by syntax. TheEXPUNGE response also decrements the numberprecise syntax ofmessagesserver responses is described in themailbox; it is not necessaryFormal Syntax section. The client MUST be prepared tosend an EXISTSaccept any responsewithat all times. Status responses can be tagged or untagged. Tagged status responses indicate thenew value. As acompletion result (OK, NO, or BAD status) ofthe immediate decrement rule, message sequence numbers that appear inaset of successive EXPUNGE responses depend upon whetherclient command, and have a tag matching themessagescommand. Some status responses, and all server data, areremoved starting from lower numbers to higher numbers, or from higher numbers to lower numbers. For example, ifuntagged. An untagged response is indicated by thelast 5 messages in a 9-message mailbox are expunged;token "*" instead of a"lower to higher" server will send five untagged EXPUNGEtag. Untagged status responsesfor message sequence number 5, whereasindicate server greeting, or server status Crispin Standards Track [Page 62] RFC 3501 IMAPv4 March 2003 that does not indicate the completion of a"higher to lower server" will send successivecommand (for example, an impending system shutdown alert). For historical reasons, untaggedEXPUNGEserver data responsesfor message sequence numbers 9, 8, 7, 6, and 5. An EXPUNGE responseare also called "unsolicited data", although strictly speaking, only unilateral server data is truly "unsolicited". Certain server data MUSTNOTbesentrecorded by the client whenno commandit isin progress; nor while responding to a FETCH, STORE, or SEARCH command. This rulereceived; this isnecessary to prevent a lossnoted in the description ofsynchronizationthat data. Such data conveys critical information which affects the interpretation ofmessage sequence numbers between clientall subsequent commands andserver. A command is not "in progress" until the complete command has been received; in particular, a command is not "in progress" duringresponses (e.g., updates reflecting thenegotiationcreation or destruction ofcommand continuation. Note: UID FETCH, UID STORE, and UID SEARCH are different commands from FETCH, STORE, and SEARCH. An EXPUNGE response MAY be sent during an UID command. The update from the EXPUNGE response MUSTmessages). Other server data SHOULD be recordedbyfor later reference; if theclient. Example: S: * 44 EXPUNGE Crispin [Page 67] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 7.4.2. FETCH Response Contents: message data The FETCH response returns data about a messageclient does not need to record the data, or if recording theclient. The data are pairs ofdataitem names and their values in parentheses. Thishas no obvious purpose (e.g., a SEARCH responseoccurs aswhen no SEARCH command is in progress), theresultdata SHOULD be ignored. An example ofa FETCH or STORE command, as well as byunilateral untagged serverdecision (e.g. flag updates). The currentdataitems are: BODY A form of BODYSTRUCTURE without extension data. BODY[<section>]<<origin octet>> A string expressingoccurs when thebody contents ofIMAP connection is in thespecified section. The string SHOULD be interpreted byselected state. In theclient according toselected state, thecontent transfer encoding, body type, and subtype. Ifserver checks theorigin octet is specified,mailbox for new messages as part of command execution. Normally, thisstringisa substringpart of theentire body contents, starting at that origin octet. This means that BODY[]<0> MAY be truncated, but BODY[] is NEVER truncated. Note: The origin octet facility MUST NOT be used byexecution of every command; hence, a NOOP command suffices to check for new messages. If new messages are found, the serverin a FETCH response unlesssends untagged EXISTS and RECENT responses reflecting theclient specifically requested it by meansnew size ofathe mailbox. Server implementations that offer multiple simultaneous access to the same mailbox SHOULD also send appropriate unilateral untagged FETCHof a BODY[<section>]<<partial>> data item. 8-bit textual data is permittedand EXPUNGE responses ifa [CHARSET] identifier is part ofanother agent changes thebody parameter parenthesized list for this section. Note that headers (part specifiers HEADER or MIME,state of any message flags or expunges any messages. Command continuation request responses use theheader portiontoken "+" instead of aMESSAGE/RFC822 part), MUST be 7-bit; 8-bit characterstag. These responses arenot permitted in headers. Note also that the [RFC-2822] delimiting blank line betweensent by theheaderserver to indicate acceptance of an incomplete client command and readiness for thebody is not affected by header line subsetting;remainder of theblank line iscommand. 7.1. Server Responses - Status Responses Status responses are OK, NO, BAD, PREAUTH and BYE. OK, NO, and BAD can be tagged or untagged. PREAUTH and BYE are alwaysincluded as partuntagged. Status responses MAY include an OPTIONAL "response code". A response code consists ofheader data, exceptdata inside square brackets in thecaseform of an atom, possibly followed by amessage which has no bodyspace andno blank line. Non-textual data such as binary data MUST be transfer encoded into a textual form such as BASE64 prior to being sent to the client. To derive the original binary data, thearguments. The response code contains additional information or status codes for clientMUST decodesoftware beyond thetransfer encoded string. BODYSTRUCTURE A parenthesized listOK/NO/BAD condition, and are defined when there is a specific action thatdescribes the [MIME-IMB] body structure ofamessage. This is computed byclient can take based upon theserver byadditional information. Crispin Standards Track [Page68] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April63] RFC 3501 IMAPv4 March 2003parsing the [MIME-IMB] header fields, defaulting various fields as necessary. For example, a simpleThe currently defined response codes are: ALERT The human-readable textmessage of 48 lines and 2279 octets can havecontains abody structure of: ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 2279 48) Multiple parts are indicated by parenthesis nesting. Instead ofspecial alert that MUST be presented to the user in abody type asfashion that calls thefirst element ofuser's attention to the message. BADCHARSET Optionally followed by a parenthesized listthere is a sequence of one or more nested body structures. The second elementof charsets. A SEARCH failed because theparenthesizedgiven charset is not supported by this implementation. If the optional list of charsets is given, this lists themultipart subtype (mixed, digest, parallel, alternative, etc.). For example,charsets that are supported by this implementation. CAPABILITY Followed by atwo part message consistinglist of capabilities. This can appear in the initial OK or PREAUTH response to transmit an initial capabilities list. This makes it unnecessary for atext andclient to send aBASE64-encodedseparate CAPABILITY command if it recognizes this response. PARSE The human-readable textattachment can have a body structure of: (("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 1152 23)("TEXT" "PLAIN" ("CHARSET" "US-ASCII" "NAME" "cc.diff") "<960723163407.20117h@cac.washington.edu>" "Compiler diff" "BASE64" 4554 73) "MIXED") Extension data follows the multipart subtype. Extension data is never returned with the BODY fetch, but can be returned with a BODYSTRUCTURE fetch. Extension data, if present, MUST berepresents an error in parsing thedefined order. The extension data[RFC-2822] header or [MIME-IMB] headers of amultipart body part aremessage in thefollowing order: body parameter parenthesized list Amailbox. PERMANENTFLAGS Followed by a parenthesized list ofattribute/value pairs [e.g. ("foo" "bar" "baz" "rag") where "bar" is the valueflags, indicates which of"foo" and "rag" isthevalue of "baz"] as definedknown flags the client can change permanently. Any flags that are in[MIME-IMB]. body disposition A parenthesizedthe FLAGS untagged response, but not the PERMANENTFLAGS list,consisting of a disposition type string followed bycan not be set permanently. If the client attempts to STORE aparenthesized list of disposition attribute/value pairs as definedflag that is not in[DISPOSITION]. body language A stringthe PERMANENTFLAGS list, the server will either ignore the change orparenthesized list givingstore thebody language value as defined in [LANGUAGE-TAGS]. body location A string list givingstate change for thebody content URI as defined in [LOCATION]. Any following extension data are not yet defined in this versionremainder of theprotocol. Such extension datacurrent session only. The PERMANENTFLAGS list canconsist ofalso include the special flag \*, which indicates that it is possible to create new keywords by attempting to store those flags in the mailbox. Crispin Standards Track [Page69] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April64] RFC 3501 IMAPv4 March 2003zeroREAD-ONLY The mailbox is selected read-only, ormore NILs, strings, numbers,its access while selected has changed from read-write to read-only. READ-WRITE The mailbox is selected read-write, orpotentially nested parenthesized lists of such data. Client implementationsits access while selected has changed from read-only to read-write. TRYCREATE An APPEND or COPY attempt is failing because the target mailbox does not exist (as opposed to some other reason). This is a hint to the client thatdothe operation can succeed if the mailbox is first created by the CREATE command. UIDNEXT Followed by aBODYSTRUCTURE fetch MUST be prepareddecimal number, indicates the next unique identifier value. Refer toaccept such extension data. Server implementations MUST NOT send such extension data until it has beensection 2.3.1.1 for more information. UIDVALIDITY Followed by a decimal number, indicates the unique identifier validity value. Refer to section 2.3.1.1 for more information. UNSEEN Followed by a decimal number, indicates the number of the first message without the \Seen flag set. Additional response codes defined by particular client or server implementations SHOULD be prefixed with an "X" until they are added to a revision of this protocol. Client implementations SHOULD ignore response codes that they do not recognize. 7.1.1. OK Response Contents: OPTIONAL response code human-readable text Thebasic fieldsOK response indicates an information message from the server. When tagged, it indicates successful completion ofa non-multipart body part are inthefollowing order: body type A string givingassociated command. The human-readable text MAY be presented to thecontent media type nameuser asdefined in [MIME-IMB]. body subtype A string givingan information message. The untagged form indicates an Crispin Standards Track [Page 65] RFC 3501 IMAPv4 March 2003 information-only message; thecontent subtype name as defined in [MIME-IMB]. body parameter parenthesized list A parenthesized listnature ofattribute/value pairs [e.g. ("foo" "bar" "baz" "rag") where "bar" isthevalue of "foo" and "rag"information MAY be indicated by a response code. The untagged form isthe value of "baz"] as defined in [MIME-IMB]. body id A string giving the content id as defined in [MIME-IMB]. body description A string giving the content description as defined in [MIME-IMB]. body encoding A string giving the content transfer encodingalso used asdefined in [MIME-IMB]. body size A number giving the sizeone ofthe body in octets. Notethree possible greetings at connection startup. It indicates thatthis size isthesize in its transfer encoding andconnection is notthe resulting size after any decoding. A body type of type MESSAGE and subtype RFC822 contains, immediately after the basic fields, the envelope structure, body structure,yet authenticated andsizethat a LOGIN command is needed. Example: S: * OK IMAP4rev1 server ready C: A001 LOGIN fred blurdybloop S: * OK [ALERT] System shutdown in 10 minutes S: A001 OK LOGIN Completed 7.1.2. NO Response Contents: OPTIONAL response code human-readable textlines ofThe NO response indicates an operational error message from theencapsulated message. A body typeserver. When tagged, it indicates unsuccessful completion oftype TEXT contains, immediately after the basic fields,thesize ofassociated command. The untagged form indicates a warning; thebody incommand can still complete successfully. The human-readable textlines. Note that this size is the size in its content transfer encoding and notdescribes theresulting size after any decoding. Crispin [Page 70] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 Extensioncondition. Example: C: A222 COPY 1:2 owatagusiam S: * NO Disk is 98% full, please delete unnecessary datafollows the basic fields and the type-specific fields listed above. ExtensionS: A222 OK COPY completed C: A223 COPY 3:200 blurdybloop S: * NO Disk is 98% full, please delete unnecessary data S: * NO Disk isnever returned with the BODY fetch, but can be returned with a BODYSTRUCTURE fetch. Extension data, if present, MUST be in the defined order. The extension99% full, please delete unnecessary dataofS: A223 NO COPY failed: disk is full 7.1.3. BAD Response Contents: OPTIONAL response code human-readable text The BAD response indicates an error message from the server. When tagged, it reports anon-multipart body part areprotocol-level error in thefollowing order: body MD5 A string givingclient's command; thebody MD5 value as defined in [MD5]. body disposition A parenthesized list withtag indicates thesame content and function ascommand that caused thebody disposition forerror. The untagged form indicates amultipart body part. body language A string or parenthesized list giving the body language value as defined in [LANGUAGE-TAGS]. body location A string list givingprotocol-level error for which thebody content URI as defined in [LOCATION]. Any following extension data areassociated command can notyet defined in this version of the protocol, and wouldbeas described above under multipart extension data. ENVELOPE A parenthesized list thatdetermined; it can also indicate an internal server failure. The human-readable text describes theenvelope structure ofcondition. Crispin Standards Track [Page 66] RFC 3501 IMAPv4 March 2003 Example: C: ...very long command line... S: * BAD Command line too long C: ...empty line... S: * BAD Empty command line C: A443 EXPUNGE S: * BAD Disk crash, attempting salvage to amessage. Thisnew disk! S: * OK Salvage successful, no data lost S: A443 OK Expunge completed 7.1.4. PREAUTH Response Contents: OPTIONAL response code human-readable text The PREAUTH response iscomputed byalways untagged, and is one of three possible greetings at connection startup. It indicates that theserverconnection has already been authenticated byparsingexternal means; thus no LOGIN command is needed. Example: S: * PREAUTH IMAP4rev1 server logged in as Smith 7.1.5. BYE Response Contents: OPTIONAL response code human-readable text The BYE response is always untagged, and indicates that the[RFC-2822] header intoserver is about to close thecomponent parts, defaulting various fields as necessary.connection. Thefields ofhuman-readable text MAY be displayed to theenvelope structure areuser in a status report by thefollowing order: date, subject, from, sender, reply-to, to, cc, bcc, in-reply-to, and message-id. The date, subject, in-reply-to, and message-id fields are strings.client. Thefrom, sender, reply-to, to, cc, and bcc fields are parenthesized lists of address structures. An address structureBYE response is sent under one of four conditions: 1) as part of aparenthesized list that describes an electronic mail address.normal logout sequence. Thefields of an address structure are inserver will close thefollowing order: personal name, [SMTP] at-domain-list (source route), mailbox name, and host name. [RFC-2822] group syntax is indicated byconnection after sending the tagged OK response to the LOGOUT command. 2) as aspecial formpanic shutdown announcement. The server closes the connection immediately. 3) as an announcement ofaddress structure in whichan inactivity autologout. The server closes thehost name field is NIL. Ifconnection immediately. 4) as one of three possible greetings at connection startup, indicating that themailbox name fieldserver isalso NIL,not willing to accept a connection from thisis an end of group markerclient. The server closes the connection immediately. Crispin Standards Track [Page71] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 (semi-colon in67] RFC822 syntax). If the mailbox name field is non-NIL, this is3501 IMAPv4 March 2003 The difference between astartBYE that occurs as part ofgroup marker, and the mailbox name field holds the group name phrase. If the Date, Subject, In-Reply-To,a normal LOGOUT sequence (the first case) andMessage-ID header lines are absent in the [RFC-2822] header, the corresponding member of the envelope is NIL; if these header lines are present but empty the corresponding membera BYE that occurs because ofthe envelopea failure (the other three cases) is that theempty string. Note: some servers may return a NIL envelope memberconnection closes immediately in the"present but empty"failure case.Clients SHOULD treat NIL and empty string as identical. Note: [RFC-2822] requires thatIn allmessages have a valid Date header. Therefore,cases thedate member inclient SHOULD continue to read response data from theenvelope can not be NIL orserver until theempty string. Note: [RFC-2822] requires that the In-Reply-To and Message-ID headers, if present, have non-empty content. Therefore, the in-reply-toconnection is closed; this will ensure that any pending untagged or completion responses are read andmessage-id members in the envelope can not be the empty string. If the From, To, cc,processed. Example: S: * BYE Autologout; idle for too long 7.2. Server Responses - Server andbcc header lines are absent in the [RFC-2822] header, orMailbox Status These responses arepresent but empty, the corresponding member of the envelopealways untagged. This isNIL. If the Sender or Reply-To lines are absent in the [RFC-2822] header, orhow server and mailbox status data arepresent but empty,transmitted from the serversets the corresponding member of the envelopetobe the same value asthe client. Many of these responses typically result frommember (the client is not expected to know to do this). Note: [RFC-2822] requires that all messages haveavalid From header. Therefore, the from, sender, and reply-to members in the envelope can not be NIL. Crispin [Page 72] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 FLAGS A parenthesized list of flags that are set for this message. INTERNALDATE A string representing the internal date ofcommand with themessage. RFC822 Equivalent to BODY[]. RFC822.HEADER Equivalent to BODY[HEADER]. Note that this did not result in \Seen being set, because RFC822.HEADERsame name. 7.2.1. CAPABILITY Response Contents: capability listing The CAPABILITY responsedataoccurs as a result of aFETCH of RFC822.HEADER. BODY[HEADER] response data occurs as a result ofCAPABILITY command. The capability listing contains aFETCHspace-separated listing ofBODY[HEADER] (which sets \Seen) or BODY.PEEK[HEADER] (which does not set \Seen). RFC822.SIZE A number expressingcapability names that the[RFC-2822] size ofserver supports. The capability listing MUST include themessage. RFC822.TEXT Equivalent to BODY[TEXT]. UID A number expressingatom "IMAP4rev1". In addition, client and server implementations MUST implement theunique identifier ofSTARTTLS, LOGINDISABLED, and AUTH=PLAIN (described in [IMAP-TLS]) capabilities. See themessage. Example: S: * 23 FETCH (FLAGS (\Seen) RFC822.SIZE 44827) 7.5. Server Responses - Command Continuation Request The command continuation request response is indicated by a "+" token instead of a tag. This form of responseSecurity Considerations section for important information. A capability name which begins with "AUTH=" indicates that the serveris ready to acceptsupports that particular authentication mechanism. The LOGINDISABLED capability indicates that thecontinuation of aLOGIN commandfrom the client. The remainder of this response is a line of text. This responseisused indisabled, and that theAUTHENTICATE command to transmitserverdata to the client, and request additional client data. Thiswill respond with a tagged NO responseis also used if an argumentto anycommand is a literal. The client is not permittedattempt tosenduse theoctets ofLOGIN command even if theliteral unlessuser name and password are valid. An IMAP client MUST NOT issue the LOGIN command if the serverindicatesadvertises the LOGINDISABLED capability. Other capability names indicate thatit expects it. This permitsthe server supports an extension, revision, or amendment toprocess commands and reject errors on a line-by-line basis. The remainder ofthecommand, includingIMAP4rev1 protocol. Server responses MUST conform to this document until theCRLF that terminatesclient issues acommand, follows the octets ofcommand that uses theliteral. If thereassociated capability. Capability names MUST either begin with "X" or be standard or standards-track IMAP4rev1 extensions, revisions, or amendments registered with IANA. A server MUST NOT offer unregistered or Crispin Standards Track [Page 68] RFC 3501 IMAPv4 March 2003 non-standard capability names, unless such names are prefixed with an "X". Client implementations SHOULD NOT require anyadditional command argumentscapability name other than "IMAP4rev1", and MUST ignore any unknown capability names. A server MAY send capabilities automatically, by using theliteral octets are followedCAPABILITY response code in the initial PREAUTH or OK responses, and by sending an updated CAPABILITY response code in the tagged OK response as part of aspace and those arguments. Crispin [Page 73] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 Example: C: A001 LOGIN {11} S: + Ready for additional command text C: FRED FOOBAR {7} S: + Readysuccessful authentication. It is unnecessary foradditionala client to send a separate CAPABILITY commandtext C: fat man S: A001 OK LOGIN completed C: A044 BLURDYBLOOP {102856}if it recognizes these automatic capabilities. Example: S:A044 BAD No such command as "BLURDYBLOOP" Crispin [Page 74] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 8. Sample* CAPABILITY IMAP4rev1connectionSTARTTLS AUTH=GSSAPI XPIG-LATIN 7.2.2. LIST Response Contents: name attributes hierarchy delimiter name Thefollowing isLIST response occurs as atranscriptresult ofan IMAP4rev1 connection. A long line in this samplea LIST command. It returns a single name that matches the LIST specification. There can be multiple LIST responses for a single LIST command. Four name attributes are defined: \Noinferiors It isbrokennot possible foreditorial clarity. S: * OK IMAP4rev1 Service Ready C: a001 login mrc secret S: a001 OK LOGIN completed C: a002 select inbox S: * 18 EXISTS S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) S: * 2 RECENT S: * OK [UNSEEN 17] Message 17any child levels of hierarchy to exist under this name; no child levels exist now and none can be created in the future. \Noselect It is not possible to use this name as a selectable mailbox. \Marked The mailbox has been marked "interesting" by thefirst unseen message S: * OK [UIDVALIDITY 3857529045] UIDs valid S: a002 OK [READ-WRITE] SELECT completed C: a003 fetch 12 full S: * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700" RFC822.SIZE 4286 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)" "IMAP4rev1 WG mtg summaryserver; the mailbox probably contains messages that have been added since the last time the mailbox was selected. \Unmarked The mailbox does not contain any additional messages since the last time the mailbox was selected. Crispin Standards Track [Page 69] RFC 3501 IMAPv4 March 2003 If it is not feasible for the server to determine whether or not the mailbox is "interesting", or if the name is a \Noselect name, the server SHOULD NOT send either \Marked or \Unmarked. The hierarchy delimiter is a character used to delimit levels of hierarchy in a mailbox name. A client can use it to create child mailboxes, andminutes" (("Terry Gray" NIL "gray" "cac.washington.edu")) (("Terry Gray"to search higher or lower levels of naming hierarchy. All children of a top-level hierarchy node MUST use the same separator character. A NIL"gray" "cac.washington.edu")) (("Terry Gray" NIL "gray" "cac.washington.edu")) ((NIL NIL "imap" "cac.washington.edu")) ((NIL NIL "minutes" "CNRI.Reston.VA.US") ("John Klensin" NIL "KLENSIN" "INFOODS.MIT.EDU")) NIL NIL "<B27397-0100000@cac.washington.edu>") BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92)) S: a003 OK FETCH completed C: a004 fetch 12 body[header] S: * 12 FETCH (BODY[HEADER] {350} S: Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT) S: From: Terry Gray <gray@cac.washington.edu> S: Subject: IMAP4rev1 WG mtg summary and minutes S: To: imap@cac.washington.edu S: cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@INFOODS.MIT.EDU> S: Message-Id: <B27397-0100000@cac.washington.edu> S: MIME-Version: 1.0 S: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII S: S: ) S: a004 OK FETCH completed C: a005 store 12 +flags \deleted S: * 12 FETCH (FLAGS (\Seen \Deleted)) S: a005 OK +FLAGS completed C: a006 logout S: * BYE IMAP4rev1 server terminating connection S: a006 OK LOGOUT completed Crispin [Page 75] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 9. Formal Syntax The following syntax specification uses the Augmented Backus-Naur Form (ABNF) notation as specified in [ABNF]. Inhierarchy delimiter means that no hierarchy exists; thecase of alternative or optional rules in whichname is alater rule overlaps"flat" name. The name represents anearlier rule, the rule which is listed earlierunambiguous left-to-right hierarchy, and MUSTtake priority. For example, "\Seen" when parsedbe valid for use as aflagreference in LIST and LSUB commands. Unless \Noselect is indicated, the\Seen flagnameand not a flag-extension, even though "\Seen" can be parsed as a flag-extension. Some, but not all, instances of this rule are noted below. Note: [ABNF] rulesMUST also befollowed strictly; in particular: (1) Exceptvalid asnoted otherwise, all alphabetic characters are case-insensitive. The use of upper or lower case characters to define token strings isan argument foreditorial clarity only. Implementations MUSTcommands, such as SELECT, that acceptthese strings inmailbox names. Example: S: * LIST (\Noselect) "/" ~/Mail/foo 7.2.3. LSUB Response Contents: name attributes hierarchy delimiter name The LSUB response occurs as acase-insensitive fashion. (2) In all cases, SP refers to exactly one space.result of an LSUB command. It returns a single name that matches the LSUB specification. There can be multiple LSUB responses for a single LSUB command. The data isNOT permitted to substitute TAB, insert additional spaces, or otherwise treat SP as being equivalentidentical in format toLWSP. (3) The ASCII NUL character, %x00, MUST NOT be used at any time. address = "(" addr-name SP addr-adl SP addr-mailbox SP addr-host ")" addr-adl = nstring ; Holds route from [RFC-2822] route-addr if ; non-NIL addr-host = nstring ; NIL indicates [RFC-2822] group syntax. ; Otherwise, holds [RFC-2822] domainthe LIST response. Example: S: * LSUB () "." #news.comp.mail.misc 7.2.4 STATUS Response Contents: nameaddr-mailbox = nstring ; NIL indicates endstatus parenthesized list The STATUS response occurs as a result of[RFC-2822] group; if ; non-NILan STATUS command. It returns the mailbox name that matches the STATUS specification andaddr-host is NIL, holds ; [RFC-2822] group name. ; Otherwise, holds [RFC-2822] local-part ; after removing [RFC-2822] quotingthe requested mailbox status information. Example: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) Crispin Standards Track [Page76] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April70] RFC 3501 IMAPv4 March 2003addr-name = nstring ; If non-NIL, holds phrase from [RFC-2822] ; mailbox after removing [RFC-2822] quoting append = "APPEND" SP mailbox [SP flag-list] [SP date-time] SP literal astring = 1*ASTRING-CHAR / string ASTRING-CHAR = ATOM-CHAR / resp-specials atom = 1*ATOM-CHAR ATOM-CHAR = <any CHAR except atom-specials> atom-specials = "(" / ")" / "{" / SP / CTL / list-wildcards / quoted-specials / resp-specials authenticate = "AUTHENTICATE" SP auth-type *(CRLF base64) auth-type = atom ; Defined by [SASL] base64 = *(4base64-char) [base64-terminal] base64-char = ALPHA / DIGIT / "+" / "/" ; Case-sensitive base64-terminal = (2base64-char "==") / (3base64-char "=") body = "(" (body-type-1part / body-type-mpart) ")" body-extension = nstring / number / "(" body-extension *(SP body-extension) ")" ; Future expansion. Client implementations ; MUST accept body-extension fields. Server ; implementations MUST NOT generate ; body-extension fields except7.2.5. SEARCH Response Contents: zero or more numbers The SEARCH response occurs asdefined by ; future standarda result of a SEARCH orstandards-track ; revisionsUID SEARCH command. The number(s) refer to those messages that match the search criteria. For SEARCH, these are message sequence numbers; for UID SEARCH, these are unique identifiers. Each number is delimited by a space. Example: S: * SEARCH 2 3 6 7.2.6. FLAGS Response Contents: flag parenthesized list The FLAGS response occurs as a result of a SELECT or EXAMINE command. The flag parenthesized list identifies the flags (at a minimum, the system-defined flags) that are applicable for thisspecification. body-ext-1part = body-fld-md5 [SP body-fld-dsp [SP body-fld-lang *(SP body-extension)]] ; MUST NOT be returnedmailbox. Flags other than the system flags can also exist, depending onnon-extensible ; "BODY" fetch Crispin [Page 77] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 body-ext-mpart = body-fld-param [SP body-fld-dsp [SP body-fld-lang *(SP body-extension)]] ;server implementation. The update from the FLAGS response MUSTNOTbereturned on non-extensible ; "BODY" fetch body-fields = body-fld-param SP body-fld-id SP body-fld-desc SP body-fld-enc SP body-fld-octets body-fld-desc = nstring body-fld-dsp = "(" string SP body-fld-param ")" / nil body-fld-enc = (DQUOTE ("7BIT" / "8BIT" / "BINARY" / "BASE64"/ "QUOTED-PRINTABLE") DQUOTE) / string body-fld-id = nstring body-fld-lang = nstring / "(" string *(SP string) ")" body-fld-loc = nstring body-fld-lines =recorded by the client. Example: S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) 7.3. Server Responses - Mailbox Size These responses are always untagged. This is how changes in the size of the mailbox are transmitted from the server to the client. Immediately following the "*" token is a numberbody-fld-md5 = nstring body-fld-octets =that represents a message count. 7.3.1. EXISTS Response Contents: none The EXISTS response reports the numberbody-fld-param = "(" string SP string *(SP string SP string) ")" / nil body-type-1part = (body-type-basic / body-type-msg / body-type-text) [SP body-ext-1part] body-type-basic = media-basic SP body-fields ; MESSAGE subtype MUST NOT be "RFC822" body-type-mpart = 1*body SP media-subtype [SP body-ext-mpart] body-type-msg = media-message SP body-fields SP envelope SP body SP body-fld-lines body-type-text = media-text SP body-fields SP body-fld-lines capability = ("AUTH=" auth-type) / atom ; New capabilities MUST begin with "X" or be ; registered with IANAof messages in the mailbox. This response occurs asstandarda result of a SELECT or; standards-track Crispin [Page 78] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 capability-data = "CAPABILITY" *(SP capability) SP "IMAP4rev1" *(SP capability) ; ServersEXAMINE command, and if the size of the mailbox changes (e.g., new messages). The update from the EXISTS response MUSTimplementbe recorded by theSTARTTLS, AUTH=PLAIN, ; and LOGINDISABLED capabilities ; Servers which offerclient. Example: S: * 23 EXISTS Crispin Standards Track [Page 71] RFC1730 compatibility MUST ; list "IMAP4" as3501 IMAPv4 March 2003 7.3.2. RECENT Response Contents: none The RECENT response reports thefirst capability. CHAR8 = %x01-ff ; any OCTET except NUL, %x00 command = tag SP (command-any / command-auth / command-nonauth / command-select) CRLF ; Modal based on state command-any = "CAPABILITY" / "LOGOUT" / "NOOP" / x-command ; Valid in all states command-auth = append / create / delete / examine / list / lsub / rename / select / status / subscribe / unsubscribe ; Valid only in Authenticated or Selected state command-nonauth = login / authenticate / "STARTTLS" ; Valid only when in Not Authenticated state command-select = "CHECK" / "CLOSE" / "EXPUNGE" / copy / fetch / store / uid / search ; Valid only when in Selected state continue-req = "+" SP (resp-text / base64) CRLF copy = "COPY" SP sequence-set SP mailbox create = "CREATE" SP mailbox ; Usenumber ofINBOX givesmessages with the \Recent flag set. This response occurs as aNO error date = date-text / DQUOTE date-text DQUOTE date-day = 1*2DIGIT ; Dayresult ofmonth date-day-fixed = (SP DIGIT) / 2DIGIT ; Fixed-format versiona SELECT or EXAMINE command, and if the size ofdate-day date-month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec" date-text = date-day "-" date-month "-" date-year Crispin [Page 79] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 date-year = 4DIGIT date-time = DQUOTE date-day-fixed "-" date-month "-" date-year SP time SP zone DQUOTE delete = "DELETE" SPthe mailbox; Usechanges (e.g., new messages). Note: It is not guaranteed that the message sequence numbers ofINBOX givesrecent messages will be aNO error digit-nz = %x31-39 ; 1-9 envelope = "(" env-date SP env-subject SP env-from SP env-sender SP env-reply-to SP env-to SP env-cc SP env-bcc SP env-in-reply-to SP env-message-id ")" env-bcc = "(" 1*address ")" / nil env-cc = "(" 1*address ")" / nil env-date = nstring env-from = "(" 1*address ")" / nil env-in-reply-to = nstring env-message-id = nstring env-reply-to = "(" 1*address ")" / nil env-sender = "(" 1*address ")" / nil env-subject = nstring env-to = "(" 1*address ")" / nil examine = "EXAMINE" SPcontiguous range of the highest n messages in the mailboxfetch = "FETCH" SP sequence-set SP ("ALL" / "FULL" / "FAST" / fetch-att / "(" fetch-att *(SP fetch-att) ")") fetch-att = "ENVELOPE" / "FLAGS" / "INTERNALDATE" / "RFC822" [".HEADER" / ".SIZE" / ".TEXT"] / "BODY" ["STRUCTURE"] / "UID" / "BODY" [".PEEK"] section ["<" number "." nz-number ">"] flag = "\Answered" / "\Flagged" / "\Deleted" / "\Seen" / "\Draft" / flag-keyword / flag-extension ; Does not include "\Recent" Crispin [Page 80] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 flag-extension = "\" atom ; Future expansion. Client implementations ; MUST accept flag-extension flags. Server ; implementations MUST NOT generate ; flag-extension flags except as defined(where n is the value reported by; future standard or standards-track ; revisions of this specification. flag-fetch = flag / "\Recent" flag-keyword = atom flag-list = "(" [flag *(SP flag)] ")" flag-perm = flag / "\*" greeting = "*" SP (resp-cond-auth / resp-cond-bye) CRLF header-fld-name = astring header-list = "(" header-fld-name *(SP header-fld-name) ")" list = "LIST" SP mailbox SP list-mailbox list-mailbox = 1*list-char / string list-char = ATOM-CHAR / list-wildcards / resp-specials list-wildcards = "%" / "*" literal = "{" number "}" CRLF *CHAR8 ; Number representsthenumberRECENT response). Examples ofCHAR8s login = "LOGIN" SP userid SP password lsub = "LSUB" SP mailbox SP list-mailbox mailbox = "INBOX" / astring ; INBOXsituations in which this iscase-insensitive. Allnot the casevariants of ; INBOX (e.g. "iNbOx") MUSTare: multiple clients having the same mailbox open (the first session to beinterpretednotified will see it asINBOX ; notrecent, others will probably see it asan astring. An astring which consists of ;non-recent), and when thecase-insensitive sequence "I" "N" "B" "O" "X" ;mailbox isconsideredre-ordered by a non-IMAP agent. The only reliable way tobe INBOX and not an astring. ; Referidentify recent messages is tosection 5.1 for further ; semantic details of mailbox names. Crispin [Page 81] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 mailbox-data = "FLAGS" SP flag-list / "LIST" SP mailbox-list / "LSUB" SP mailbox-list / "SEARCH" *(SP nz-number) / "STATUS" SP mailbox SP "(" [status-att SPlook at message flags to see which have the \Recent flag set, or to do a SEARCH RECENT. The update from the RECENT response MUST be recorded by the client. Example: S: * 5 RECENT 7.4. Server Responses - Message Status These responses are always untagged. This is how message data are transmitted from the server to the client, often as a result of a command with the same name. Immediately following the "*" token is a number*(SP status-att SP number)] ")" /that represents a message sequence number. 7.4.1. EXPUNGE Response Contents: none The EXPUNGE response reports that the specified message sequence numberSP "EXISTS" /has been permanently removed from the mailbox. The message sequence numberSP "RECENT" mailbox-list = "(" [mbx-list-flags] ")" SP (DQUOTE QUOTED-CHAR DQUOTE / nil) SPfor each successive message in the mailboxmbx-list-flags = *(mbx-list-oflag SP) mbx-list-sflag *(SP mbx-list-oflag) / mbx-list-oflag *(SP mbx-list-oflag) mbx-list-oflag = "\Noinferiors" / flag-extension ; Other flags; multiple possible per LIST response mbx-list-sflag = "\Noselect" / "\Marked" / "\Unmarked" ; Selectability flags; only one per LIST response media-basic = ((DQUOTE ("APPLICATION" / "AUDIO" / "IMAGE" / "MESSAGE" / "VIDEO") DQUOTE) / string) SP media-subtype ; Definedis immediately decremented by 1, and this decrement is reflected in[MIME-IMT] media-message = DQUOTE "MESSAGE" DQUOTE SP DQUOTE "RFC822" DQUOTE ; Definedmessage sequence numbers in[MIME-IMT] media-subtype = string ; Definedsubsequent responses (including other untagged EXPUNGE responses). Crispin Standards Track [Page 72] RFC 3501 IMAPv4 March 2003 The EXPUNGE response also decrements the number of messages in[MIME-IMT] media-text = DQUOTE "TEXT" DQUOTE SP media-subtype ; Definedthe mailbox; it is not necessary to send an EXISTS response with the new value. As a result of the immediate decrement rule, message sequence numbers that appear in[MIME-IMT] message-data = nz-number SP ("EXPUNGE" / ("FETCH" SP msg-att)) msg-att = "(" (msg-att-dynamic / msg-att-static) *(SP (msg-att-dynamic / msg-att-static)) ")" msg-att-dynamic = "FLAGS" SP "(" [flag-fetch *(SP flag-fetch)] ")" ; MAY change fora set of successive EXPUNGE responses depend upon whether the messages are removed starting from lower numbers to higher numbers, or from higher numbers to lower numbers. For example, if the last 5 messages in a 9-message mailbox are expunged, a "lower to higher" server will send five untagged EXPUNGE responses for messagemsg-att-static = "ENVELOPE" SP envelope / "INTERNALDATE" SP date-time / "RFC822" [".HEADER" / ".TEXT"] SP nstring / "RFC822.SIZE" SP number / "BODY" ["STRUCTURE"] SP body / "BODY" section ["<"sequence number">"] SP nstring / "UID" SP uniqueid ;5, whereas a "higher to lower server" will send successive untagged EXPUNGE responses for message sequence numbers 9, 8, 7, 6, and 5. An EXPUNGE response MUST NOTchange forbe sent when no command is in progress, nor while responding to a FETCH, STORE, or SEARCH command. This rule is necessary to prevent a loss of synchronization of messagenil = "NIL" Crispin [Page 82] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 nstring = string / nil number = 1*DIGIT ; Unsigned 32-bit integer ; (0 <= n < 4,294,967,296) nz-number = digit-nz *DIGIT ; Non-zero unsigned 32-bit integer ; (0 < n < 4,294,967,296) password = astring quoted = DQUOTE *QUOTED-CHAR DQUOTE QUOTED-CHAR = <any TEXT-CHAR except quoted-specials> / "\" quoted-specials quoted-specials = DQUOTE / "\" rename = "RENAME" SP mailbox SP mailbox ; Usesequence numbers between client and server. A command is not "in progress" until the complete command has been received; in particular, a command is not "in progress" during the negotiation ofINBOX ascommand continuation. Note: UID FETCH, UID STORE, and UID SEARCH are different commands from FETCH, STORE, and SEARCH. An EXPUNGE response MAY be sent during adestination givesUID command. The update from the EXPUNGE response MUST be recorded by the client. Example: S: * 44 EXPUNGE 7.4.2. FETCH Response Contents: message data The FETCH response returns data about aNO errormessage to the client. The data are pairs of data item names and their values in parentheses. This response= *(continue-req / response-data) response-done response-data = "*" SP (resp-cond-state / resp-cond-bye / mailbox-data / message-data / capability-data) CRLF response-done = response-tagged / response-fatal response-fatal = "*" SP resp-cond-bye CRLF ; Server closes connection immediately response-tagged = tag SP resp-cond-state CRLF resp-cond-auth = ("OK" / "PREAUTH") SP resp-text ; Authentication condition resp-cond-bye = "BYE" SP resp-text resp-cond-state = ("OK" / "NO" / "BAD") SP resp-text ; Status condition resp-specials = "]" resp-text = ["[" resp-text-code "]" SP] textoccurs as the result of a FETCH or STORE command, as well as by unilateral server decision (e.g., flag updates). The current data items are: BODY A form of BODYSTRUCTURE without extension data. Crispin Standards Track [Page83] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April73] RFC 3501 IMAPv4 March 2003resp-text-code = "ALERT" / "BADCHARSET" [SP "(" astring *(SP astring) ")" ] / capability-data / "PARSE" / "PERMANENTFLAGS" SP "(" [flag-perm *(SP flag-perm)] ")" / "READ-ONLY" / "READ-WRITE" / "TRYCREATE" / "UIDNEXT" SP nz-number / "UIDVALIDITY" SP nz-number / "UNSEEN" SP nz-number / atom [SP 1*<any TEXT-CHAR except "]">] search = "SEARCH" [SP "CHARSET" SP astring] 1*(SP search-key) ; CHARSET argumentBODY[<section>]<<origin octet>> A string expressing the body contents of the specified section. The string SHOULD be interpreted by the client according to the content transfer encoding, body type, and subtype. If the origin octet is specified, this string is a substring of the entire body contents, starting at that origin octet. This means that BODY[]<0> MAY be truncated, but BODY[] is NEVER truncated. Note: The origin octet facility MUST NOT beregistered with IANA search-key = "ALL" / "ANSWERED" / "BCC" SP astring / "BEFORE" SP date / "BODY" SP astring / "CC" SP astring / "DELETED" / "FLAGGED" / "FROM" SP astring / "KEYWORD" SP flag-keyword / "NEW" / "OLD" / "ON" SP date / "RECENT" / "SEEN" / "SINCE" SP date / "SUBJECT" SP astring / "TEXT" SP astring / "TO" SP astring / "UNANSWERED" / "UNDELETED" / "UNFLAGGED" / "UNKEYWORD" SP flag-keyword / "UNSEEN" / ; Above this line wereused by a server in[IMAP2] "DRAFT" / "HEADER" SP header-fld-name SP astring / "LARGER" SP number / "NOT" SP search-key / "OR" SP search-key SP search-key / "SENTBEFORE" SP date / "SENTON" SP date / "SENTSINCE" SP date / "SMALLER" SP number / "UID" SP sequence-set / "UNDRAFT" / sequence-set / "(" search-key *(SP search-key) ")" section = "[" [section-spec] "]" section-msgtext = "HEADER" / "HEADER.FIELDS" [".NOT"] SP header-list / "TEXT" ; top-level or MESSAGE/RFC822 part section-part = nz-number *("." nz-number) ; body part nesting section-spec = section-msgtext / (section-part ["." section-text]) section-text = section-msgtext / "MIME" ; text other than actual body part (headers, etc.) select = "SELECT" SP mailbox Crispin [Page 84] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 seq-number = nz-number / "*" ; message sequence number (COPY, FETCH, STORE ; commands) or unique identifier (UID COPY, ; UID FETCH, UID STORE commands). ; * represents the largest number in use. In ;a FETCH response unless thecase of message sequence numbers,client specifically requested itis ; the numberby means ofmessages inanon-empty mailbox. ; In the caseFETCH ofunique identifiers, ita BODY[<section>]<<partial>> data item. 8-bit textual data isthe ; uniquepermitted if a [CHARSET] identifier is part of thelast messagebody parameter parenthesized list for this section. Note that headers (part specifiers HEADER or MIME, or the header portion of a MESSAGE/RFC822 part), MUST be 7-bit; 8-bit characters are not permitted in headers. Note also that the; mailbox or, if[RFC-2822] delimiting blank line between themailbox is empty,header and the; mailbox's current UIDNEXT value. ; The server should respond with a tagged BAD ; response to a command that uses a message ; sequence number greater thanbody is not affected by header line subsetting; thenumberblank line is always included as part of; messagesheader data, except in theselected mailbox. This ; includes "*" if the selected mailbox is empty. seq-range = seq-number ":" seq-number ; two seq-number values and all values between ; these two regardlesscase oforder. ; Example: 2:4 and 4:2 are equivalent and indicate ; values 2, 3,a message which has no body and4. ; Example:no blank line. Non-textual data such as binary data MUST be transfer encoded into aunique identifer sequence range of ; 3291:* includestextual form, such as BASE64, prior to being sent to theUID ofclient. To derive thelast message in ;original binary data, themailbox, even ifclient MUST decode the transfer encoded string. BODYSTRUCTURE A parenthesized list thatvalue is less than 3291. sequence-set = (seq-number / seq-range) / *("," sequence-set) ; set of seq-number values, regardlessdescribes the [MIME-IMB] body structure oforder. ; Servers MAY coalesce overlaps and/or executea message. This is computed by the; sequence in any order. ; Example:server by parsing the [MIME-IMB] header fields, defaulting various fields as necessary. For example, a simple text messagesequence number setof2,4:7,9,12:* ; for48 lines and 2279 octets can have amailbox with 15 messagesbody structure of: ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 2279 48) Multiple parts are indicated by parenthesis nesting. Instead of a body type as the first element of the parenthesized list, there isequivalent to ; 2,4,5,6,7,9,12,13,14,15 ; Example:amessagesequencenumber setof*:4,5:7 ; for a mailbox with 10 messagesone or more nested body structures. The second element of the parenthesized list isequivalent to ; 10,9,8,7,6,5,4,5,6,7 and MAY be reordered and ; overlap coalesced to be 4,5,6,7,8,9,10. status = "STATUS" SP mailbox SP "(" status-att *(SP status-att) ")" status-att = "MESSAGES" / "RECENT" / "UIDNEXT" / "UIDVALIDITY" / "UNSEEN" store = "STORE" SP sequence-set SP store-att-flags store-att-flags = (["+" / "-"] "FLAGS" [".SILENT"]) SP (flag-list / (flag *(SP flag)))the multipart subtype (mixed, digest, parallel, alternative, etc.). Crispin Standards Track [Page85] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April74] RFC 3501 IMAPv4 March 2003string = quoted / literal subscribe = "SUBSCRIBE" SP mailbox tag = 1*<any ASTRING-CHAR except "+"> text = 1*TEXT-CHAR TEXT-CHAR = <any CHAR except CR and LF> time = 2DIGIT ":" 2DIGIT ":" 2DIGIT ; Hours minutes seconds uid = "UID" SP (copy / fetch / search / store) ; Unique identifiers used instead ofFor example, a two part message; sequence numbers uniqueid = nz-number ; Strictly ascending unsubscribe = "UNSUBSCRIBE" SP mailbox userid = astring x-command = "X" atom <experimental command arguments> zone = ("+" / "-") 4DIGIT ; Signed four-digit valueconsisting ofhhmm representing ; hoursa text andminutes east of Greenwich (that is, ; the amount that the given time differs from ; Universal Time). Subtractinga BASE64-encoded text attachment can have a body structure of: (("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 1152 23)("TEXT" "PLAIN" ("CHARSET" "US-ASCII" "NAME" "cc.diff") "<960723163407.20117h@cac.washington.edu>" "Compiler diff" "BASE64" 4554 73) "MIXED") Extension data follows thetimezone ; frommultipart subtype. Extension data is never returned with thegiven time will giveBODY fetch, but can be returned with a BODYSTRUCTURE fetch. Extension data, if present, MUST be in theUT form. ;defined order. TheUniversal Time zone is "+0000". Crispin [Page 86] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 10. Author's Note This document is a revision or rewriteextension data ofearlier documents, and supercedes the protocol specification in those documents: RFC 2060, RFC 1730, unpublished IMAP2bis.TXT document, RFC 1176, and RFC 1064. 11. Security Considerations IMAP4rev1 protocol transactions, including electronic mail data,a multipart body part aresentin theclear over the network unless protection from snoopingfollowing order: body parameter parenthesized list A parenthesized list of attribute/value pairs [e.g., ("foo" "bar" "baz" "rag") where "bar" isnegotiated, either bytheusevalue ofSTARTTLS, privacy protection"foo", and "rag" isnegotiated intheAUTHENTICATE command, or some other protection mechanism is in effect. 11.1. STARTTLS Security Considerations The specificationvalue ofthe STARTTLS command and LOGINDISABLED capability"baz"] as defined inthis document replaces that[MIME-IMB]. body disposition A parenthesized list, consisting of a disposition type string, followed by a parenthesized list of disposition attribute/value pairs as defined in[IMAP-TLS]. [IMAP-TLS] remains normative for the PLAIN [SASL] authenticator. IMAP client and server implementations MUST implement[DISPOSITION]. body language A string or parenthesized list giving theTLS_RSA_WITH_RC4_128_MD5 [TLS] cipher suit, and SHOULD implementbody language value as defined in [LANGUAGE-TAGS]. body location A string list giving theTLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA [TLS] cipher suite. This is importantbody content URI asit assures that any two compliant implementations can be configured to interoperate. All other cipher suitesdefined in [LOCATION]. Any following extension data areOPTIONAL. Note thatnot yet defined in thisis a change from section 2.1version of[IMAP-TLS]. Duringthe[TLS] negotiation, the client MUST check its understandingprotocol. Such extension data can consist ofthe server hostname against the server's identity as presented in the server Certificate message, in order to prevent man-in-the-middle attacks. If the match fails, the client SHOULD either ask for explicit user confirmation,zero orterminate the connection and indicate the server's identity is suspect. Matching is performed accordingmore NILs, strings, numbers, or potentially nested parenthesized lists of such data. Client implementations that do a BODYSTRUCTURE fetch MUST be prepared tothese rules: The clientaccept such extension data. Server implementations MUSTuse the server hostnameNOT send such extension data until itused to open the connection ashas been defined by a revision of this protocol. The basic fields of a non-multipart body part are in thevalue to compare againstfollowing order: body type A string giving theservercontent media type name asexpresseddefined in [MIME-IMB]. Crispin Standards Track [Page 75] RFC 3501 IMAPv4 March 2003 body subtype A string giving theserver certificate. The client MUST NOT use any formcontent subtype name as defined in [MIME-IMB]. body parameter parenthesized list A parenthesized list ofthe server hostname derived from an insecure remote source (e.g., insecure DNS lookup). CNAME canonicalizationattribute/value pairs [e.g., ("foo" "bar" "baz" "rag") where "bar" isnot done. If a subjectAltName extensionthe value oftype dNSName"foo" and "rag" ispresent in the certificate, it SHOULD be used asthesourcevalue ofthe server's identity. Matching is case-insensitive. Crispin [Page 87] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 A "*" wildcard character MAY be used"baz"] as defined in [MIME-IMB]. body id A string giving theleft-most name componentcontent id as defined in [MIME-IMB]. body description A string giving thecertificate. For example, *.example.com would match a.example.com, foo.example.com, etc. but would not match example.com. Ifcontent description as defined in [MIME-IMB]. body encoding A string giving thecertificate contains multiple names (e.g. more than one dNSName field), then a match with any onecontent transfer encoding as defined in [MIME-IMB]. body size A number giving the size of thefieldsbody in octets. Note that this size isconsidered acceptable. Boththeclientsize in its transfer encoding andserver MUST checknot theresultresulting size after any decoding. A body type of type MESSAGE and subtype RFC822 contains, immediately after theSTARTTLS commandbasic fields, the envelope structure, body structure, andsubsequent [TLS] negotiation to see whether acceptable authentication or privacy was achieved. 11.2. Other Security Considerationssize in text lines of the encapsulated message. Aserver error message for an AUTHENTICATE command which fails due to invalid credentials SHOULD NOT detail whybody type of type TEXT contains, immediately after thecredentials are invalid. Usebasic fields, the size of theLOGIN command sends passwordsbody in text lines. Note that this size is theclear. Thissize in its content transfer encoding and not the resulting size after any decoding. Extension data follows the basic fields and the type-specific fields listed above. Extension data is never returned with the BODY fetch, but can beavoided by using the AUTHENTICATE commandreturned with a[SASL] mechanism that does not use plaintext passwords, by first negotiating encryption via STARTTLS or some other protection mechanism. A server implementationBODYSTRUCTURE fetch. Extension data, if present, MUSTimplement a configurationbe inwhich, atthetime of authentication, requires that: (1)defined order. TheSTARTTLS command command has been negotiated. OR (2) Some other mechanism that protects the session from password snooping has been provided. OR (3) The following measures are in place: (a) The LOGINDISABLED capability is advertised, and [SASL] mechanisms (such as PLAIN) which use plaintext passwordsextension data of a non-multipart body part areNOT advertisedin theCAPABILITY list. AND (b) The LOGIN command returns an error even if the password is correct. AND (c) The AUTHENTICATE command returns an error with all [SASL] mechanisms which use plaintext passwords, even if the password is correct.following order: body MD5 Aserver error message for a failing LOGIN command SHOULD NOT specify thatstring giving theuser name,body MD5 value asopposed to the password, is invalid. A server SHOULD have mechanismsdefined inplace to limit or delay failed AUTHENTICATE/LOGIN attempts.[MD5]. Crispin Standards Track [Page88] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April76] RFC 3501 IMAPv4 March 2003Additional security considerations are discussed in the section discussingbody disposition A parenthesized list with theAUTHENTICATEsame content andLOGIN commands. 12. IANA Considerations IMAP4 capabilities are registered by publishingfunction as the body disposition for astandards trackmultipart body part. body language A string orIESG approved experimental RFC. The registry is currently located at: http://www.iana.org/assignments/imap4-capabilities As this specification revisesparenthesized list giving theSTARTTLS and LOGINDISABLED extensions previouslybody language value as defined in[IMAP-TLS],[LANGUAGE-TAGS]. body location A string list giving theregistry will be updated accordingly. 13. Author's Address Mark R. Crispin Networks and Distributed Computing Universitybody content URI as defined in [LOCATION]. Any following extension data are not yet defined in this version ofWashington 4545 15th Avenue NE Seattle, WA 98105-4527 Phone: (206) 543-5762 EMail: MRC@CAC.Washington.EDU Crispin [Page 89] INTERNET-DRAFT IMAP4rev1 EXPIRES 1 April 2003 Appendices A. Referencesthe protocol, and would be as described above under multipart extension data. ENVELOPE A parenthesized list that describes the envelope structure of a message. This is computed by the server by parsing the [RFC-2822] header into the component parts, defaulting various fields as necessary. Thefollowing documents contain definitions or specifications whichfields of the envelope structure arenecessary to understand this document properly: [ABNF] Crocker, D.,in the following order: date, subject, from, sender, reply-to, to, cc, bcc, in-reply-to, andOverell, P. "Augmented BNF for Syntax Specifications: ABNF", RFC 2234, November 1997. [ANONYMOUS] Newman, C. "Anonymous SASL Mechanism", RFC 2245, November 1997. [CHARSET] Freed, N.,message-id. The date, subject, in-reply-to, andPostel, J. "IANA Character Set Registration Procedures", RFC 2978, October 2000. [DIGEST-MD5] Leach, P.,message-id fields are strings. The from, sender, reply-to, to, cc, andNewman, C. "Using Digest Authentication asbcc fields are parenthesized lists of address structures. An address structure is aSASL Mechanism", RFC 2831, May 2000. [DISPOSITION] Troost, R., Dorner, S., and Moore, K. "Communicating Presentation Information in Internet Messages:parenthesized list that describes an electronic mail address. TheContent-Disposition Header", RFC 2183, August 1997. [IMAP-TLS] Newman, C. "Using TLS with IMAP, POP3 and ACAP", RFC 2595, June 1999. [KEYWORDS] Bradner, S. "Key words for usefields of an address structure are inRFCs to Indicate Requirement Levels", RFC 2119, Harvard University, March 1997. [LANGUAGE-TAGS] Alvestrand, H. "Tags fortheIdentification of Languages", RFC 1766, March 1995. [LOCATION] Palme, J., Hopmann, A., and Shelness, N. "MIME Encapsulationfollowing order: personal name, [SMTP] at-domain-list (source route), mailbox name, and host name. [RFC-2822] group syntax is indicated by a special form ofAggregate Documents, such as HTML (MHTML)",address structure in which the host name field is NIL. If the mailbox name field is also NIL, this is an end of group marker (semi-colon in RFC2557, March 1999. [MD5] Myers, J.,822 syntax). If the mailbox name field is non-NIL, this is a start of group marker, andRose, M. "The Content-MD5 Header Field", RFC 1864, October 1995. [MIME-HDRS] Moore, K. "MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text", RFC 2047, November 1996. [MIME-IMB] Freed, N.,the mailbox name field holds the group name phrase. If the Date, Subject, In-Reply-To, andBorenstein, N. "MIME (Multipurpose Internet Mail Extensions) Part One: FormatMessage-ID header lines are absent in the [RFC-2822] header, the corresponding member of