rfc3501.txt - rohrpost - A commandline mail client to change the world as we see it.
 (HTM) git clone git://r-36.net/rohrpost
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       rfc3501.txt (227639B)
       ---
            1 
            2 
            3 
            4 
            5 
            6 
            7 Network Working Group                                         M. Crispin
            8 Request for Comments: 3501                      University of Washington
            9 Obsoletes: 2060                                               March 2003
           10 Category: Standards Track
           11 
           12 
           13             INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
           14 
           15 Status of this Memo
           16 
           17    This document specifies an Internet standards track protocol for the
           18    Internet community, and requests discussion and suggestions for
           19    improvements.  Please refer to the current edition of the "Internet
           20    Official Protocol Standards" (STD 1) for the standardization state
           21    and status of this protocol.  Distribution of this memo is unlimited.
           22 
           23 Copyright Notice
           24 
           25    Copyright (C) The Internet Society (2003).  All Rights Reserved.
           26 
           27 Abstract
           28 
           29    The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1)
           30    allows a client to access and manipulate electronic mail messages on
           31    a server.  IMAP4rev1 permits manipulation of mailboxes (remote
           32    message folders) in a way that is functionally equivalent to local
           33    folders.  IMAP4rev1 also provides the capability for an offline
           34    client to resynchronize with the server.
           35 
           36    IMAP4rev1 includes operations for creating, deleting, and renaming
           37    mailboxes, checking for new messages, permanently removing messages,
           38    setting and clearing flags, RFC 2822 and RFC 2045 parsing, searching,
           39    and selective fetching of message attributes, texts, and portions
           40    thereof.  Messages in IMAP4rev1 are accessed by the use of numbers.
           41    These numbers are either message sequence numbers or unique
           42    identifiers.
           43 
           44    IMAP4rev1 supports a single server.  A mechanism for accessing
           45    configuration information to support multiple IMAP4rev1 servers is
           46    discussed in RFC 2244.
           47 
           48    IMAP4rev1 does not specify a means of posting mail; this function is
           49    handled by a mail transfer protocol such as RFC 2821.
           50 
           51 
           52 
           53 
           54 
           55 
           56 
           57 
           58 Crispin                     Standards Track                     [Page 1]
           59 
           60 RFC 3501                         IMAPv4                       March 2003
           61 
           62 
           63 Table of Contents
           64 
           65    IMAP4rev1 Protocol Specification ................................  4
           66    1.      How to Read This Document ...............................  4
           67    1.1.    Organization of This Document ...........................  4
           68    1.2.    Conventions Used in This Document .......................  4
           69    1.3.    Special Notes to Implementors ...........................  5
           70    2.      Protocol Overview .......................................  6
           71    2.1.    Link Level ..............................................  6
           72    2.2.    Commands and Responses ..................................  6
           73    2.2.1.  Client Protocol Sender and Server Protocol Receiver .....  6
           74    2.2.2.  Server Protocol Sender and Client Protocol Receiver .....  7
           75    2.3.    Message Attributes ......................................  8
           76    2.3.1.  Message Numbers .........................................  8
           77    2.3.1.1.        Unique Identifier (UID) Message Attribute .......  8
           78    2.3.1.2.        Message Sequence Number Message Attribute ....... 10
           79    2.3.2.  Flags Message Attribute ................................. 11
           80    2.3.3.  Internal Date Message Attribute ......................... 12
           81    2.3.4.  [RFC-2822] Size Message Attribute ....................... 12
           82    2.3.5.  Envelope Structure Message Attribute .................... 12
           83    2.3.6.  Body Structure Message Attribute ........................ 12
           84    2.4.    Message Texts ........................................... 13
           85    3.      State and Flow Diagram .................................. 13
           86    3.1.    Not Authenticated State ................................. 13
           87    3.2.    Authenticated State ..................................... 13
           88    3.3.    Selected State .......................................... 13
           89    3.4.    Logout State ............................................ 14
           90    4.      Data Formats ............................................ 16
           91    4.1.    Atom .................................................... 16
           92    4.2.    Number .................................................. 16
           93    4.3.    String .................................................. 16
           94    4.3.1.  8-bit and Binary Strings ................................ 17
           95    4.4.    Parenthesized List ...................................... 17
           96    4.5.    NIL ..................................................... 17
           97    5.      Operational Considerations .............................. 18
           98    5.1.    Mailbox Naming .......................................... 18
           99    5.1.1.  Mailbox Hierarchy Naming ................................ 19
          100    5.1.2.  Mailbox Namespace Naming Convention ..................... 19
          101    5.1.3.  Mailbox International Naming Convention ................. 19
          102    5.2.    Mailbox Size and Message Status Updates ................. 21
          103    5.3.    Response when no Command in Progress .................... 21
          104    5.4.    Autologout Timer ........................................ 22
          105    5.5.    Multiple Commands in Progress ........................... 22
          106    6.      Client Commands ........................................  23
          107    6.1.    Client Commands - Any State ............................  24
          108    6.1.1.  CAPABILITY Command .....................................  24
          109    6.1.2.  NOOP Command ...........................................  25
          110    6.1.3.  LOGOUT Command .........................................  26
          111 
          112 
          113 
          114 Crispin                     Standards Track                     [Page 2]
          115 
          116 RFC 3501                         IMAPv4                       March 2003
          117 
          118 
          119    6.2.    Client Commands - Not Authenticated State ..............  26
          120    6.2.1.  STARTTLS Command .......................................  27
          121    6.2.2.  AUTHENTICATE Command ...................................  28
          122    6.2.3.  LOGIN Command ..........................................  30
          123    6.3.    Client Commands - Authenticated State ..................  31
          124    6.3.1.  SELECT Command .........................................  32
          125    6.3.2.  EXAMINE Command ........................................  34
          126    6.3.3.  CREATE Command .........................................  34
          127    6.3.4.  DELETE Command .........................................  35
          128    6.3.5.  RENAME Command .........................................  37
          129    6.3.6.  SUBSCRIBE Command ......................................  39
          130    6.3.7.  UNSUBSCRIBE Command ....................................  39
          131    6.3.8.  LIST Command ...........................................  40
          132    6.3.9.  LSUB Command ...........................................  43
          133    6.3.10. STATUS Command .........................................  44
          134    6.3.11. APPEND Command .........................................  46
          135    6.4.    Client Commands - Selected State .......................  47
          136    6.4.1.  CHECK Command ..........................................  47
          137    6.4.2.  CLOSE Command ..........................................  48
          138    6.4.3.  EXPUNGE Command ........................................  49
          139    6.4.4.  SEARCH Command .........................................  49
          140    6.4.5.  FETCH Command ..........................................  54
          141    6.4.6.  STORE Command ..........................................  58
          142    6.4.7.  COPY Command ...........................................  59
          143    6.4.8.  UID Command ............................................  60
          144    6.5.    Client Commands - Experimental/Expansion ...............  62
          145    6.5.1.  X<atom> Command ........................................  62
          146    7.      Server Responses .......................................  62
          147    7.1.    Server Responses - Status Responses ....................  63
          148    7.1.1.  OK Response ............................................  65
          149    7.1.2.  NO Response ............................................  66
          150    7.1.3.  BAD Response ...........................................  66
          151    7.1.4.  PREAUTH Response .......................................  67
          152    7.1.5.  BYE Response ...........................................  67
          153    7.2.    Server Responses - Server and Mailbox Status ...........  68
          154    7.2.1.  CAPABILITY Response ....................................  68
          155    7.2.2.  LIST Response ..........................................  69
          156    7.2.3.  LSUB Response ..........................................  70
          157    7.2.4   STATUS Response ........................................  70
          158    7.2.5.  SEARCH Response ........................................  71
          159    7.2.6.  FLAGS Response .........................................  71
          160    7.3.    Server Responses - Mailbox Size ........................  71
          161    7.3.1.  EXISTS Response ........................................  71
          162    7.3.2.  RECENT Response ........................................  72
          163    7.4.    Server Responses - Message Status ......................  72
          164    7.4.1.  EXPUNGE Response .......................................  72
          165    7.4.2.  FETCH Response .........................................  73
          166    7.5.    Server Responses - Command Continuation Request ........  79
          167 
          168 
          169 
          170 Crispin                     Standards Track                     [Page 3]
          171 
          172 RFC 3501                         IMAPv4                       March 2003
          173 
          174 
          175    8.      Sample IMAP4rev1 connection ............................  80
          176    9.      Formal Syntax ..........................................  81
          177    10.     Author's Note ..........................................  92
          178    11.     Security Considerations ................................  92
          179    11.1.   STARTTLS Security Considerations .......................  92
          180    11.2.   Other Security Considerations ..........................  93
          181    12.     IANA Considerations ....................................  94
          182    Appendices .....................................................  95
          183    A.      References .............................................  95
          184    B.      Changes from RFC 2060 ..................................  97
          185    C.      Key Word Index ......................................... 103
          186    Author's Address ............................................... 107
          187    Full Copyright Statement ....................................... 108
          188 
          189 IMAP4rev1 Protocol Specification
          190 
          191 1.      How to Read This Document
          192 
          193 1.1.    Organization of This Document
          194 
          195    This document is written from the point of view of the implementor of
          196    an IMAP4rev1 client or server.  Beyond the protocol overview in
          197    section 2, it is not optimized for someone trying to understand the
          198    operation of the protocol.  The material in sections 3 through 5
          199    provides the general context and definitions with which IMAP4rev1
          200    operates.
          201 
          202    Sections 6, 7, and 9 describe the IMAP commands, responses, and
          203    syntax, respectively.  The relationships among these are such that it
          204    is almost impossible to understand any of them separately.  In
          205    particular, do not attempt to deduce command syntax from the command
          206    section alone; instead refer to the Formal Syntax section.
          207 
          208 1.2.    Conventions Used in This Document
          209 
          210    "Conventions" are basic principles or procedures.  Document
          211    conventions are noted in this section.
          212 
          213    In examples, "C:" and "S:" indicate lines sent by the client and
          214    server respectively.
          215 
          216    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
          217    "SHOULD", "SHOULD NOT", "MAY", and "OPTIONAL" in this document are to
          218    be interpreted as described in [KEYWORDS].
          219 
          220    The word "can" (not "may") is used to refer to a possible
          221    circumstance or situation, as opposed to an optional facility of the
          222    protocol.
          223 
          224 
          225 
          226 Crispin                     Standards Track                     [Page 4]
          227 
          228 RFC 3501                         IMAPv4                       March 2003
          229 
          230 
          231    "User" is used to refer to a human user, whereas "client" refers to
          232    the software being run by the user.
          233 
          234    "Connection" refers to the entire sequence of client/server
          235    interaction from the initial establishment of the network connection
          236    until its termination.
          237 
          238    "Session" refers to the sequence of client/server interaction from
          239    the time that a mailbox is selected (SELECT or EXAMINE command) until
          240    the time that selection ends (SELECT or EXAMINE of another mailbox,
          241    CLOSE command, or connection termination).
          242 
          243    Characters are 7-bit US-ASCII unless otherwise specified.  Other
          244    character sets are indicated using a "CHARSET", as described in
          245    [MIME-IMT] and defined in [CHARSET].  CHARSETs have important
          246    additional semantics in addition to defining character set; refer to
          247    these documents for more detail.
          248 
          249    There are several protocol conventions in IMAP.  These refer to
          250    aspects of the specification which are not strictly part of the IMAP
          251    protocol, but reflect generally-accepted practice.  Implementations
          252    need to be aware of these conventions, and avoid conflicts whether or
          253    not they implement the convention.  For example, "&" may not be used
          254    as a hierarchy delimiter since it conflicts with the Mailbox
          255    International Naming Convention, and other uses of "&" in mailbox
          256    names are impacted as well.
          257 
          258 1.3.    Special Notes to Implementors
          259 
          260    Implementors of the IMAP protocol are strongly encouraged to read the
          261    IMAP implementation recommendations document [IMAP-IMPLEMENTATION] in
          262    conjunction with this document, to help understand the intricacies of
          263    this protocol and how best to build an interoperable product.
          264 
          265    IMAP4rev1 is designed to be upwards compatible from the [IMAP2] and
          266    unpublished IMAP2bis protocols.  IMAP4rev1 is largely compatible with
          267    the IMAP4 protocol described in RFC 1730; the exception being in
          268    certain facilities added in RFC 1730 that proved problematic and were
          269    subsequently removed.  In the course of the evolution of IMAP4rev1,
          270    some aspects in the earlier protocols have become obsolete.  Obsolete
          271    commands, responses, and data formats which an IMAP4rev1
          272    implementation can encounter when used with an earlier implementation
          273    are described in [IMAP-OBSOLETE].
          274 
          275    Other compatibility issues with IMAP2bis, the most common variant of
          276    the earlier protocol, are discussed in [IMAP-COMPAT].  A full
          277    discussion of compatibility issues with rare (and presumed extinct)
          278 
          279 
          280 
          281 
          282 Crispin                     Standards Track                     [Page 5]
          283 
          284 RFC 3501                         IMAPv4                       March 2003
          285 
          286 
          287    variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is
          288    primarily of historical interest.
          289 
          290    IMAP was originally developed for the older [RFC-822] standard, and
          291    as a consequence several fetch items in IMAP incorporate "RFC822" in
          292    their name.  With the exception of RFC822.SIZE, there are more modern
          293    replacements; for example, the modern version of RFC822.HEADER is
          294    BODY.PEEK[HEADER].  In all cases, "RFC822" should be interpreted as a
          295    reference to the updated [RFC-2822] standard.
          296 
          297 2.      Protocol Overview
          298 
          299 2.1.    Link Level
          300 
          301    The IMAP4rev1 protocol assumes a reliable data stream such as that
          302    provided by TCP.  When TCP is used, an IMAP4rev1 server listens on
          303    port 143.
          304 
          305 2.2.    Commands and Responses
          306 
          307    An IMAP4rev1 connection consists of the establishment of a
          308    client/server network connection, an initial greeting from the
          309    server, and client/server interactions.  These client/server
          310    interactions consist of a client command, server data, and a server
          311    completion result response.
          312 
          313    All interactions transmitted by client and server are in the form of
          314    lines, that is, strings that end with a CRLF.  The protocol receiver
          315    of an IMAP4rev1 client or server is either reading a line, or is
          316    reading a sequence of octets with a known count followed by a line.
          317 
          318 2.2.1.  Client Protocol Sender and Server Protocol Receiver
          319 
          320    The client command begins an operation.  Each client command is
          321    prefixed with an identifier (typically a short alphanumeric string,
          322    e.g., A0001, A0002, etc.) called a "tag".  A different tag is
          323    generated by the client for each command.
          324 
          325    Clients MUST follow the syntax outlined in this specification
          326    strictly.  It is a syntax error to send a command with missing or
          327    extraneous spaces or arguments.
          328 
          329    There are two cases in which a line from the client does not
          330    represent a complete command.  In one case, a command argument is
          331    quoted with an octet count (see the description of literal in String
          332    under Data Formats); in the other case, the command arguments require
          333    server feedback (see the AUTHENTICATE command).  In either case, the
          334 
          335 
          336 
          337 
          338 Crispin                     Standards Track                     [Page 6]
          339 
          340 RFC 3501                         IMAPv4                       March 2003
          341 
          342 
          343    server sends a command continuation request response if it is ready
          344    for the octets (if appropriate) and the remainder of the command.
          345    This response is prefixed with the token "+".
          346 
          347         Note: If instead, the server detected an error in the
          348         command, it sends a BAD completion response with a tag
          349         matching the command (as described below) to reject the
          350         command and prevent the client from sending any more of the
          351         command.
          352 
          353         It is also possible for the server to send a completion
          354         response for some other command (if multiple commands are
          355         in progress), or untagged data.  In either case, the
          356         command continuation request is still pending; the client
          357         takes the appropriate action for the response, and reads
          358         another response from the server.  In all cases, the client
          359         MUST send a complete command (including receiving all
          360         command continuation request responses and command
          361         continuations for the command) before initiating a new
          362         command.
          363 
          364    The protocol receiver of an IMAP4rev1 server reads a command line
          365    from the client, parses the command and its arguments, and transmits
          366    server data and a server command completion result response.
          367 
          368 2.2.2.  Server Protocol Sender and Client Protocol Receiver
          369 
          370    Data transmitted by the server to the client and status responses
          371    that do not indicate command completion are prefixed with the token
          372    "*", and are called untagged responses.
          373 
          374    Server data MAY be sent as a result of a client command, or MAY be
          375    sent unilaterally by the server.  There is no syntactic difference
          376    between server data that resulted from a specific command and server
          377    data that were sent unilaterally.
          378 
          379    The server completion result response indicates the success or
          380    failure of the operation.  It is tagged with the same tag as the
          381    client command which began the operation.  Thus, if more than one
          382    command is in progress, the tag in a server completion response
          383    identifies the command to which the response applies.  There are
          384    three possible server completion responses: OK (indicating success),
          385    NO (indicating failure), or BAD (indicating a protocol error such as
          386    unrecognized command or command syntax error).
          387 
          388    Servers SHOULD enforce the syntax outlined in this specification
          389    strictly.  Any client command with a protocol syntax error, including
          390    (but not limited to) missing or extraneous spaces or arguments,
          391 
          392 
          393 
          394 Crispin                     Standards Track                     [Page 7]
          395 
          396 RFC 3501                         IMAPv4                       March 2003
          397 
          398 
          399    SHOULD be rejected, and the client given a BAD server completion
          400    response.
          401 
          402    The protocol receiver of an IMAP4rev1 client reads a response line
          403    from the server.  It then takes action on the response based upon the
          404    first token of the response, which can be a tag, a "*", or a "+".
          405 
          406    A client MUST be prepared to accept any server response at all times.
          407    This includes server data that was not requested.  Server data SHOULD
          408    be recorded, so that the client can reference its recorded copy
          409    rather than sending a command to the server to request the data.  In
          410    the case of certain server data, the data MUST be recorded.
          411 
          412    This topic is discussed in greater detail in the Server Responses
          413    section.
          414 
          415 2.3.    Message Attributes
          416 
          417    In addition to message text, each message has several attributes
          418    associated with it.  These attributes can be retrieved individually
          419    or in conjunction with other attributes or message texts.
          420 
          421 2.3.1.  Message Numbers
          422 
          423    Messages in IMAP4rev1 are accessed by one of two numbers; the unique
          424    identifier or the message sequence number.
          425 
          426 
          427 2.3.1.1.        Unique Identifier (UID) Message Attribute
          428 
          429    A 32-bit value assigned to each message, which when used with the
          430    unique identifier validity value (see below) forms a 64-bit value
          431    that MUST NOT refer to any other message in the mailbox or any
          432    subsequent mailbox with the same name forever.  Unique identifiers
          433    are assigned in a strictly ascending fashion in the mailbox; as each
          434    message is added to the mailbox it is assigned a higher UID than the
          435    message(s) which were added previously.  Unlike message sequence
          436    numbers, unique identifiers are not necessarily contiguous.
          437 
          438    The unique identifier of a message MUST NOT change during the
          439    session, and SHOULD NOT change between sessions.  Any change of
          440    unique identifiers between sessions MUST be detectable using the
          441    UIDVALIDITY mechanism discussed below.  Persistent unique identifiers
          442    are required for a client to resynchronize its state from a previous
          443    session with the server (e.g., disconnected or offline access
          444    clients); this is discussed further in [IMAP-DISC].
          445 
          446 
          447 
          448 
          449 
          450 Crispin                     Standards Track                     [Page 8]
          451 
          452 RFC 3501                         IMAPv4                       March 2003
          453 
          454 
          455    Associated with every mailbox are two values which aid in unique
          456    identifier handling: the next unique identifier value and the unique
          457    identifier validity value.
          458 
          459    The next unique identifier value is the predicted value that will be
          460    assigned to a new message in the mailbox.  Unless the unique
          461    identifier validity also changes (see below), the next unique
          462    identifier value MUST have the following two characteristics.  First,
          463    the next unique identifier value MUST NOT change unless new messages
          464    are added to the mailbox; and second, the next unique identifier
          465    value MUST change whenever new messages are added to the mailbox,
          466    even if those new messages are subsequently expunged.
          467 
          468         Note: The next unique identifier value is intended to
          469         provide a means for a client to determine whether any
          470         messages have been delivered to the mailbox since the
          471         previous time it checked this value.  It is not intended to
          472         provide any guarantee that any message will have this
          473         unique identifier.  A client can only assume, at the time
          474         that it obtains the next unique identifier value, that
          475         messages arriving after that time will have a UID greater
          476         than or equal to that value.
          477 
          478    The unique identifier validity value is sent in a UIDVALIDITY
          479    response code in an OK untagged response at mailbox selection time.
          480    If unique identifiers from an earlier session fail to persist in this
          481    session, the unique identifier validity value MUST be greater than
          482    the one used in the earlier session.
          483 
          484         Note: Ideally, unique identifiers SHOULD persist at all
          485         times.  Although this specification recognizes that failure
          486         to persist can be unavoidable in certain server
          487         environments, it STRONGLY ENCOURAGES message store
          488         implementation techniques that avoid this problem.  For
          489         example:
          490 
          491          1) Unique identifiers MUST be strictly ascending in the
          492             mailbox at all times.  If the physical message store is
          493             re-ordered by a non-IMAP agent, this requires that the
          494             unique identifiers in the mailbox be regenerated, since
          495             the former unique identifiers are no longer strictly
          496             ascending as a result of the re-ordering.
          497 
          498          2) If the message store has no mechanism to store unique
          499             identifiers, it must regenerate unique identifiers at
          500             each session, and each session must have a unique
          501             UIDVALIDITY value.
          502 
          503 
          504 
          505 
          506 Crispin                     Standards Track                     [Page 9]
          507 
          508 RFC 3501                         IMAPv4                       March 2003
          509 
          510 
          511          3) If the mailbox is deleted and a new mailbox with the
          512             same name is created at a later date, the server must
          513             either keep track of unique identifiers from the
          514             previous instance of the mailbox, or it must assign a
          515             new UIDVALIDITY value to the new instance of the
          516             mailbox.  A good UIDVALIDITY value to use in this case
          517             is a 32-bit representation of the creation date/time of
          518             the mailbox.  It is alright to use a constant such as
          519             1, but only if it guaranteed that unique identifiers
          520             will never be reused, even in the case of a mailbox
          521             being deleted (or renamed) and a new mailbox by the
          522             same name created at some future time.
          523 
          524          4) The combination of mailbox name, UIDVALIDITY, and UID
          525             must refer to a single immutable message on that server
          526             forever.  In particular, the internal date, [RFC-2822]
          527             size, envelope, body structure, and message texts
          528             (RFC822, RFC822.HEADER, RFC822.TEXT, and all BODY[...]
          529             fetch data items) must never change.  This does not
          530             include message numbers, nor does it include attributes
          531             that can be set by a STORE command (e.g., FLAGS).
          532 
          533 
          534 2.3.1.2.        Message Sequence Number Message Attribute
          535 
          536    A relative position from 1 to the number of messages in the mailbox.
          537    This position MUST be ordered by ascending unique identifier.  As
          538    each new message is added, it is assigned a message sequence number
          539    that is 1 higher than the number of messages in the mailbox before
          540    that new message was added.
          541 
          542    Message sequence numbers can be reassigned during the session.  For
          543    example, when a message is permanently removed (expunged) from the
          544    mailbox, the message sequence number for all subsequent messages is
          545    decremented.  The number of messages in the mailbox is also
          546    decremented.  Similarly, a new message can be assigned a message
          547    sequence number that was once held by some other message prior to an
          548    expunge.
          549 
          550    In addition to accessing messages by relative position in the
          551    mailbox, message sequence numbers can be used in mathematical
          552    calculations.  For example, if an untagged "11 EXISTS" is received,
          553    and previously an untagged "8 EXISTS" was received, three new
          554    messages have arrived with message sequence numbers of 9, 10, and 11.
          555    Another example, if message 287 in a 523 message mailbox has UID
          556    12345, there are exactly 286 messages which have lesser UIDs and 236
          557    messages which have greater UIDs.
          558 
          559 
          560 
          561 
          562 Crispin                     Standards Track                    [Page 10]
          563 
          564 RFC 3501                         IMAPv4                       March 2003
          565 
          566 
          567 2.3.2.  Flags Message Attribute
          568 
          569    A list of zero or more named tokens associated with the message.  A
          570    flag is set by its addition to this list, and is cleared by its
          571    removal.  There are two types of flags in IMAP4rev1.  A flag of
          572    either type can be permanent or session-only.
          573 
          574    A system flag is a flag name that is pre-defined in this
          575    specification.  All system flags begin with "\".  Certain system
          576    flags (\Deleted and \Seen) have special semantics described
          577    elsewhere.  The currently-defined system flags are:
          578 
          579         \Seen
          580            Message has been read
          581 
          582         \Answered
          583            Message has been answered
          584 
          585         \Flagged
          586            Message is "flagged" for urgent/special attention
          587 
          588         \Deleted
          589            Message is "deleted" for removal by later EXPUNGE
          590 
          591         \Draft
          592            Message has not completed composition (marked as a draft).
          593 
          594         \Recent
          595            Message is "recently" arrived in this mailbox.  This session
          596            is the first session to have been notified about this
          597            message; if the session is read-write, subsequent sessions
          598            will not see \Recent set for this message.  This flag can not
          599            be altered by the client.
          600 
          601            If it is not possible to determine whether or not this
          602            session is the first session to be notified about a message,
          603            then that message SHOULD be considered recent.
          604 
          605            If multiple connections have the same mailbox selected
          606            simultaneously, it is undefined which of these connections
          607            will see newly-arrived messages with \Recent set and which
          608            will see it without \Recent set.
          609 
          610    A keyword is defined by the server implementation.  Keywords do not
          611    begin with "\".  Servers MAY permit the client to define new keywords
          612    in the mailbox (see the description of the PERMANENTFLAGS response
          613    code for more information).
          614 
          615 
          616 
          617 
          618 Crispin                     Standards Track                    [Page 11]
          619 
          620 RFC 3501                         IMAPv4                       March 2003
          621 
          622 
          623    A flag can be permanent or session-only on a per-flag basis.
          624    Permanent flags are those which the client can add or remove from the
          625    message flags permanently; that is, concurrent and subsequent
          626    sessions will see any change in permanent flags.  Changes to session
          627    flags are valid only in that session.
          628 
          629         Note: The \Recent system flag is a special case of a
          630         session flag.  \Recent can not be used as an argument in a
          631         STORE or APPEND command, and thus can not be changed at
          632         all.
          633 
          634 2.3.3.  Internal Date Message Attribute
          635 
          636    The internal date and time of the message on the server.  This
          637    is not the date and time in the [RFC-2822] header, but rather a
          638    date and time which reflects when the message was received.  In
          639    the case of messages delivered via [SMTP], this SHOULD be the
          640    date and time of final delivery of the message as defined by
          641    [SMTP].  In the case of messages delivered by the IMAP4rev1 COPY
          642    command, this SHOULD be the internal date and time of the source
          643    message.  In the case of messages delivered by the IMAP4rev1
          644    APPEND command, this SHOULD be the date and time as specified in
          645    the APPEND command description.  All other cases are
          646    implementation defined.
          647 
          648 2.3.4.  [RFC-2822] Size Message Attribute
          649 
          650    The number of octets in the message, as expressed in [RFC-2822]
          651    format.
          652 
          653 2.3.5.  Envelope Structure Message Attribute
          654 
          655    A parsed representation of the [RFC-2822] header of the message.
          656    Note that the IMAP Envelope structure is not the same as an
          657    [SMTP] envelope.
          658 
          659 2.3.6.  Body Structure Message Attribute
          660 
          661    A parsed representation of the [MIME-IMB] body structure
          662    information of the message.
          663 
          664 
          665 
          666 
          667 
          668 
          669 
          670 
          671 
          672 
          673 
          674 Crispin                     Standards Track                    [Page 12]
          675 
          676 RFC 3501                         IMAPv4                       March 2003
          677 
          678 
          679 2.4.    Message Texts
          680 
          681    In addition to being able to fetch the full [RFC-2822] text of a
          682    message, IMAP4rev1 permits the fetching of portions of the full
          683    message text.  Specifically, it is possible to fetch the
          684    [RFC-2822] message header, [RFC-2822] message body, a [MIME-IMB]
          685    body part, or a [MIME-IMB] header.
          686 
          687 3.      State and Flow Diagram
          688 
          689    Once the connection between client and server is established, an
          690    IMAP4rev1 connection is in one of four states.  The initial
          691    state is identified in the server greeting.  Most commands are
          692    only valid in certain states.  It is a protocol error for the
          693    client to attempt a command while the connection is in an
          694    inappropriate state, and the server will respond with a BAD or
          695    NO (depending upon server implementation) command completion
          696    result.
          697 
          698 3.1.    Not Authenticated State
          699 
          700    In the not authenticated state, the client MUST supply
          701    authentication credentials before most commands will be
          702    permitted.  This state is entered when a connection starts
          703    unless the connection has been pre-authenticated.
          704 
          705 3.2.    Authenticated State
          706 
          707    In the authenticated state, the client is authenticated and MUST
          708    select a mailbox to access before commands that affect messages
          709    will be permitted.  This state is entered when a
          710    pre-authenticated connection starts, when acceptable
          711    authentication credentials have been provided, after an error in
          712    selecting a mailbox, or after a successful CLOSE command.
          713 
          714 3.3.    Selected State
          715 
          716    In a selected state, a mailbox has been selected to access.
          717    This state is entered when a mailbox has been successfully
          718    selected.
          719 
          720 
          721 
          722 
          723 
          724 
          725 
          726 
          727 
          728 
          729 
          730 Crispin                     Standards Track                    [Page 13]
          731 
          732 RFC 3501                         IMAPv4                       March 2003
          733 
          734 
          735 3.4.    Logout State
          736 
          737    In the logout state, the connection is being terminated.  This
          738    state can be entered as a result of a client request (via the
          739    LOGOUT command) or by unilateral action on the part of either
          740    the client or server.
          741 
          742    If the client requests the logout state, the server MUST send an
          743    untagged BYE response and a tagged OK response to the LOGOUT
          744    command before the server closes the connection; and the client
          745    MUST read the tagged OK response to the LOGOUT command before
          746    the client closes the connection.
          747 
          748    A server MUST NOT unilaterally close the connection without
          749    sending an untagged BYE response that contains the reason for
          750    having done so.  A client SHOULD NOT unilaterally close the
          751    connection, and instead SHOULD issue a LOGOUT command.  If the
          752    server detects that the client has unilaterally closed the
          753    connection, the server MAY omit the untagged BYE response and
          754    simply close its connection.
          755 
          756 
          757 
          758 
          759 
          760 
          761 
          762 
          763 
          764 
          765 
          766 
          767 
          768 
          769 
          770 
          771 
          772 
          773 
          774 
          775 
          776 
          777 
          778 
          779 
          780 
          781 
          782 
          783 
          784 
          785 
          786 Crispin                     Standards Track                    [Page 14]
          787 
          788 RFC 3501                         IMAPv4                       March 2003
          789 
          790 
          791                    +----------------------+
          792                    |connection established|
          793                    +----------------------+
          794                               ||
          795                               \/
          796             +--------------------------------------+
          797             |          server greeting             |
          798             +--------------------------------------+
          799                       || (1)       || (2)        || (3)
          800                       \/           ||            ||
          801             +-----------------+    ||            ||
          802             |Not Authenticated|    ||            ||
          803             +-----------------+    ||            ||
          804              || (7)   || (4)       ||            ||
          805              ||       \/           \/            ||
          806              ||     +----------------+           ||
          807              ||     | Authenticated  |<=++       ||
          808              ||     +----------------+  ||       ||
          809              ||       || (7)   || (5)   || (6)   ||
          810              ||       ||       \/       ||       ||
          811              ||       ||    +--------+  ||       ||
          812              ||       ||    |Selected|==++       ||
          813              ||       ||    +--------+           ||
          814              ||       ||       || (7)            ||
          815              \/       \/       \/                \/
          816             +--------------------------------------+
          817             |               Logout                 |
          818             +--------------------------------------+
          819                               ||
          820                               \/
          821                 +-------------------------------+
          822                 |both sides close the connection|
          823                 +-------------------------------+
          824 
          825          (1) connection without pre-authentication (OK greeting)
          826          (2) pre-authenticated connection (PREAUTH greeting)
          827          (3) rejected connection (BYE greeting)
          828          (4) successful LOGIN or AUTHENTICATE command
          829          (5) successful SELECT or EXAMINE command
          830          (6) CLOSE command, or failed SELECT or EXAMINE command
          831          (7) LOGOUT command, server shutdown, or connection closed
          832 
          833 
          834 
          835 
          836 
          837 
          838 
          839 
          840 
          841 
          842 Crispin                     Standards Track                    [Page 15]
          843 
          844 RFC 3501                         IMAPv4                       March 2003
          845 
          846 
          847 4.      Data Formats
          848 
          849    IMAP4rev1 uses textual commands and responses.  Data in
          850    IMAP4rev1 can be in one of several forms: atom, number, string,
          851    parenthesized list, or NIL.  Note that a particular data item
          852    may take more than one form; for example, a data item defined as
          853    using "astring" syntax may be either an atom or a string.
          854 
          855 4.1.    Atom
          856 
          857    An atom consists of one or more non-special characters.
          858 
          859 4.2.    Number
          860 
          861    A number consists of one or more digit characters, and
          862    represents a numeric value.
          863 
          864 4.3.    String
          865 
          866    A string is in one of two forms: either literal or quoted
          867    string.  The literal form is the general form of string.  The
          868    quoted string form is an alternative that avoids the overhead of
          869    processing a literal at the cost of limitations of characters
          870    which may be used.
          871 
          872    A literal is a sequence of zero or more octets (including CR and
          873    LF), prefix-quoted with an octet count in the form of an open
          874    brace ("{"), the number of octets, close brace ("}"), and CRLF.
          875    In the case of literals transmitted from server to client, the
          876    CRLF is immediately followed by the octet data.  In the case of
          877    literals transmitted from client to server, the client MUST wait
          878    to receive a command continuation request (described later in
          879    this document) before sending the octet data (and the remainder
          880    of the command).
          881 
          882    A quoted string is a sequence of zero or more 7-bit characters,
          883    excluding CR and LF, with double quote (<">) characters at each
          884    end.
          885 
          886    The empty string is represented as either "" (a quoted string
          887    with zero characters between double quotes) or as {0} followed
          888    by CRLF (a literal with an octet count of 0).
          889 
          890      Note: Even if the octet count is 0, a client transmitting a
          891      literal MUST wait to receive a command continuation request.
          892 
          893 
          894 
          895 
          896 
          897 
          898 Crispin                     Standards Track                    [Page 16]
          899 
          900 RFC 3501                         IMAPv4                       March 2003
          901 
          902 
          903 4.3.1.  8-bit and Binary Strings
          904 
          905    8-bit textual and binary mail is supported through the use of a
          906    [MIME-IMB] content transfer encoding.  IMAP4rev1 implementations MAY
          907    transmit 8-bit or multi-octet characters in literals, but SHOULD do
          908    so only when the [CHARSET] is identified.
          909 
          910    Although a BINARY body encoding is defined, unencoded binary strings
          911    are not permitted.  A "binary string" is any string with NUL
          912    characters.  Implementations MUST encode binary data into a textual
          913    form, such as BASE64, before transmitting the data.  A string with an
          914    excessive amount of CTL characters MAY also be considered to be
          915    binary.
          916 
          917 4.4.    Parenthesized List
          918 
          919    Data structures are represented as a "parenthesized list"; a sequence
          920    of data items, delimited by space, and bounded at each end by
          921    parentheses.  A parenthesized list can contain other parenthesized
          922    lists, using multiple levels of parentheses to indicate nesting.
          923 
          924    The empty list is represented as () -- a parenthesized list with no
          925    members.
          926 
          927 4.5.    NIL
          928 
          929    The special form "NIL" represents the non-existence of a particular
          930    data item that is represented as a string or parenthesized list, as
          931    distinct from the empty string "" or the empty parenthesized list ().
          932 
          933         Note: NIL is never used for any data item which takes the
          934         form of an atom.  For example, a mailbox name of "NIL" is a
          935         mailbox named NIL as opposed to a non-existent mailbox
          936         name.  This is because mailbox uses "astring" syntax which
          937         is an atom or a string.  Conversely, an addr-name of NIL is
          938         a non-existent personal name, because addr-name uses
          939         "nstring" syntax which is NIL or a string, but never an
          940         atom.
          941 
          942 
          943 
          944 
          945 
          946 
          947 
          948 
          949 
          950 
          951 
          952 
          953 
          954 Crispin                     Standards Track                    [Page 17]
          955 
          956 RFC 3501                         IMAPv4                       March 2003
          957 
          958 
          959 5.      Operational Considerations
          960 
          961    The following rules are listed here to ensure that all IMAP4rev1
          962    implementations interoperate properly.
          963 
          964 5.1.    Mailbox Naming
          965 
          966    Mailbox names are 7-bit.  Client implementations MUST NOT attempt to
          967    create 8-bit mailbox names, and SHOULD interpret any 8-bit mailbox
          968    names returned by LIST or LSUB as UTF-8.  Server implementations
          969    SHOULD prohibit the creation of 8-bit mailbox names, and SHOULD NOT
          970    return 8-bit mailbox names in LIST or LSUB.  See section 5.1.3 for
          971    more information on how to represent non-ASCII mailbox names.
          972 
          973         Note: 8-bit mailbox names were undefined in earlier
          974         versions of this protocol.  Some sites used a local 8-bit
          975         character set to represent non-ASCII mailbox names.  Such
          976         usage is not interoperable, and is now formally deprecated.
          977 
          978    The case-insensitive mailbox name INBOX is a special name reserved to
          979    mean "the primary mailbox for this user on this server".  The
          980    interpretation of all other names is implementation-dependent.
          981 
          982    In particular, this specification takes no position on case
          983    sensitivity in non-INBOX mailbox names.  Some server implementations
          984    are fully case-sensitive; others preserve case of a newly-created
          985    name but otherwise are case-insensitive; and yet others coerce names
          986    to a particular case.  Client implementations MUST interact with any
          987    of these.  If a server implementation interprets non-INBOX mailbox
          988    names as case-insensitive, it MUST treat names using the
          989    international naming convention specially as described in section
          990    5.1.3.
          991 
          992    There are certain client considerations when creating a new mailbox
          993    name:
          994 
          995    1)    Any character which is one of the atom-specials (see the Formal
          996          Syntax) will require that the mailbox name be represented as a
          997          quoted string or literal.
          998 
          999    2)    CTL and other non-graphic characters are difficult to represent
         1000          in a user interface and are best avoided.
         1001 
         1002    3)    Although the list-wildcard characters ("%" and "*") are valid
         1003          in a mailbox name, it is difficult to use such mailbox names
         1004          with the LIST and LSUB commands due to the conflict with
         1005          wildcard interpretation.
         1006 
         1007 
         1008 
         1009 
         1010 Crispin                     Standards Track                    [Page 18]
         1011 
         1012 RFC 3501                         IMAPv4                       March 2003
         1013 
         1014 
         1015    4)    Usually, a character (determined by the server implementation)
         1016          is reserved to delimit levels of hierarchy.
         1017 
         1018    5)    Two characters, "#" and "&", have meanings by convention, and
         1019          should be avoided except when used in that convention.
         1020 
         1021 5.1.1.  Mailbox Hierarchy Naming
         1022 
         1023    If it is desired to export hierarchical mailbox names, mailbox names
         1024    MUST be left-to-right hierarchical using a single character to
         1025    separate levels of hierarchy.  The same hierarchy separator character
         1026    is used for all levels of hierarchy within a single name.
         1027 
         1028 5.1.2.  Mailbox Namespace Naming Convention
         1029 
         1030    By convention, the first hierarchical element of any mailbox name
         1031    which begins with "#" identifies the "namespace" of the remainder of
         1032    the name.  This makes it possible to disambiguate between different
         1033    types of mailbox stores, each of which have their own namespaces.
         1034 
         1035         For example, implementations which offer access to USENET
         1036         newsgroups MAY use the "#news" namespace to partition the
         1037         USENET newsgroup namespace from that of other mailboxes.
         1038         Thus, the comp.mail.misc newsgroup would have a mailbox
         1039         name of "#news.comp.mail.misc", and the name
         1040         "comp.mail.misc" can refer to a different object (e.g., a
         1041         user's private mailbox).
         1042 
         1043 5.1.3.  Mailbox International Naming Convention
         1044 
         1045    By convention, international mailbox names in IMAP4rev1 are specified
         1046    using a modified version of the UTF-7 encoding described in [UTF-7].
         1047    Modified UTF-7 may also be usable in servers that implement an
         1048    earlier version of this protocol.
         1049 
         1050    In modified UTF-7, printable US-ASCII characters, except for "&",
         1051    represent themselves; that is, characters with octet values 0x20-0x25
         1052    and 0x27-0x7e.  The character "&" (0x26) is represented by the
         1053    two-octet sequence "&-".
         1054 
         1055    All other characters (octet values 0x00-0x1f and 0x7f-0xff) are
         1056    represented in modified BASE64, with a further modification from
         1057    [UTF-7] that "," is used instead of "/".  Modified BASE64 MUST NOT be
         1058    used to represent any printing US-ASCII character which can represent
         1059    itself.
         1060 
         1061 
         1062 
         1063 
         1064 
         1065 
         1066 Crispin                     Standards Track                    [Page 19]
         1067 
         1068 RFC 3501                         IMAPv4                       March 2003
         1069 
         1070 
         1071    "&" is used to shift to modified BASE64 and "-" to shift back to
         1072    US-ASCII.  There is no implicit shift from BASE64 to US-ASCII, and
         1073    null shifts ("-&" while in BASE64; note that "&-" while in US-ASCII
         1074    means "&") are not permitted.  However, all names start in US-ASCII,
         1075    and MUST end in US-ASCII; that is, a name that ends with a non-ASCII
         1076    ISO-10646 character MUST end with a "-").
         1077 
         1078    The purpose of these modifications is to correct the following
         1079    problems with UTF-7:
         1080 
         1081       1) UTF-7 uses the "+" character for shifting; this conflicts with
         1082          the common use of "+" in mailbox names, in particular USENET
         1083          newsgroup names.
         1084 
         1085       2) UTF-7's encoding is BASE64 which uses the "/" character; this
         1086          conflicts with the use of "/" as a popular hierarchy delimiter.
         1087 
         1088       3) UTF-7 prohibits the unencoded usage of "\"; this conflicts with
         1089          the use of "\" as a popular hierarchy delimiter.
         1090 
         1091       4) UTF-7 prohibits the unencoded usage of "~"; this conflicts with
         1092          the use of "~" in some servers as a home directory indicator.
         1093 
         1094       5) UTF-7 permits multiple alternate forms to represent the same
         1095          string; in particular, printable US-ASCII characters can be
         1096          represented in encoded form.
         1097 
         1098       Although modified UTF-7 is a convention, it establishes certain
         1099       requirements on server handling of any mailbox name with an
         1100       embedded "&" character.  In particular, server implementations
         1101       MUST preserve the exact form of the modified BASE64 portion of a
         1102       modified UTF-7 name and treat that text as case-sensitive, even if
         1103       names are otherwise case-insensitive or case-folded.
         1104 
         1105       Server implementations SHOULD verify that any mailbox name with an
         1106       embedded "&" character, used as an argument to CREATE, is: in the
         1107       correctly modified UTF-7 syntax, has no superfluous shifts, and
         1108       has no encoding in modified BASE64 of any printing US-ASCII
         1109       character which can represent itself.  However, client
         1110       implementations MUST NOT depend upon the server doing this, and
         1111       SHOULD NOT attempt to create a mailbox name with an embedded "&"
         1112       character unless it complies with the modified UTF-7 syntax.
         1113 
         1114       Server implementations which export a mail store that does not
         1115       follow the modified UTF-7 convention MUST convert to modified
         1116       UTF-7 any mailbox name that contains either non-ASCII characters
         1117       or the "&" character.
         1118 
         1119 
         1120 
         1121 
         1122 Crispin                     Standards Track                    [Page 20]
         1123 
         1124 RFC 3501                         IMAPv4                       March 2003
         1125 
         1126 
         1127            For example, here is a mailbox name which mixes English,
         1128            Chinese, and Japanese text:
         1129            ~peter/mail/&U,BTFw-/&ZeVnLIqe-
         1130 
         1131            For example, the string "&Jjo!" is not a valid mailbox
         1132            name because it does not contain a shift to US-ASCII
         1133            before the "!".  The correct form is "&Jjo-!".  The
         1134            string "&U,BTFw-&ZeVnLIqe-" is not permitted because it
         1135            contains a superfluous shift.  The correct form is
         1136            "&U,BTF2XlZyyKng-".
         1137 
         1138 5.2.    Mailbox Size and Message Status Updates
         1139 
         1140    At any time, a server can send data that the client did not request.
         1141    Sometimes, such behavior is REQUIRED.  For example, agents other than
         1142    the server MAY add messages to the mailbox (e.g., new message
         1143    delivery), change the flags of the messages in the mailbox (e.g.,
         1144    simultaneous access to the same mailbox by multiple agents), or even
         1145    remove messages from the mailbox.  A server MUST send mailbox size
         1146    updates automatically if a mailbox size change is observed during the
         1147    processing of a command.  A server SHOULD send message flag updates
         1148    automatically, without requiring the client to request such updates
         1149    explicitly.
         1150 
         1151    Special rules exist for server notification of a client about the
         1152    removal of messages to prevent synchronization errors; see the
         1153    description of the EXPUNGE response for more detail.  In particular,
         1154    it is NOT permitted to send an EXISTS response that would reduce the
         1155    number of messages in the mailbox; only the EXPUNGE response can do
         1156    this.
         1157 
         1158    Regardless of what implementation decisions a client makes on
         1159    remembering data from the server, a client implementation MUST record
         1160    mailbox size updates.  It MUST NOT assume that any command after the
         1161    initial mailbox selection will return the size of the mailbox.
         1162 
         1163 5.3.    Response when no Command in Progress
         1164 
         1165    Server implementations are permitted to send an untagged response
         1166    (except for EXPUNGE) while there is no command in progress.  Server
         1167    implementations that send such responses MUST deal with flow control
         1168    considerations.  Specifically, they MUST either (1) verify that the
         1169    size of the data does not exceed the underlying transport's available
         1170    window size, or (2) use non-blocking writes.
         1171 
         1172 
         1173 
         1174 
         1175 
         1176 
         1177 
         1178 Crispin                     Standards Track                    [Page 21]
         1179 
         1180 RFC 3501                         IMAPv4                       March 2003
         1181 
         1182 
         1183 5.4.    Autologout Timer
         1184 
         1185    If a server has an inactivity autologout timer, the duration of that
         1186    timer MUST be at least 30 minutes.  The receipt of ANY command from
         1187    the client during that interval SHOULD suffice to reset the
         1188    autologout timer.
         1189 
         1190 5.5.    Multiple Commands in Progress
         1191 
         1192    The client MAY send another command without waiting for the
         1193    completion result response of a command, subject to ambiguity rules
         1194    (see below) and flow control constraints on the underlying data
         1195    stream.  Similarly, a server MAY begin processing another command
         1196    before processing the current command to completion, subject to
         1197    ambiguity rules.  However, any command continuation request responses
         1198    and command continuations MUST be negotiated before any subsequent
         1199    command is initiated.
         1200 
         1201    The exception is if an ambiguity would result because of a command
         1202    that would affect the results of other commands.  Clients MUST NOT
         1203    send multiple commands without waiting if an ambiguity would result.
         1204    If the server detects a possible ambiguity, it MUST execute commands
         1205    to completion in the order given by the client.
         1206 
         1207    The most obvious example of ambiguity is when a command would affect
         1208    the results of another command, e.g., a FETCH of a message's flags
         1209    and a STORE of that same message's flags.
         1210 
         1211    A non-obvious ambiguity occurs with commands that permit an untagged
         1212    EXPUNGE response (commands other than FETCH, STORE, and SEARCH),
         1213    since an untagged EXPUNGE response can invalidate sequence numbers in
         1214    a subsequent command.  This is not a problem for FETCH, STORE, or
         1215    SEARCH commands because servers are prohibited from sending EXPUNGE
         1216    responses while any of those commands are in progress.  Therefore, if
         1217    the client sends any command other than FETCH, STORE, or SEARCH, it
         1218    MUST wait for the completion result response before sending a command
         1219    with message sequence numbers.
         1220 
         1221         Note: UID FETCH, UID STORE, and UID SEARCH are different
         1222         commands from FETCH, STORE, and SEARCH.  If the client
         1223         sends a UID command, it must wait for a completion result
         1224         response before sending a command with message sequence
         1225         numbers.
         1226 
         1227 
         1228 
         1229 
         1230 
         1231 
         1232 
         1233 
         1234 Crispin                     Standards Track                    [Page 22]
         1235 
         1236 RFC 3501                         IMAPv4                       March 2003
         1237 
         1238 
         1239    For example, the following non-waiting command sequences are invalid:
         1240 
         1241       FETCH + NOOP + STORE
         1242       STORE + COPY + FETCH
         1243       COPY + COPY
         1244       CHECK + FETCH
         1245 
         1246    The following are examples of valid non-waiting command sequences:
         1247 
         1248       FETCH + STORE + SEARCH + CHECK
         1249       STORE + COPY + EXPUNGE
         1250 
         1251       UID SEARCH + UID SEARCH may be valid or invalid as a non-waiting
         1252       command sequence, depending upon whether or not the second UID
         1253       SEARCH contains message sequence numbers.
         1254 
         1255 6.      Client Commands
         1256 
         1257    IMAP4rev1 commands are described in this section.  Commands are
         1258    organized by the state in which the command is permitted.  Commands
         1259    which are permitted in multiple states are listed in the minimum
         1260    permitted state (for example, commands valid in authenticated and
         1261    selected state are listed in the authenticated state commands).
         1262 
         1263    Command arguments, identified by "Arguments:" in the command
         1264    descriptions below, are described by function, not by syntax.  The
         1265    precise syntax of command arguments is described in the Formal Syntax
         1266    section.
         1267 
         1268    Some commands cause specific server responses to be returned; these
         1269    are identified by "Responses:" in the command descriptions below.
         1270    See the response descriptions in the Responses section for
         1271    information on these responses, and the Formal Syntax section for the
         1272    precise syntax of these responses.  It is possible for server data to
         1273    be transmitted as a result of any command.  Thus, commands that do
         1274    not specifically require server data specify "no specific responses
         1275    for this command" instead of "none".
         1276 
         1277    The "Result:" in the command description refers to the possible
         1278    tagged status responses to a command, and any special interpretation
         1279    of these status responses.
         1280 
         1281    The state of a connection is only changed by successful commands
         1282    which are documented as changing state.  A rejected command (BAD
         1283    response) never changes the state of the connection or of the
         1284    selected mailbox.  A failed command (NO response) generally does not
         1285    change the state of the connection or of the selected mailbox; the
         1286    exception being the SELECT and EXAMINE commands.
         1287 
         1288 
         1289 
         1290 Crispin                     Standards Track                    [Page 23]
         1291 
         1292 RFC 3501                         IMAPv4                       March 2003
         1293 
         1294 
         1295 6.1.    Client Commands - Any State
         1296 
         1297    The following commands are valid in any state: CAPABILITY, NOOP, and
         1298    LOGOUT.
         1299 
         1300 6.1.1.  CAPABILITY Command
         1301 
         1302    Arguments:  none
         1303 
         1304    Responses:  REQUIRED untagged response: CAPABILITY
         1305 
         1306    Result:     OK - capability completed
         1307                BAD - command unknown or arguments invalid
         1308 
         1309       The CAPABILITY command requests a listing of capabilities that the
         1310       server supports.  The server MUST send a single untagged
         1311       CAPABILITY response with "IMAP4rev1" as one of the listed
         1312       capabilities before the (tagged) OK response.
         1313 
         1314       A capability name which begins with "AUTH=" indicates that the
         1315       server supports that particular authentication mechanism.  All
         1316       such names are, by definition, part of this specification.  For
         1317       example, the authorization capability for an experimental
         1318       "blurdybloop" authenticator would be "AUTH=XBLURDYBLOOP" and not
         1319       "XAUTH=BLURDYBLOOP" or "XAUTH=XBLURDYBLOOP".
         1320 
         1321       Other capability names refer to extensions, revisions, or
         1322       amendments to this specification.  See the documentation of the
         1323       CAPABILITY response for additional information.  No capabilities,
         1324       beyond the base IMAP4rev1 set defined in this specification, are
         1325       enabled without explicit client action to invoke the capability.
         1326 
         1327       Client and server implementations MUST implement the STARTTLS,
         1328       LOGINDISABLED, and AUTH=PLAIN (described in [IMAP-TLS])
         1329       capabilities.  See the Security Considerations section for
         1330       important information.
         1331 
         1332       See the section entitled "Client Commands -
         1333       Experimental/Expansion" for information about the form of site or
         1334       implementation-specific capabilities.
         1335 
         1336 
         1337 
         1338 
         1339 
         1340 
         1341 
         1342 
         1343 
         1344 
         1345 
         1346 Crispin                     Standards Track                    [Page 24]
         1347 
         1348 RFC 3501                         IMAPv4                       March 2003
         1349 
         1350 
         1351    Example:    C: abcd CAPABILITY
         1352                S: * CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI
         1353                LOGINDISABLED
         1354                S: abcd OK CAPABILITY completed
         1355                C: efgh STARTTLS
         1356                S: efgh OK STARTLS completed
         1357                <TLS negotiation, further commands are under [TLS] layer>
         1358                C: ijkl CAPABILITY
         1359                S: * CAPABILITY IMAP4rev1 AUTH=GSSAPI AUTH=PLAIN
         1360                S: ijkl OK CAPABILITY completed
         1361 
         1362 
         1363 6.1.2.  NOOP Command
         1364 
         1365    Arguments:  none
         1366 
         1367    Responses:  no specific responses for this command (but see below)
         1368 
         1369    Result:     OK - noop completed
         1370                BAD - command unknown or arguments invalid
         1371 
         1372       The NOOP command always succeeds.  It does nothing.
         1373 
         1374       Since any command can return a status update as untagged data, the
         1375       NOOP command can be used as a periodic poll for new messages or
         1376       message status updates during a period of inactivity (this is the
         1377       preferred method to do this).  The NOOP command can also be used
         1378       to reset any inactivity autologout timer on the server.
         1379 
         1380    Example:    C: a002 NOOP
         1381                S: a002 OK NOOP completed
         1382                   . . .
         1383                C: a047 NOOP
         1384                S: * 22 EXPUNGE
         1385                S: * 23 EXISTS
         1386                S: * 3 RECENT
         1387                S: * 14 FETCH (FLAGS (\Seen \Deleted))
         1388                S: a047 OK NOOP completed
         1389 
         1390 
         1391 
         1392 
         1393 
         1394 
         1395 
         1396 
         1397 
         1398 
         1399 
         1400 
         1401 
         1402 Crispin                     Standards Track                    [Page 25]
         1403 
         1404 RFC 3501                         IMAPv4                       March 2003
         1405 
         1406 
         1407 6.1.3.  LOGOUT Command
         1408 
         1409    Arguments:  none
         1410 
         1411    Responses:  REQUIRED untagged response: BYE
         1412 
         1413    Result:     OK - logout completed
         1414                BAD - command unknown or arguments invalid
         1415 
         1416       The LOGOUT command informs the server that the client is done with
         1417       the connection.  The server MUST send a BYE untagged response
         1418       before the (tagged) OK response, and then close the network
         1419       connection.
         1420 
         1421    Example:    C: A023 LOGOUT
         1422                S: * BYE IMAP4rev1 Server logging out
         1423                S: A023 OK LOGOUT completed
         1424                (Server and client then close the connection)
         1425 
         1426 6.2.    Client Commands - Not Authenticated State
         1427 
         1428    In the not authenticated state, the AUTHENTICATE or LOGIN command
         1429    establishes authentication and enters the authenticated state.  The
         1430    AUTHENTICATE command provides a general mechanism for a variety of
         1431    authentication techniques, privacy protection, and integrity
         1432    checking; whereas the LOGIN command uses a traditional user name and
         1433    plaintext password pair and has no means of establishing privacy
         1434    protection or integrity checking.
         1435 
         1436    The STARTTLS command is an alternate form of establishing session
         1437    privacy protection and integrity checking, but does not establish
         1438    authentication or enter the authenticated state.
         1439 
         1440    Server implementations MAY allow access to certain mailboxes without
         1441    establishing authentication.  This can be done by means of the
         1442    ANONYMOUS [SASL] authenticator described in [ANONYMOUS].  An older
         1443    convention is a LOGIN command using the userid "anonymous"; in this
         1444    case, a password is required although the server may choose to accept
         1445    any password.  The restrictions placed on anonymous users are
         1446    implementation-dependent.
         1447 
         1448    Once authenticated (including as anonymous), it is not possible to
         1449    re-enter not authenticated state.
         1450 
         1451 
         1452 
         1453 
         1454 
         1455 
         1456 
         1457 
         1458 Crispin                     Standards Track                    [Page 26]
         1459 
         1460 RFC 3501                         IMAPv4                       March 2003
         1461 
         1462 
         1463    In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),
         1464    the following commands are valid in the not authenticated state:
         1465    STARTTLS, AUTHENTICATE and LOGIN.  See the Security Considerations
         1466    section for important information about these commands.
         1467 
         1468 6.2.1.  STARTTLS Command
         1469 
         1470    Arguments:  none
         1471 
         1472    Responses:  no specific response for this command
         1473 
         1474    Result:     OK - starttls completed, begin TLS negotiation
         1475                BAD - command unknown or arguments invalid
         1476 
         1477       A [TLS] negotiation begins immediately after the CRLF at the end
         1478       of the tagged OK response from the server.  Once a client issues a
         1479       STARTTLS command, it MUST NOT issue further commands until a
         1480       server response is seen and the [TLS] negotiation is complete.
         1481 
         1482       The server remains in the non-authenticated state, even if client
         1483       credentials are supplied during the [TLS] negotiation.  This does
         1484       not preclude an authentication mechanism such as EXTERNAL (defined
         1485       in [SASL]) from using client identity determined by the [TLS]
         1486       negotiation.
         1487 
         1488       Once [TLS] has been started, the client MUST discard cached
         1489       information about server capabilities and SHOULD re-issue the
         1490       CAPABILITY command.  This is necessary to protect against man-in-
         1491       the-middle attacks which alter the capabilities list prior to
         1492       STARTTLS.  The server MAY advertise different capabilities after
         1493       STARTTLS.
         1494 
         1495    Example:    C: a001 CAPABILITY
         1496                S: * CAPABILITY IMAP4rev1 STARTTLS LOGINDISABLED
         1497                S: a001 OK CAPABILITY completed
         1498                C: a002 STARTTLS
         1499                S: a002 OK Begin TLS negotiation now
         1500                <TLS negotiation, further commands are under [TLS] layer>
         1501                C: a003 CAPABILITY
         1502                S: * CAPABILITY IMAP4rev1 AUTH=PLAIN
         1503                S: a003 OK CAPABILITY completed
         1504                C: a004 LOGIN joe password
         1505                S: a004 OK LOGIN completed
         1506 
         1507 
         1508 
         1509 
         1510 
         1511 
         1512 
         1513 
         1514 Crispin                     Standards Track                    [Page 27]
         1515 
         1516 RFC 3501                         IMAPv4                       March 2003
         1517 
         1518 
         1519 6.2.2.  AUTHENTICATE Command
         1520 
         1521    Arguments:  authentication mechanism name
         1522 
         1523    Responses:  continuation data can be requested
         1524 
         1525    Result:     OK - authenticate completed, now in authenticated state
         1526                NO - authenticate failure: unsupported authentication
         1527                     mechanism, credentials rejected
         1528                BAD - command unknown or arguments invalid,
         1529                     authentication exchange cancelled
         1530 
         1531       The AUTHENTICATE command indicates a [SASL] authentication
         1532       mechanism to the server.  If the server supports the requested
         1533       authentication mechanism, it performs an authentication protocol
         1534       exchange to authenticate and identify the client.  It MAY also
         1535       negotiate an OPTIONAL security layer for subsequent protocol
         1536       interactions.  If the requested authentication mechanism is not
         1537       supported, the server SHOULD reject the AUTHENTICATE command by
         1538       sending a tagged NO response.
         1539 
         1540       The AUTHENTICATE command does not support the optional "initial
         1541       response" feature of [SASL].  Section 5.1 of [SASL] specifies how
         1542       to handle an authentication mechanism which uses an initial
         1543       response.
         1544 
         1545       The service name specified by this protocol's profile of [SASL] is
         1546       "imap".
         1547 
         1548       The authentication protocol exchange consists of a series of
         1549       server challenges and client responses that are specific to the
         1550       authentication mechanism.  A server challenge consists of a
         1551       command continuation request response with the "+" token followed
         1552       by a BASE64 encoded string.  The client response consists of a
         1553       single line consisting of a BASE64 encoded string.  If the client
         1554       wishes to cancel an authentication exchange, it issues a line
         1555       consisting of a single "*".  If the server receives such a
         1556       response, it MUST reject the AUTHENTICATE command by sending a
         1557       tagged BAD response.
         1558 
         1559       If a security layer is negotiated through the [SASL]
         1560       authentication exchange, it takes effect immediately following the
         1561       CRLF that concludes the authentication exchange for the client,
         1562       and the CRLF of the tagged OK response for the server.
         1563 
         1564       While client and server implementations MUST implement the
         1565       AUTHENTICATE command itself, it is not required to implement any
         1566       authentication mechanisms other than the PLAIN mechanism described
         1567 
         1568 
         1569 
         1570 Crispin                     Standards Track                    [Page 28]
         1571 
         1572 RFC 3501                         IMAPv4                       March 2003
         1573 
         1574 
         1575       in [IMAP-TLS].  Also, an authentication mechanism is not required
         1576       to support any security layers.
         1577 
         1578            Note: a server implementation MUST implement a
         1579            configuration in which it does NOT permit any plaintext
         1580            password mechanisms, unless either the STARTTLS command
         1581            has been negotiated or some other mechanism that
         1582            protects the session from password snooping has been
         1583            provided.  Server sites SHOULD NOT use any configuration
         1584            which permits a plaintext password mechanism without
         1585            such a protection mechanism against password snooping.
         1586            Client and server implementations SHOULD implement
         1587            additional [SASL] mechanisms that do not use plaintext
         1588            passwords, such the GSSAPI mechanism described in [SASL]
         1589            and/or the [DIGEST-MD5] mechanism.
         1590 
         1591       Servers and clients can support multiple authentication
         1592       mechanisms.  The server SHOULD list its supported authentication
         1593       mechanisms in the response to the CAPABILITY command so that the
         1594       client knows which authentication mechanisms to use.
         1595 
         1596       A server MAY include a CAPABILITY response code in the tagged OK
         1597       response of a successful AUTHENTICATE command in order to send
         1598       capabilities automatically.  It is unnecessary for a client to
         1599       send a separate CAPABILITY command if it recognizes these
         1600       automatic capabilities.  This should only be done if a security
         1601       layer was not negotiated by the AUTHENTICATE command, because the
         1602       tagged OK response as part of an AUTHENTICATE command is not
         1603       protected by encryption/integrity checking.  [SASL] requires the
         1604       client to re-issue a CAPABILITY command in this case.
         1605 
         1606       If an AUTHENTICATE command fails with a NO response, the client
         1607       MAY try another authentication mechanism by issuing another
         1608       AUTHENTICATE command.  It MAY also attempt to authenticate by
         1609       using the LOGIN command (see section 6.2.3 for more detail).  In
         1610       other words, the client MAY request authentication types in
         1611       decreasing order of preference, with the LOGIN command as a last
         1612       resort.
         1613 
         1614       The authorization identity passed from the client to the server
         1615       during the authentication exchange is interpreted by the server as
         1616       the user name whose privileges the client is requesting.
         1617 
         1618 
         1619 
         1620 
         1621 
         1622 
         1623 
         1624 
         1625 
         1626 Crispin                     Standards Track                    [Page 29]
         1627 
         1628 RFC 3501                         IMAPv4                       March 2003
         1629 
         1630 
         1631    Example:    S: * OK IMAP4rev1 Server
         1632                C: A001 AUTHENTICATE GSSAPI
         1633                S: +
         1634                C: YIIB+wYJKoZIhvcSAQICAQBuggHqMIIB5qADAgEFoQMCAQ6iBw
         1635                   MFACAAAACjggEmYYIBIjCCAR6gAwIBBaESGxB1Lndhc2hpbmd0
         1636                   b24uZWR1oi0wK6ADAgEDoSQwIhsEaW1hcBsac2hpdmFtcy5jYW
         1637                   Mud2FzaGluZ3Rvbi5lZHWjgdMwgdCgAwIBAaEDAgEDooHDBIHA
         1638                   cS1GSa5b+fXnPZNmXB9SjL8Ollj2SKyb+3S0iXMljen/jNkpJX
         1639                   AleKTz6BQPzj8duz8EtoOuNfKgweViyn/9B9bccy1uuAE2HI0y
         1640                   C/PHXNNU9ZrBziJ8Lm0tTNc98kUpjXnHZhsMcz5Mx2GR6dGknb
         1641                   I0iaGcRerMUsWOuBmKKKRmVMMdR9T3EZdpqsBd7jZCNMWotjhi
         1642                   vd5zovQlFqQ2Wjc2+y46vKP/iXxWIuQJuDiisyXF0Y8+5GTpAL
         1643                   pHDc1/pIGmMIGjoAMCAQGigZsEgZg2on5mSuxoDHEA1w9bcW9n
         1644                   FdFxDKpdrQhVGVRDIzcCMCTzvUboqb5KjY1NJKJsfjRQiBYBdE
         1645                   NKfzK+g5DlV8nrw81uOcP8NOQCLR5XkoMHC0Dr/80ziQzbNqhx
         1646                   O6652Npft0LQwJvenwDI13YxpwOdMXzkWZN/XrEqOWp6GCgXTB
         1647                   vCyLWLlWnbaUkZdEYbKHBPjd8t/1x5Yg==
         1648                S: + YGgGCSqGSIb3EgECAgIAb1kwV6ADAgEFoQMCAQ+iSzBJoAMC
         1649                   AQGiQgRAtHTEuOP2BXb9sBYFR4SJlDZxmg39IxmRBOhXRKdDA0
         1650                   uHTCOT9Bq3OsUTXUlk0CsFLoa8j+gvGDlgHuqzWHPSQg==
         1651                C:
         1652                S: + YDMGCSqGSIb3EgECAgIBAAD/////6jcyG4GE3KkTzBeBiVHe
         1653                   ceP2CWY0SR0fAQAgAAQEBAQ=
         1654                C: YDMGCSqGSIb3EgECAgIBAAD/////3LQBHXTpFfZgrejpLlLImP
         1655                   wkhbfa2QteAQAgAG1yYwE=
         1656                S: A001 OK GSSAPI authentication successful
         1657 
         1658         Note: The line breaks within server challenges and client
         1659         responses are for editorial clarity and are not in real
         1660         authenticators.
         1661 
         1662 
         1663 6.2.3.  LOGIN Command
         1664 
         1665    Arguments:  user name
         1666                password
         1667 
         1668    Responses:  no specific responses for this command
         1669 
         1670    Result:     OK - login completed, now in authenticated state
         1671                NO - login failure: user name or password rejected
         1672                BAD - command unknown or arguments invalid
         1673 
         1674       The LOGIN command identifies the client to the server and carries
         1675       the plaintext password authenticating this user.
         1676 
         1677 
         1678 
         1679 
         1680 
         1681 
         1682 Crispin                     Standards Track                    [Page 30]
         1683 
         1684 RFC 3501                         IMAPv4                       March 2003
         1685 
         1686 
         1687       A server MAY include a CAPABILITY response code in the tagged OK
         1688       response to a successful LOGIN command in order to send
         1689       capabilities automatically.  It is unnecessary for a client to
         1690       send a separate CAPABILITY command if it recognizes these
         1691       automatic capabilities.
         1692 
         1693    Example:    C: a001 LOGIN SMITH SESAME
         1694                S: a001 OK LOGIN completed
         1695 
         1696         Note: Use of the LOGIN command over an insecure network
         1697         (such as the Internet) is a security risk, because anyone
         1698         monitoring network traffic can obtain plaintext passwords.
         1699         The LOGIN command SHOULD NOT be used except as a last
         1700         resort, and it is recommended that client implementations
         1701         have a means to disable any automatic use of the LOGIN
         1702         command.
         1703 
         1704         Unless either the STARTTLS command has been negotiated or
         1705         some other mechanism that protects the session from
         1706         password snooping has been provided, a server
         1707         implementation MUST implement a configuration in which it
         1708         advertises the LOGINDISABLED capability and does NOT permit
         1709         the LOGIN command.  Server sites SHOULD NOT use any
         1710         configuration which permits the LOGIN command without such
         1711         a protection mechanism against password snooping.  A client
         1712         implementation MUST NOT send a LOGIN command if the
         1713         LOGINDISABLED capability is advertised.
         1714 
         1715 6.3.    Client Commands - Authenticated State
         1716 
         1717    In the authenticated state, commands that manipulate mailboxes as
         1718    atomic entities are permitted.  Of these commands, the SELECT and
         1719    EXAMINE commands will select a mailbox for access and enter the
         1720    selected state.
         1721 
         1722    In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),
         1723    the following commands are valid in the authenticated state: SELECT,
         1724    EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB,
         1725    STATUS, and APPEND.
         1726 
         1727 
         1728 
         1729 
         1730 
         1731 
         1732 
         1733 
         1734 
         1735 
         1736 
         1737 
         1738 Crispin                     Standards Track                    [Page 31]
         1739 
         1740 RFC 3501                         IMAPv4                       March 2003
         1741 
         1742 
         1743 6.3.1.  SELECT Command
         1744 
         1745    Arguments:  mailbox name
         1746 
         1747    Responses:  REQUIRED untagged responses: FLAGS, EXISTS, RECENT
         1748                REQUIRED OK untagged responses:  UNSEEN,  PERMANENTFLAGS,
         1749                UIDNEXT, UIDVALIDITY
         1750 
         1751    Result:     OK - select completed, now in selected state
         1752                NO - select failure, now in authenticated state: no
         1753                     such mailbox, can't access mailbox
         1754                BAD - command unknown or arguments invalid
         1755 
         1756       The SELECT command selects a mailbox so that messages in the
         1757       mailbox can be accessed.  Before returning an OK to the client,
         1758       the server MUST send the following untagged data to the client.
         1759       Note that earlier versions of this protocol only required the
         1760       FLAGS, EXISTS, and RECENT untagged data; consequently, client
         1761       implementations SHOULD implement default behavior for missing data
         1762       as discussed with the individual item.
         1763 
         1764          FLAGS       Defined flags in the mailbox.  See the description
         1765                      of the FLAGS response for more detail.
         1766 
         1767          <n> EXISTS  The number of messages in the mailbox.  See the
         1768                      description of the EXISTS response for more detail.
         1769 
         1770          <n> RECENT  The number of messages with the \Recent flag set.
         1771                      See the description of the RECENT response for more
         1772                      detail.
         1773 
         1774          OK [UNSEEN <n>]
         1775                      The message sequence number of the first unseen
         1776                      message in the mailbox.  If this is missing, the
         1777                      client can not make any assumptions about the first
         1778                      unseen message in the mailbox, and needs to issue a
         1779                      SEARCH command if it wants to find it.
         1780 
         1781          OK [PERMANENTFLAGS (<list of flags>)]
         1782                      A list of message flags that the client can change
         1783                      permanently.  If this is missing, the client should
         1784                      assume that all flags can be changed permanently.
         1785 
         1786          OK [UIDNEXT <n>]
         1787                      The next unique identifier value.  Refer to section
         1788                      2.3.1.1 for more information.  If this is missing,
         1789                      the client can not make any assumptions about the
         1790                      next unique identifier value.
         1791 
         1792 
         1793 
         1794 Crispin                     Standards Track                    [Page 32]
         1795 
         1796 RFC 3501                         IMAPv4                       March 2003
         1797 
         1798 
         1799          OK [UIDVALIDITY <n>]
         1800                      The unique identifier validity value.  Refer to
         1801                      section 2.3.1.1 for more information.  If this is
         1802                      missing, the server does not support unique
         1803                      identifiers.
         1804 
         1805       Only one mailbox can be selected at a time in a connection;
         1806       simultaneous access to multiple mailboxes requires multiple
         1807       connections.  The SELECT command automatically deselects any
         1808       currently selected mailbox before attempting the new selection.
         1809       Consequently, if a mailbox is selected and a SELECT command that
         1810       fails is attempted, no mailbox is selected.
         1811 
         1812       If the client is permitted to modify the mailbox, the server
         1813       SHOULD prefix the text of the tagged OK response with the
         1814       "[READ-WRITE]" response code.
         1815 
         1816       If the client is not permitted to modify the mailbox but is
         1817       permitted read access, the mailbox is selected as read-only, and
         1818       the server MUST prefix the text of the tagged OK response to
         1819       SELECT with the "[READ-ONLY]" response code.  Read-only access
         1820       through SELECT differs from the EXAMINE command in that certain
         1821       read-only mailboxes MAY permit the change of permanent state on a
         1822       per-user (as opposed to global) basis.  Netnews messages marked in
         1823       a server-based .newsrc file are an example of such per-user
         1824       permanent state that can be modified with read-only mailboxes.
         1825 
         1826    Example:    C: A142 SELECT INBOX
         1827                S: * 172 EXISTS
         1828                S: * 1 RECENT
         1829                S: * OK [UNSEEN 12] Message 12 is first unseen
         1830                S: * OK [UIDVALIDITY 3857529045] UIDs valid
         1831                S: * OK [UIDNEXT 4392] Predicted next UID
         1832                S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
         1833                S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited
         1834                S: A142 OK [READ-WRITE] SELECT completed
         1835 
         1836 
         1837 
         1838 
         1839 
         1840 
         1841 
         1842 
         1843 
         1844 
         1845 
         1846 
         1847 
         1848 
         1849 
         1850 Crispin                     Standards Track                    [Page 33]
         1851 
         1852 RFC 3501                         IMAPv4                       March 2003
         1853 
         1854 
         1855 6.3.2.  EXAMINE Command
         1856 
         1857    Arguments:  mailbox name
         1858 
         1859    Responses:  REQUIRED untagged responses: FLAGS, EXISTS, RECENT
         1860                REQUIRED OK untagged responses:  UNSEEN,  PERMANENTFLAGS,
         1861                UIDNEXT, UIDVALIDITY
         1862 
         1863    Result:     OK - examine completed, now in selected state
         1864                NO - examine failure, now in authenticated state: no
         1865                     such mailbox, can't access mailbox
         1866                BAD - command unknown or arguments invalid
         1867 
         1868       The EXAMINE command is identical to SELECT and returns the same
         1869       output; however, the selected mailbox is identified as read-only.
         1870       No changes to the permanent state of the mailbox, including
         1871       per-user state, are permitted; in particular, EXAMINE MUST NOT
         1872       cause messages to lose the \Recent flag.
         1873 
         1874       The text of the tagged OK response to the EXAMINE command MUST
         1875       begin with the "[READ-ONLY]" response code.
         1876 
         1877    Example:    C: A932 EXAMINE blurdybloop
         1878                S: * 17 EXISTS
         1879                S: * 2 RECENT
         1880                S: * OK [UNSEEN 8] Message 8 is first unseen
         1881                S: * OK [UIDVALIDITY 3857529045] UIDs valid
         1882                S: * OK [UIDNEXT 4392] Predicted next UID
         1883                S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
         1884                S: * OK [PERMANENTFLAGS ()] No permanent flags permitted
         1885                S: A932 OK [READ-ONLY] EXAMINE completed
         1886 
         1887 
         1888 6.3.3.  CREATE Command
         1889 
         1890    Arguments:  mailbox name
         1891 
         1892    Responses:  no specific responses for this command
         1893 
         1894    Result:     OK - create completed
         1895                NO - create failure: can't create mailbox with that name
         1896                BAD - command unknown or arguments invalid
         1897 
         1898       The CREATE command creates a mailbox with the given name.  An OK
         1899       response is returned only if a new mailbox with that name has been
         1900       created.  It is an error to attempt to create INBOX or a mailbox
         1901       with a name that refers to an extant mailbox.  Any error in
         1902       creation will return a tagged NO response.
         1903 
         1904 
         1905 
         1906 Crispin                     Standards Track                    [Page 34]
         1907 
         1908 RFC 3501                         IMAPv4                       March 2003
         1909 
         1910 
         1911       If the mailbox name is suffixed with the server's hierarchy
         1912       separator character (as returned from the server by a LIST
         1913       command), this is a declaration that the client intends to create
         1914       mailbox names under this name in the hierarchy.  Server
         1915       implementations that do not require this declaration MUST ignore
         1916       the declaration.  In any case, the name created is without the
         1917       trailing hierarchy delimiter.
         1918 
         1919       If the server's hierarchy separator character appears elsewhere in
         1920       the name, the server SHOULD create any superior hierarchical names
         1921       that are needed for the CREATE command to be successfully
         1922       completed.  In other words, an attempt to create "foo/bar/zap" on
         1923       a server in which "/" is the hierarchy separator character SHOULD
         1924       create foo/ and foo/bar/ if they do not already exist.
         1925 
         1926       If a new mailbox is created with the same name as a mailbox which
         1927       was deleted, its unique identifiers MUST be greater than any
         1928       unique identifiers used in the previous incarnation of the mailbox
         1929       UNLESS the new incarnation has a different unique identifier
         1930       validity value.  See the description of the UID command for more
         1931       detail.
         1932 
         1933    Example:    C: A003 CREATE owatagusiam/
         1934                S: A003 OK CREATE completed
         1935                C: A004 CREATE owatagusiam/blurdybloop
         1936                S: A004 OK CREATE completed
         1937 
         1938         Note: The interpretation of this example depends on whether
         1939         "/" was returned as the hierarchy separator from LIST.  If
         1940         "/" is the hierarchy separator, a new level of hierarchy
         1941         named "owatagusiam" with a member called "blurdybloop" is
         1942         created.  Otherwise, two mailboxes at the same hierarchy
         1943         level are created.
         1944 
         1945 
         1946 6.3.4.  DELETE Command
         1947 
         1948    Arguments:  mailbox name
         1949 
         1950    Responses:  no specific responses for this command
         1951 
         1952    Result:     OK - delete completed
         1953                NO - delete failure: can't delete mailbox with that name
         1954                BAD - command unknown or arguments invalid
         1955 
         1956 
         1957 
         1958 
         1959 
         1960 
         1961 
         1962 Crispin                     Standards Track                    [Page 35]
         1963 
         1964 RFC 3501                         IMAPv4                       March 2003
         1965 
         1966 
         1967       The DELETE command permanently removes the mailbox with the given
         1968       name.  A tagged OK response is returned only if the mailbox has
         1969       been deleted.  It is an error to attempt to delete INBOX or a
         1970       mailbox name that does not exist.
         1971 
         1972       The DELETE command MUST NOT remove inferior hierarchical names.
         1973       For example, if a mailbox "foo" has an inferior "foo.bar"
         1974       (assuming "." is the hierarchy delimiter character), removing
         1975       "foo" MUST NOT remove "foo.bar".  It is an error to attempt to
         1976       delete a name that has inferior hierarchical names and also has
         1977       the \Noselect mailbox name attribute (see the description of the
         1978       LIST response for more details).
         1979 
         1980       It is permitted to delete a name that has inferior hierarchical
         1981       names and does not have the \Noselect mailbox name attribute.  In
         1982       this case, all messages in that mailbox are removed, and the name
         1983       will acquire the \Noselect mailbox name attribute.
         1984 
         1985       The value of the highest-used unique identifier of the deleted
         1986       mailbox MUST be preserved so that a new mailbox created with the
         1987       same name will not reuse the identifiers of the former
         1988       incarnation, UNLESS the new incarnation has a different unique
         1989       identifier validity value.  See the description of the UID command
         1990       for more detail.
         1991 
         1992    Examples:   C: A682 LIST "" *
         1993                S: * LIST () "/" blurdybloop
         1994                S: * LIST (\Noselect) "/" foo
         1995                S: * LIST () "/" foo/bar
         1996                S: A682 OK LIST completed
         1997                C: A683 DELETE blurdybloop
         1998                S: A683 OK DELETE completed
         1999                C: A684 DELETE foo
         2000                S: A684 NO Name "foo" has inferior hierarchical names
         2001                C: A685 DELETE foo/bar
         2002                S: A685 OK DELETE Completed
         2003                C: A686 LIST "" *
         2004                S: * LIST (\Noselect) "/" foo
         2005                S: A686 OK LIST completed
         2006                C: A687 DELETE foo
         2007                S: A687 OK DELETE Completed
         2008 
         2009 
         2010 
         2011 
         2012 
         2013 
         2014 
         2015 
         2016 
         2017 
         2018 Crispin                     Standards Track                    [Page 36]
         2019 
         2020 RFC 3501                         IMAPv4                       March 2003
         2021 
         2022 
         2023                C: A82 LIST "" *
         2024                S: * LIST () "." blurdybloop
         2025                S: * LIST () "." foo
         2026                S: * LIST () "." foo.bar
         2027                S: A82 OK LIST completed
         2028                C: A83 DELETE blurdybloop
         2029                S: A83 OK DELETE completed
         2030                C: A84 DELETE foo
         2031                S: A84 OK DELETE Completed
         2032                C: A85 LIST "" *
         2033                S: * LIST () "." foo.bar
         2034                S: A85 OK LIST completed
         2035                C: A86 LIST "" %
         2036                S: * LIST (\Noselect) "." foo
         2037                S: A86 OK LIST completed
         2038 
         2039 
         2040 6.3.5.  RENAME Command
         2041 
         2042    Arguments:  existing mailbox name
         2043                new mailbox name
         2044 
         2045    Responses:  no specific responses for this command
         2046 
         2047    Result:     OK - rename completed
         2048                NO - rename failure: can't rename mailbox with that name,
         2049                     can't rename to mailbox with that name
         2050                BAD - command unknown or arguments invalid
         2051 
         2052       The RENAME command changes the name of a mailbox.  A tagged OK
         2053       response is returned only if the mailbox has been renamed.  It is
         2054       an error to attempt to rename from a mailbox name that does not
         2055       exist or to a mailbox name that already exists.  Any error in
         2056       renaming will return a tagged NO response.
         2057 
         2058       If the name has inferior hierarchical names, then the inferior
         2059       hierarchical names MUST also be renamed.  For example, a rename of
         2060       "foo" to "zap" will rename "foo/bar" (assuming "/" is the
         2061       hierarchy delimiter character) to "zap/bar".
         2062 
         2063       If the server's hierarchy separator character appears in the name,
         2064       the server SHOULD create any superior hierarchical names that are
         2065       needed for the RENAME command to complete successfully.  In other
         2066       words, an attempt to rename "foo/bar/zap" to baz/rag/zowie on a
         2067       server in which "/" is the hierarchy separator character SHOULD
         2068       create baz/ and baz/rag/ if they do not already exist.
         2069 
         2070 
         2071 
         2072 
         2073 
         2074 Crispin                     Standards Track                    [Page 37]
         2075 
         2076 RFC 3501                         IMAPv4                       March 2003
         2077 
         2078 
         2079       The value of the highest-used unique identifier of the old mailbox
         2080       name MUST be preserved so that a new mailbox created with the same
         2081       name will not reuse the identifiers of the former incarnation,
         2082       UNLESS the new incarnation has a different unique identifier
         2083       validity value.  See the description of the UID command for more
         2084       detail.
         2085 
         2086       Renaming INBOX is permitted, and has special behavior.  It moves
         2087       all messages in INBOX to a new mailbox with the given name,
         2088       leaving INBOX empty.  If the server implementation supports
         2089       inferior hierarchical names of INBOX, these are unaffected by a
         2090       rename of INBOX.
         2091 
         2092    Examples:   C: A682 LIST "" *
         2093                S: * LIST () "/" blurdybloop
         2094                S: * LIST (\Noselect) "/" foo
         2095                S: * LIST () "/" foo/bar
         2096                S: A682 OK LIST completed
         2097                C: A683 RENAME blurdybloop sarasoop
         2098                S: A683 OK RENAME completed
         2099                C: A684 RENAME foo zowie
         2100                S: A684 OK RENAME Completed
         2101                C: A685 LIST "" *
         2102                S: * LIST () "/" sarasoop
         2103                S: * LIST (\Noselect) "/" zowie
         2104                S: * LIST () "/" zowie/bar
         2105                S: A685 OK LIST completed
         2106 
         2107                C: Z432 LIST "" *
         2108                S: * LIST () "." INBOX
         2109                S: * LIST () "." INBOX.bar
         2110                S: Z432 OK LIST completed
         2111                C: Z433 RENAME INBOX old-mail
         2112                S: Z433 OK RENAME completed
         2113                C: Z434 LIST "" *
         2114                S: * LIST () "." INBOX
         2115                S: * LIST () "." INBOX.bar
         2116                S: * LIST () "." old-mail
         2117                S: Z434 OK LIST completed
         2118 
         2119 
         2120 
         2121 
         2122 
         2123 
         2124 
         2125 
         2126 
         2127 
         2128 
         2129 
         2130 Crispin                     Standards Track                    [Page 38]
         2131 
         2132 RFC 3501                         IMAPv4                       March 2003
         2133 
         2134 
         2135 6.3.6.  SUBSCRIBE Command
         2136 
         2137    Arguments:  mailbox
         2138 
         2139    Responses:  no specific responses for this command
         2140 
         2141    Result:     OK - subscribe completed
         2142                NO - subscribe failure: can't subscribe to that name
         2143                BAD - command unknown or arguments invalid
         2144 
         2145       The SUBSCRIBE command adds the specified mailbox name to the
         2146       server's set of "active" or "subscribed" mailboxes as returned by
         2147       the LSUB command.  This command returns a tagged OK response only
         2148       if the subscription is successful.
         2149 
         2150       A server MAY validate the mailbox argument to SUBSCRIBE to verify
         2151       that it exists.  However, it MUST NOT unilaterally remove an
         2152       existing mailbox name from the subscription list even if a mailbox
         2153       by that name no longer exists.
         2154 
         2155            Note: This requirement is because a server site can
         2156            choose to routinely remove a mailbox with a well-known
         2157            name (e.g., "system-alerts") after its contents expire,
         2158            with the intention of recreating it when new contents
         2159            are appropriate.
         2160 
         2161 
         2162    Example:    C: A002 SUBSCRIBE #news.comp.mail.mime
         2163                S: A002 OK SUBSCRIBE completed
         2164 
         2165 
         2166 6.3.7.  UNSUBSCRIBE Command
         2167 
         2168    Arguments:  mailbox name
         2169 
         2170    Responses:  no specific responses for this command
         2171 
         2172    Result:     OK - unsubscribe completed
         2173                NO - unsubscribe failure: can't unsubscribe that name
         2174                BAD - command unknown or arguments invalid
         2175 
         2176       The UNSUBSCRIBE command removes the specified mailbox name from
         2177       the server's set of "active" or "subscribed" mailboxes as returned
         2178       by the LSUB command.  This command returns a tagged OK response
         2179       only if the unsubscription is successful.
         2180 
         2181    Example:    C: A002 UNSUBSCRIBE #news.comp.mail.mime
         2182                S: A002 OK UNSUBSCRIBE completed
         2183 
         2184 
         2185 
         2186 Crispin                     Standards Track                    [Page 39]
         2187 
         2188 RFC 3501                         IMAPv4                       March 2003
         2189 
         2190 
         2191 6.3.8.  LIST Command
         2192 
         2193    Arguments:  reference name
         2194                mailbox name with possible wildcards
         2195 
         2196    Responses:  untagged responses: LIST
         2197 
         2198    Result:     OK - list completed
         2199                NO - list failure: can't list that reference or name
         2200                BAD - command unknown or arguments invalid
         2201 
         2202       The LIST command returns a subset of names from the complete set
         2203       of all names available to the client.  Zero or more untagged LIST
         2204       replies are returned, containing the name attributes, hierarchy
         2205       delimiter, and name; see the description of the LIST reply for
         2206       more detail.
         2207 
         2208       The LIST command SHOULD return its data quickly, without undue
         2209       delay.  For example, it SHOULD NOT go to excess trouble to
         2210       calculate the \Marked or \Unmarked status or perform other
         2211       processing; if each name requires 1 second of processing, then a
         2212       list of 1200 names would take 20 minutes!
         2213 
         2214       An empty ("" string) reference name argument indicates that the
         2215       mailbox name is interpreted as by SELECT.  The returned mailbox
         2216       names MUST match the supplied mailbox name pattern.  A non-empty
         2217       reference name argument is the name of a mailbox or a level of
         2218       mailbox hierarchy, and indicates the context in which the mailbox
         2219       name is interpreted.
         2220 
         2221       An empty ("" string) mailbox name argument is a special request to
         2222       return the hierarchy delimiter and the root name of the name given
         2223       in the reference.  The value returned as the root MAY be the empty
         2224       string if the reference is non-rooted or is an empty string.  In
         2225       all cases, a hierarchy delimiter (or NIL if there is no hierarchy)
         2226       is returned.  This permits a client to get the hierarchy delimiter
         2227       (or find out that the mailbox names are flat) even when no
         2228       mailboxes by that name currently exist.
         2229 
         2230       The reference and mailbox name arguments are interpreted into a
         2231       canonical form that represents an unambiguous left-to-right
         2232       hierarchy.  The returned mailbox names will be in the interpreted
         2233       form.
         2234 
         2235 
         2236 
         2237 
         2238 
         2239 
         2240 
         2241 
         2242 Crispin                     Standards Track                    [Page 40]
         2243 
         2244 RFC 3501                         IMAPv4                       March 2003
         2245 
         2246 
         2247            Note: The interpretation of the reference argument is
         2248            implementation-defined.  It depends upon whether the
         2249            server implementation has a concept of the "current
         2250            working directory" and leading "break out characters",
         2251            which override the current working directory.
         2252 
         2253            For example, on a server which exports a UNIX or NT
         2254            filesystem, the reference argument contains the current
         2255            working directory, and the mailbox name argument would
         2256            contain the name as interpreted in the current working
         2257            directory.
         2258 
         2259            If a server implementation has no concept of break out
         2260            characters, the canonical form is normally the reference
         2261            name appended with the mailbox name.  Note that if the
         2262            server implements the namespace convention (section
         2263            5.1.2), "#" is a break out character and must be treated
         2264            as such.
         2265 
         2266            If the reference argument is not a level of mailbox
         2267            hierarchy (that is, it is a \NoInferiors name), and/or
         2268            the reference argument does not end with the hierarchy
         2269            delimiter, it is implementation-dependent how this is
         2270            interpreted.  For example, a reference of "foo/bar" and
         2271            mailbox name of "rag/baz" could be interpreted as
         2272            "foo/bar/rag/baz", "foo/barrag/baz", or "foo/rag/baz".
         2273            A client SHOULD NOT use such a reference argument except
         2274            at the explicit request of the user.  A hierarchical
         2275            browser MUST NOT make any assumptions about server
         2276            interpretation of the reference unless the reference is
         2277            a level of mailbox hierarchy AND ends with the hierarchy
         2278            delimiter.
         2279 
         2280       Any part of the reference argument that is included in the
         2281       interpreted form SHOULD prefix the interpreted form.  It SHOULD
         2282       also be in the same form as the reference name argument.  This
         2283       rule permits the client to determine if the returned mailbox name
         2284       is in the context of the reference argument, or if something about
         2285       the mailbox argument overrode the reference argument.  Without
         2286       this rule, the client would have to have knowledge of the server's
         2287       naming semantics including what characters are "breakouts" that
         2288       override a naming context.
         2289 
         2290 
         2291 
         2292 
         2293 
         2294 
         2295 
         2296 
         2297 
         2298 Crispin                     Standards Track                    [Page 41]
         2299 
         2300 RFC 3501                         IMAPv4                       March 2003
         2301 
         2302 
         2303            For example, here are some examples of how references
         2304            and mailbox names might be interpreted on a UNIX-based
         2305            server:
         2306 
         2307                Reference     Mailbox Name  Interpretation
         2308                ------------  ------------  --------------
         2309                ~smith/Mail/  foo.*         ~smith/Mail/foo.*
         2310                archive/      %             archive/%
         2311                #news.        comp.mail.*   #news.comp.mail.*
         2312                ~smith/Mail/  /usr/doc/foo  /usr/doc/foo
         2313                archive/      ~fred/Mail/*  ~fred/Mail/*
         2314 
         2315            The first three examples demonstrate interpretations in
         2316            the context of the reference argument.  Note that
         2317            "~smith/Mail" SHOULD NOT be transformed into something
         2318            like "/u2/users/smith/Mail", or it would be impossible
         2319            for the client to determine that the interpretation was
         2320            in the context of the reference.
         2321 
         2322       The character "*" is a wildcard, and matches zero or more
         2323       characters at this position.  The character "%" is similar to "*",
         2324       but it does not match a hierarchy delimiter.  If the "%" wildcard
         2325       is the last character of a mailbox name argument, matching levels
         2326       of hierarchy are also returned.  If these levels of hierarchy are
         2327       not also selectable mailboxes, they are returned with the
         2328       \Noselect mailbox name attribute (see the description of the LIST
         2329       response for more details).
         2330 
         2331       Server implementations are permitted to "hide" otherwise
         2332       accessible mailboxes from the wildcard characters, by preventing
         2333       certain characters or names from matching a wildcard in certain
         2334       situations.  For example, a UNIX-based server might restrict the
         2335       interpretation of "*" so that an initial "/" character does not
         2336       match.
         2337 
         2338       The special name INBOX is included in the output from LIST, if
         2339       INBOX is supported by this server for this user and if the
         2340       uppercase string "INBOX" matches the interpreted reference and
         2341       mailbox name arguments with wildcards as described above.  The
         2342       criteria for omitting INBOX is whether SELECT INBOX will return
         2343       failure; it is not relevant whether the user's real INBOX resides
         2344       on this or some other server.
         2345 
         2346 
         2347 
         2348 
         2349 
         2350 
         2351 
         2352 
         2353 
         2354 Crispin                     Standards Track                    [Page 42]
         2355 
         2356 RFC 3501                         IMAPv4                       March 2003
         2357 
         2358 
         2359    Example:    C: A101 LIST "" ""
         2360                S: * LIST (\Noselect) "/" ""
         2361                S: A101 OK LIST Completed
         2362                C: A102 LIST #news.comp.mail.misc ""
         2363                S: * LIST (\Noselect) "." #news.
         2364                S: A102 OK LIST Completed
         2365                C: A103 LIST /usr/staff/jones ""
         2366                S: * LIST (\Noselect) "/" /
         2367                S: A103 OK LIST Completed
         2368                C: A202 LIST ~/Mail/ %
         2369                S: * LIST (\Noselect) "/" ~/Mail/foo
         2370                S: * LIST () "/" ~/Mail/meetings
         2371                S: A202 OK LIST completed
         2372 
         2373 
         2374 6.3.9.  LSUB Command
         2375 
         2376    Arguments:  reference name
         2377                mailbox name with possible wildcards
         2378 
         2379    Responses:  untagged responses: LSUB
         2380 
         2381    Result:     OK - lsub completed
         2382                NO - lsub failure: can't list that reference or name
         2383                BAD - command unknown or arguments invalid
         2384 
         2385       The LSUB command returns a subset of names from the set of names
         2386       that the user has declared as being "active" or "subscribed".
         2387       Zero or more untagged LSUB replies are returned.  The arguments to
         2388       LSUB are in the same form as those for LIST.
         2389 
         2390       The returned untagged LSUB response MAY contain different mailbox
         2391       flags from a LIST untagged response.  If this should happen, the
         2392       flags in the untagged LIST are considered more authoritative.
         2393 
         2394       A special situation occurs when using LSUB with the % wildcard.
         2395       Consider what happens if "foo/bar" (with a hierarchy delimiter of
         2396       "/") is subscribed but "foo" is not.  A "%" wildcard to LSUB must
         2397       return foo, not foo/bar, in the LSUB response, and it MUST be
         2398       flagged with the \Noselect attribute.
         2399 
         2400       The server MUST NOT unilaterally remove an existing mailbox name
         2401       from the subscription list even if a mailbox by that name no
         2402       longer exists.
         2403 
         2404 
         2405 
         2406 
         2407 
         2408 
         2409 
         2410 Crispin                     Standards Track                    [Page 43]
         2411 
         2412 RFC 3501                         IMAPv4                       March 2003
         2413 
         2414 
         2415    Example:    C: A002 LSUB "#news." "comp.mail.*"
         2416                S: * LSUB () "." #news.comp.mail.mime
         2417                S: * LSUB () "." #news.comp.mail.misc
         2418                S: A002 OK LSUB completed
         2419                C: A003 LSUB "#news." "comp.%"
         2420                S: * LSUB (\NoSelect) "." #news.comp.mail
         2421                S: A003 OK LSUB completed
         2422 
         2423 
         2424 6.3.10. STATUS Command
         2425 
         2426    Arguments:  mailbox name
         2427                status data item names
         2428 
         2429    Responses:  untagged responses: STATUS
         2430 
         2431    Result:     OK - status completed
         2432                NO - status failure: no status for that name
         2433                BAD - command unknown or arguments invalid
         2434 
         2435       The STATUS command requests the status of the indicated mailbox.
         2436       It does not change the currently selected mailbox, nor does it
         2437       affect the state of any messages in the queried mailbox (in
         2438       particular, STATUS MUST NOT cause messages to lose the \Recent
         2439       flag).
         2440 
         2441       The STATUS command provides an alternative to opening a second
         2442       IMAP4rev1 connection and doing an EXAMINE command on a mailbox to
         2443       query that mailbox's status without deselecting the current
         2444       mailbox in the first IMAP4rev1 connection.
         2445 
         2446       Unlike the LIST command, the STATUS command is not guaranteed to
         2447       be fast in its response.  Under certain circumstances, it can be
         2448       quite slow.  In some implementations, the server is obliged to
         2449       open the mailbox read-only internally to obtain certain status
         2450       information.  Also unlike the LIST command, the STATUS command
         2451       does not accept wildcards.
         2452 
         2453            Note: The STATUS command is intended to access the
         2454            status of mailboxes other than the currently selected
         2455            mailbox.  Because the STATUS command can cause the
         2456            mailbox to be opened internally, and because this
         2457            information is available by other means on the selected
         2458            mailbox, the STATUS command SHOULD NOT be used on the
         2459            currently selected mailbox.
         2460 
         2461 
         2462 
         2463 
         2464 
         2465 
         2466 Crispin                     Standards Track                    [Page 44]
         2467 
         2468 RFC 3501                         IMAPv4                       March 2003
         2469 
         2470 
         2471            The STATUS command MUST NOT be used as a "check for new
         2472            messages in the selected mailbox" operation (refer to
         2473            sections 7, 7.3.1, and 7.3.2 for more information about
         2474            the proper method for new message checking).
         2475 
         2476            Because the STATUS command is not guaranteed to be fast
         2477            in its results, clients SHOULD NOT expect to be able to
         2478            issue many consecutive STATUS commands and obtain
         2479            reasonable performance.
         2480 
         2481       The currently defined status data items that can be requested are:
         2482 
         2483       MESSAGES
         2484          The number of messages in the mailbox.
         2485 
         2486       RECENT
         2487          The number of messages with the \Recent flag set.
         2488 
         2489       UIDNEXT
         2490          The next unique identifier value of the mailbox.  Refer to
         2491          section 2.3.1.1 for more information.
         2492 
         2493       UIDVALIDITY
         2494          The unique identifier validity value of the mailbox.  Refer to
         2495          section 2.3.1.1 for more information.
         2496 
         2497       UNSEEN
         2498          The number of messages which do not have the \Seen flag set.
         2499 
         2500 
         2501    Example:    C: A042 STATUS blurdybloop (UIDNEXT MESSAGES)
         2502                S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)
         2503                S: A042 OK STATUS completed
         2504 
         2505 
         2506 
         2507 
         2508 
         2509 
         2510 
         2511 
         2512 
         2513 
         2514 
         2515 
         2516 
         2517 
         2518 
         2519 
         2520 
         2521 
         2522 Crispin                     Standards Track                    [Page 45]
         2523 
         2524 RFC 3501                         IMAPv4                       March 2003
         2525 
         2526 
         2527 6.3.11. APPEND Command
         2528 
         2529    Arguments:  mailbox name
         2530                OPTIONAL flag parenthesized list
         2531                OPTIONAL date/time string
         2532                message literal
         2533 
         2534    Responses:  no specific responses for this command
         2535 
         2536    Result:     OK - append completed
         2537                NO - append error: can't append to that mailbox, error
         2538                     in flags or date/time or message text
         2539                BAD - command unknown or arguments invalid
         2540 
         2541       The APPEND command appends the literal argument as a new message
         2542       to the end of the specified destination mailbox.  This argument
         2543       SHOULD be in the format of an [RFC-2822] message.  8-bit
         2544       characters are permitted in the message.  A server implementation
         2545       that is unable to preserve 8-bit data properly MUST be able to
         2546       reversibly convert 8-bit APPEND data to 7-bit using a [MIME-IMB]
         2547       content transfer encoding.
         2548 
         2549            Note: There MAY be exceptions, e.g., draft messages, in
         2550            which required [RFC-2822] header lines are omitted in
         2551            the message literal argument to APPEND.  The full
         2552            implications of doing so MUST be understood and
         2553            carefully weighed.
         2554 
         2555       If a flag parenthesized list is specified, the flags SHOULD be set
         2556       in the resulting message; otherwise, the flag list of the
         2557       resulting message is set to empty by default.  In either case, the
         2558       Recent flag is also set.
         2559 
         2560       If a date-time is specified, the internal date SHOULD be set in
         2561       the resulting message; otherwise, the internal date of the
         2562       resulting message is set to the current date and time by default.
         2563 
         2564       If the append is unsuccessful for any reason, the mailbox MUST be
         2565       restored to its state before the APPEND attempt; no partial
         2566       appending is permitted.
         2567 
         2568       If the destination mailbox does not exist, a server MUST return an
         2569       error, and MUST NOT automatically create the mailbox.  Unless it
         2570       is certain that the destination mailbox can not be created, the
         2571       server MUST send the response code "[TRYCREATE]" as the prefix of
         2572       the text of the tagged NO response.  This gives a hint to the
         2573       client that it can attempt a CREATE command and retry the APPEND
         2574       if the CREATE is successful.
         2575 
         2576 
         2577 
         2578 Crispin                     Standards Track                    [Page 46]
         2579 
         2580 RFC 3501                         IMAPv4                       March 2003
         2581 
         2582 
         2583       If the mailbox is currently selected, the normal new message
         2584       actions SHOULD occur.  Specifically, the server SHOULD notify the
         2585       client immediately via an untagged EXISTS response.  If the server
         2586       does not do so, the client MAY issue a NOOP command (or failing
         2587       that, a CHECK command) after one or more APPEND commands.
         2588 
         2589    Example:    C: A003 APPEND saved-messages (\Seen) {310}
         2590                S: + Ready for literal data
         2591                C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
         2592                C: From: Fred Foobar <foobar@Blurdybloop.COM>
         2593                C: Subject: afternoon meeting
         2594                C: To: mooch@owatagu.siam.edu
         2595                C: Message-Id: <B27397-0100000@Blurdybloop.COM>
         2596                C: MIME-Version: 1.0
         2597                C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
         2598                C:
         2599                C: Hello Joe, do you think we can meet at 3:30 tomorrow?
         2600                C:
         2601                S: A003 OK APPEND completed
         2602 
         2603         Note: The APPEND command is not used for message delivery,
         2604         because it does not provide a mechanism to transfer [SMTP]
         2605         envelope information.
         2606 
         2607 6.4.    Client Commands - Selected State
         2608 
         2609    In the selected state, commands that manipulate messages in a mailbox
         2610    are permitted.
         2611 
         2612    In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),
         2613    and the authenticated state commands (SELECT, EXAMINE, CREATE,
         2614    DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, and
         2615    APPEND), the following commands are valid in the selected state:
         2616    CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, and UID.
         2617 
         2618 6.4.1.  CHECK Command
         2619 
         2620    Arguments:  none
         2621 
         2622    Responses:  no specific responses for this command
         2623 
         2624    Result:     OK - check completed
         2625                BAD - command unknown or arguments invalid
         2626 
         2627       The CHECK command requests a checkpoint of the currently selected
         2628       mailbox.  A checkpoint refers to any implementation-dependent
         2629       housekeeping associated with the mailbox (e.g., resolving the
         2630       server's in-memory state of the mailbox with the state on its
         2631 
         2632 
         2633 
         2634 Crispin                     Standards Track                    [Page 47]
         2635 
         2636 RFC 3501                         IMAPv4                       March 2003
         2637 
         2638 
         2639       disk) that is not normally executed as part of each command.  A
         2640       checkpoint MAY take a non-instantaneous amount of real time to
         2641       complete.  If a server implementation has no such housekeeping
         2642       considerations, CHECK is equivalent to NOOP.
         2643 
         2644       There is no guarantee that an EXISTS untagged response will happen
         2645       as a result of CHECK.  NOOP, not CHECK, SHOULD be used for new
         2646       message polling.
         2647 
         2648    Example:    C: FXXZ CHECK
         2649                S: FXXZ OK CHECK Completed
         2650 
         2651 
         2652 6.4.2.  CLOSE Command
         2653 
         2654    Arguments:  none
         2655 
         2656    Responses:  no specific responses for this command
         2657 
         2658    Result:     OK - close completed, now in authenticated state
         2659                BAD - command unknown or arguments invalid
         2660 
         2661       The CLOSE command permanently removes all messages that have the
         2662       \Deleted flag set from the currently selected mailbox, and returns
         2663       to the authenticated state from the selected state.  No untagged
         2664       EXPUNGE responses are sent.
         2665 
         2666       No messages are removed, and no error is given, if the mailbox is
         2667       selected by an EXAMINE command or is otherwise selected read-only.
         2668 
         2669       Even if a mailbox is selected, a SELECT, EXAMINE, or LOGOUT
         2670       command MAY be issued without previously issuing a CLOSE command.
         2671       The SELECT, EXAMINE, and LOGOUT commands implicitly close the
         2672       currently selected mailbox without doing an expunge.  However,
         2673       when many messages are deleted, a CLOSE-LOGOUT or CLOSE-SELECT
         2674       sequence is considerably faster than an EXPUNGE-LOGOUT or
         2675       EXPUNGE-SELECT because no untagged EXPUNGE responses (which the
         2676       client would probably ignore) are sent.
         2677 
         2678    Example:    C: A341 CLOSE
         2679                S: A341 OK CLOSE completed
         2680 
         2681 
         2682 
         2683 
         2684 
         2685 
         2686 
         2687 
         2688 
         2689 
         2690 Crispin                     Standards Track                    [Page 48]
         2691 
         2692 RFC 3501                         IMAPv4                       March 2003
         2693 
         2694 
         2695 6.4.3.  EXPUNGE Command
         2696 
         2697    Arguments:  none
         2698 
         2699    Responses:  untagged responses: EXPUNGE
         2700 
         2701    Result:     OK - expunge completed
         2702                NO - expunge failure: can't expunge (e.g., permission
         2703                     denied)
         2704                BAD - command unknown or arguments invalid
         2705 
         2706       The EXPUNGE command permanently removes all messages that have the
         2707       \Deleted flag set from the currently selected mailbox.  Before
         2708       returning an OK to the client, an untagged EXPUNGE response is
         2709       sent for each message that is removed.
         2710 
         2711    Example:    C: A202 EXPUNGE
         2712                S: * 3 EXPUNGE
         2713                S: * 3 EXPUNGE
         2714                S: * 5 EXPUNGE
         2715                S: * 8 EXPUNGE
         2716                S: A202 OK EXPUNGE completed
         2717 
         2718         Note: In this example, messages 3, 4, 7, and 11 had the
         2719         \Deleted flag set.  See the description of the EXPUNGE
         2720         response for further explanation.
         2721 
         2722 
         2723 6.4.4.  SEARCH Command
         2724 
         2725    Arguments:  OPTIONAL [CHARSET] specification
         2726                searching criteria (one or more)
         2727 
         2728    Responses:  REQUIRED untagged response: SEARCH
         2729 
         2730    Result:     OK - search completed
         2731                NO - search error: can't search that [CHARSET] or
         2732                     criteria
         2733                BAD - command unknown or arguments invalid
         2734 
         2735       The SEARCH command searches the mailbox for messages that match
         2736       the given searching criteria.  Searching criteria consist of one
         2737       or more search keys.  The untagged SEARCH response from the server
         2738       contains a listing of message sequence numbers corresponding to
         2739       those messages that match the searching criteria.
         2740 
         2741 
         2742 
         2743 
         2744 
         2745 
         2746 Crispin                     Standards Track                    [Page 49]
         2747 
         2748 RFC 3501                         IMAPv4                       March 2003
         2749 
         2750 
         2751       When multiple keys are specified, the result is the intersection
         2752       (AND function) of all the messages that match those keys.  For
         2753       example, the criteria DELETED FROM "SMITH" SINCE 1-Feb-1994 refers
         2754       to all deleted messages from Smith that were placed in the mailbox
         2755       since February 1, 1994.  A search key can also be a parenthesized
         2756       list of one or more search keys (e.g., for use with the OR and NOT
         2757       keys).
         2758 
         2759       Server implementations MAY exclude [MIME-IMB] body parts with
         2760       terminal content media types other than TEXT and MESSAGE from
         2761       consideration in SEARCH matching.
         2762 
         2763       The OPTIONAL [CHARSET] specification consists of the word
         2764       "CHARSET" followed by a registered [CHARSET].  It indicates the
         2765       [CHARSET] of the strings that appear in the search criteria.
         2766       [MIME-IMB] content transfer encodings, and [MIME-HDRS] strings in
         2767       [RFC-2822]/[MIME-IMB] headers, MUST be decoded before comparing
         2768       text in a [CHARSET] other than US-ASCII.  US-ASCII MUST be
         2769       supported; other [CHARSET]s MAY be supported.
         2770 
         2771       If the server does not support the specified [CHARSET], it MUST
         2772       return a tagged NO response (not a BAD).  This response SHOULD
         2773       contain the BADCHARSET response code, which MAY list the
         2774       [CHARSET]s supported by the server.
         2775 
         2776       In all search keys that use strings, a message matches the key if
         2777       the string is a substring of the field.  The matching is
         2778       case-insensitive.
         2779 
         2780       The defined search keys are as follows.  Refer to the Formal
         2781       Syntax section for the precise syntactic definitions of the
         2782       arguments.
         2783 
         2784       <sequence set>
         2785          Messages with message sequence numbers corresponding to the
         2786          specified message sequence number set.
         2787 
         2788       ALL
         2789          All messages in the mailbox; the default initial key for
         2790          ANDing.
         2791 
         2792       ANSWERED
         2793          Messages with the \Answered flag set.
         2794 
         2795 
         2796 
         2797 
         2798 
         2799 
         2800 
         2801 
         2802 Crispin                     Standards Track                    [Page 50]
         2803 
         2804 RFC 3501                         IMAPv4                       March 2003
         2805 
         2806 
         2807       BCC <string>
         2808          Messages that contain the specified string in the envelope
         2809          structure's BCC field.
         2810 
         2811       BEFORE <date>
         2812          Messages whose internal date (disregarding time and timezone)
         2813          is earlier than the specified date.
         2814 
         2815       BODY <string>
         2816          Messages that contain the specified string in the body of the
         2817          message.
         2818 
         2819       CC <string>
         2820          Messages that contain the specified string in the envelope
         2821          structure's CC field.
         2822 
         2823       DELETED
         2824          Messages with the \Deleted flag set.
         2825 
         2826       DRAFT
         2827          Messages with the \Draft flag set.
         2828 
         2829       FLAGGED
         2830          Messages with the \Flagged flag set.
         2831 
         2832       FROM <string>
         2833          Messages that contain the specified string in the envelope
         2834          structure's FROM field.
         2835 
         2836       HEADER <field-name> <string>
         2837          Messages that have a header with the specified field-name (as
         2838          defined in [RFC-2822]) and that contains the specified string
         2839          in the text of the header (what comes after the colon).  If the
         2840          string to search is zero-length, this matches all messages that
         2841          have a header line with the specified field-name regardless of
         2842          the contents.
         2843 
         2844       KEYWORD <flag>
         2845          Messages with the specified keyword flag set.
         2846 
         2847       LARGER <n>
         2848          Messages with an [RFC-2822] size larger than the specified
         2849          number of octets.
         2850 
         2851       NEW
         2852          Messages that have the \Recent flag set but not the \Seen flag.
         2853          This is functionally equivalent to "(RECENT UNSEEN)".
         2854 
         2855 
         2856 
         2857 
         2858 Crispin                     Standards Track                    [Page 51]
         2859 
         2860 RFC 3501                         IMAPv4                       March 2003
         2861 
         2862 
         2863       NOT <search-key>
         2864          Messages that do not match the specified search key.
         2865 
         2866       OLD
         2867          Messages that do not have the \Recent flag set.  This is
         2868          functionally equivalent to "NOT RECENT" (as opposed to "NOT
         2869          NEW").
         2870 
         2871       ON <date>
         2872          Messages whose internal date (disregarding time and timezone)
         2873          is within the specified date.
         2874 
         2875       OR <search-key1> <search-key2>
         2876          Messages that match either search key.
         2877 
         2878       RECENT
         2879          Messages that have the \Recent flag set.
         2880 
         2881       SEEN
         2882          Messages that have the \Seen flag set.
         2883 
         2884       SENTBEFORE <date>
         2885          Messages whose [RFC-2822] Date: header (disregarding time and
         2886          timezone) is earlier than the specified date.
         2887 
         2888       SENTON <date>
         2889          Messages whose [RFC-2822] Date: header (disregarding time and
         2890          timezone) is within the specified date.
         2891 
         2892       SENTSINCE <date>
         2893          Messages whose [RFC-2822] Date: header (disregarding time and
         2894          timezone) is within or later than the specified date.
         2895 
         2896       SINCE <date>
         2897          Messages whose internal date (disregarding time and timezone)
         2898          is within or later than the specified date.
         2899 
         2900       SMALLER <n>
         2901          Messages with an [RFC-2822] size smaller than the specified
         2902          number of octets.
         2903 
         2904 
         2905 
         2906 
         2907 
         2908 
         2909 
         2910 
         2911 
         2912 
         2913 
         2914 Crispin                     Standards Track                    [Page 52]
         2915 
         2916 RFC 3501                         IMAPv4                       March 2003
         2917 
         2918 
         2919       SUBJECT <string>
         2920          Messages that contain the specified string in the envelope
         2921          structure's SUBJECT field.
         2922 
         2923       TEXT <string>
         2924          Messages that contain the specified string in the header or
         2925          body of the message.
         2926 
         2927       TO <string>
         2928          Messages that contain the specified string in the envelope
         2929          structure's TO field.
         2930 
         2931       UID <sequence set>
         2932          Messages with unique identifiers corresponding to the specified
         2933          unique identifier set.  Sequence set ranges are permitted.
         2934 
         2935       UNANSWERED
         2936          Messages that do not have the \Answered flag set.
         2937 
         2938       UNDELETED
         2939          Messages that do not have the \Deleted flag set.
         2940 
         2941       UNDRAFT
         2942          Messages that do not have the \Draft flag set.
         2943 
         2944       UNFLAGGED
         2945          Messages that do not have the \Flagged flag set.
         2946 
         2947       UNKEYWORD <flag>
         2948          Messages that do not have the specified keyword flag set.
         2949 
         2950       UNSEEN
         2951          Messages that do not have the \Seen flag set.
         2952 
         2953 
         2954 
         2955 
         2956 
         2957 
         2958 
         2959 
         2960 
         2961 
         2962 
         2963 
         2964 
         2965 
         2966 
         2967 
         2968 
         2969 
         2970 Crispin                     Standards Track                    [Page 53]
         2971 
         2972 RFC 3501                         IMAPv4                       March 2003
         2973 
         2974 
         2975    Example:    C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM "Smith"
         2976                S: * SEARCH 2 84 882
         2977                S: A282 OK SEARCH completed
         2978                C: A283 SEARCH TEXT "string not in mailbox"
         2979                S: * SEARCH
         2980                S: A283 OK SEARCH completed
         2981                C: A284 SEARCH CHARSET UTF-8 TEXT {6}
         2982                C: XXXXXX
         2983                S: * SEARCH 43
         2984                S: A284 OK SEARCH completed
         2985 
         2986         Note: Since this document is restricted to 7-bit ASCII
         2987         text, it is not possible to show actual UTF-8 data.  The
         2988         "XXXXXX" is a placeholder for what would be 6 octets of
         2989         8-bit data in an actual transaction.
         2990 
         2991 
         2992 6.4.5.  FETCH Command
         2993 
         2994    Arguments:  sequence set
         2995                message data item names or macro
         2996 
         2997    Responses:  untagged responses: FETCH
         2998 
         2999    Result:     OK - fetch completed
         3000                NO - fetch error: can't fetch that data
         3001                BAD - command unknown or arguments invalid
         3002 
         3003       The FETCH command retrieves data associated with a message in the
         3004       mailbox.  The data items to be fetched can be either a single atom
         3005       or a parenthesized list.
         3006 
         3007       Most data items, identified in the formal syntax under the
         3008       msg-att-static rule, are static and MUST NOT change for any
         3009       particular message.  Other data items, identified in the formal
         3010       syntax under the msg-att-dynamic rule, MAY change, either as a
         3011       result of a STORE command or due to external events.
         3012 
         3013            For example, if a client receives an ENVELOPE for a
         3014            message when it already knows the envelope, it can
         3015            safely ignore the newly transmitted envelope.
         3016 
         3017       There are three macros which specify commonly-used sets of data
         3018       items, and can be used instead of data items.  A macro must be
         3019       used by itself, and not in conjunction with other macros or data
         3020       items.
         3021 
         3022 
         3023 
         3024 
         3025 
         3026 Crispin                     Standards Track                    [Page 54]
         3027 
         3028 RFC 3501                         IMAPv4                       March 2003
         3029 
         3030 
         3031       ALL
         3032          Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)
         3033 
         3034       FAST
         3035          Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE)
         3036 
         3037       FULL
         3038          Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE
         3039          BODY)
         3040 
         3041       The currently defined data items that can be fetched are:
         3042 
         3043       BODY
         3044          Non-extensible form of BODYSTRUCTURE.
         3045 
         3046       BODY[<section>]<<partial>>
         3047          The text of a particular body section.  The section
         3048          specification is a set of zero or more part specifiers
         3049          delimited by periods.  A part specifier is either a part number
         3050          or one of the following: HEADER, HEADER.FIELDS,
         3051          HEADER.FIELDS.NOT, MIME, and TEXT.  An empty section
         3052          specification refers to the entire message, including the
         3053          header.
         3054 
         3055          Every message has at least one part number.  Non-[MIME-IMB]
         3056          messages, and non-multipart [MIME-IMB] messages with no
         3057          encapsulated message, only have a part 1.
         3058 
         3059          Multipart messages are assigned consecutive part numbers, as
         3060          they occur in the message.  If a particular part is of type
         3061          message or multipart, its parts MUST be indicated by a period
         3062          followed by the part number within that nested multipart part.
         3063 
         3064          A part of type MESSAGE/RFC822 also has nested part numbers,
         3065          referring to parts of the MESSAGE part's body.
         3066 
         3067          The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, and TEXT part
         3068          specifiers can be the sole part specifier or can be prefixed by
         3069          one or more numeric part specifiers, provided that the numeric
         3070          part specifier refers to a part of type MESSAGE/RFC822.  The
         3071          MIME part specifier MUST be prefixed by one or more numeric
         3072          part specifiers.
         3073 
         3074          The HEADER, HEADER.FIELDS, and HEADER.FIELDS.NOT part
         3075          specifiers refer to the [RFC-2822] header of the message or of
         3076          an encapsulated [MIME-IMT] MESSAGE/RFC822 message.
         3077          HEADER.FIELDS and HEADER.FIELDS.NOT are followed by a list of
         3078          field-name (as defined in [RFC-2822]) names, and return a
         3079 
         3080 
         3081 
         3082 Crispin                     Standards Track                    [Page 55]
         3083 
         3084 RFC 3501                         IMAPv4                       March 2003
         3085 
         3086 
         3087          subset of the header.  The subset returned by HEADER.FIELDS
         3088          contains only those header fields with a field-name that
         3089          matches one of the names in the list; similarly, the subset
         3090          returned by HEADER.FIELDS.NOT contains only the header fields
         3091          with a non-matching field-name.  The field-matching is
         3092          case-insensitive but otherwise exact.  Subsetting does not
         3093          exclude the [RFC-2822] delimiting blank line between the header
         3094          and the body; the blank line is included in all header fetches,
         3095          except in the case of a message which has no body and no blank
         3096          line.
         3097 
         3098          The MIME part specifier refers to the [MIME-IMB] header for
         3099          this part.
         3100 
         3101          The TEXT part specifier refers to the text body of the message,
         3102          omitting the [RFC-2822] header.
         3103 
         3104             Here is an example of a complex message with some of its
         3105             part specifiers:
         3106 
         3107        HEADER     ([RFC-2822] header of the message)
         3108        TEXT       ([RFC-2822] text body of the message) MULTIPART/MIXED
         3109        1          TEXT/PLAIN
         3110        2          APPLICATION/OCTET-STREAM
         3111        3          MESSAGE/RFC822
         3112        3.HEADER   ([RFC-2822] header of the message)
         3113        3.TEXT     ([RFC-2822] text body of the message) MULTIPART/MIXED
         3114        3.1        TEXT/PLAIN
         3115        3.2        APPLICATION/OCTET-STREAM
         3116        4          MULTIPART/MIXED
         3117        4.1        IMAGE/GIF
         3118        4.1.MIME   ([MIME-IMB] header for the IMAGE/GIF)
         3119        4.2        MESSAGE/RFC822
         3120        4.2.HEADER ([RFC-2822] header of the message)
         3121        4.2.TEXT   ([RFC-2822] text body of the message) MULTIPART/MIXED
         3122        4.2.1      TEXT/PLAIN
         3123        4.2.2      MULTIPART/ALTERNATIVE
         3124        4.2.2.1    TEXT/PLAIN
         3125        4.2.2.2    TEXT/RICHTEXT
         3126 
         3127 
         3128          It is possible to fetch a substring of the designated text.
         3129          This is done by appending an open angle bracket ("<"), the
         3130          octet position of the first desired octet, a period, the
         3131          maximum number of octets desired, and a close angle bracket
         3132          (">") to the part specifier.  If the starting octet is beyond
         3133          the end of the text, an empty string is returned.
         3134 
         3135 
         3136 
         3137 
         3138 Crispin                     Standards Track                    [Page 56]
         3139 
         3140 RFC 3501                         IMAPv4                       March 2003
         3141 
         3142 
         3143          Any partial fetch that attempts to read beyond the end of the
         3144          text is truncated as appropriate.  A partial fetch that starts
         3145          at octet 0 is returned as a partial fetch, even if this
         3146          truncation happened.
         3147 
         3148             Note: This means that BODY[]<0.2048> of a 1500-octet message
         3149             will return BODY[]<0> with a literal of size 1500, not
         3150             BODY[].
         3151 
         3152             Note: A substring fetch of a HEADER.FIELDS or
         3153             HEADER.FIELDS.NOT part specifier is calculated after
         3154             subsetting the header.
         3155 
         3156          The \Seen flag is implicitly set; if this causes the flags to
         3157          change, they SHOULD be included as part of the FETCH responses.
         3158 
         3159       BODY.PEEK[<section>]<<partial>>
         3160          An alternate form of BODY[<section>] that does not implicitly
         3161          set the \Seen flag.
         3162 
         3163       BODYSTRUCTURE
         3164          The [MIME-IMB] body structure of the message.  This is computed
         3165          by the server by parsing the [MIME-IMB] header fields in the
         3166          [RFC-2822] header and [MIME-IMB] headers.
         3167 
         3168       ENVELOPE
         3169          The envelope structure of the message.  This is computed by the
         3170          server by parsing the [RFC-2822] header into the component
         3171          parts, defaulting various fields as necessary.
         3172 
         3173       FLAGS
         3174          The flags that are set for this message.
         3175 
         3176       INTERNALDATE
         3177          The internal date of the message.
         3178 
         3179       RFC822
         3180          Functionally equivalent to BODY[], differing in the syntax of
         3181          the resulting untagged FETCH data (RFC822 is returned).
         3182 
         3183       RFC822.HEADER
         3184          Functionally equivalent to BODY.PEEK[HEADER], differing in the
         3185          syntax of the resulting untagged FETCH data (RFC822.HEADER is
         3186          returned).
         3187 
         3188       RFC822.SIZE
         3189          The [RFC-2822] size of the message.
         3190 
         3191 
         3192 
         3193 
         3194 Crispin                     Standards Track                    [Page 57]
         3195 
         3196 RFC 3501                         IMAPv4                       March 2003
         3197 
         3198 
         3199       RFC822.TEXT
         3200          Functionally equivalent to BODY[TEXT], differing in the syntax
         3201          of the resulting untagged FETCH data (RFC822.TEXT is returned).
         3202 
         3203       UID
         3204          The unique identifier for the message.
         3205 
         3206 
         3207    Example:    C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])
         3208                S: * 2 FETCH ....
         3209                S: * 3 FETCH ....
         3210                S: * 4 FETCH ....
         3211                S: A654 OK FETCH completed
         3212 
         3213 
         3214 6.4.6.  STORE Command
         3215 
         3216    Arguments:  sequence set
         3217                message data item name
         3218                value for message data item
         3219 
         3220    Responses:  untagged responses: FETCH
         3221 
         3222    Result:     OK - store completed
         3223                NO - store error: can't store that data
         3224                BAD - command unknown or arguments invalid
         3225 
         3226       The STORE command alters data associated with a message in the
         3227       mailbox.  Normally, STORE will return the updated value of the
         3228       data with an untagged FETCH response.  A suffix of ".SILENT" in
         3229       the data item name prevents the untagged FETCH, and the server
         3230       SHOULD assume that the client has determined the updated value
         3231       itself or does not care about the updated value.
         3232 
         3233            Note: Regardless of whether or not the ".SILENT" suffix
         3234            was used, the server SHOULD send an untagged FETCH
         3235            response if a change to a message's flags from an
         3236            external source is observed.  The intent is that the
         3237            status of the flags is determinate without a race
         3238            condition.
         3239 
         3240 
         3241 
         3242 
         3243 
         3244 
         3245 
         3246 
         3247 
         3248 
         3249 
         3250 Crispin                     Standards Track                    [Page 58]
         3251 
         3252 RFC 3501                         IMAPv4                       March 2003
         3253 
         3254 
         3255       The currently defined data items that can be stored are:
         3256 
         3257       FLAGS <flag list>
         3258          Replace the flags for the message (other than \Recent) with the
         3259          argument.  The new value of the flags is returned as if a FETCH
         3260          of those flags was done.
         3261 
         3262       FLAGS.SILENT <flag list>
         3263          Equivalent to FLAGS, but without returning a new value.
         3264 
         3265       +FLAGS <flag list>
         3266          Add the argument to the flags for the message.  The new value
         3267          of the flags is returned as if a FETCH of those flags was done.
         3268 
         3269       +FLAGS.SILENT <flag list>
         3270          Equivalent to +FLAGS, but without returning a new value.
         3271 
         3272       -FLAGS <flag list>
         3273          Remove the argument from the flags for the message.  The new
         3274          value of the flags is returned as if a FETCH of those flags was
         3275          done.
         3276 
         3277       -FLAGS.SILENT <flag list>
         3278          Equivalent to -FLAGS, but without returning a new value.
         3279 
         3280 
         3281    Example:    C: A003 STORE 2:4 +FLAGS (\Deleted)
         3282                S: * 2 FETCH (FLAGS (\Deleted \Seen))
         3283                S: * 3 FETCH (FLAGS (\Deleted))
         3284                S: * 4 FETCH (FLAGS (\Deleted \Flagged \Seen))
         3285                S: A003 OK STORE completed
         3286 
         3287 
         3288 6.4.7.  COPY Command
         3289 
         3290    Arguments:  sequence set
         3291                mailbox name
         3292 
         3293    Responses:  no specific responses for this command
         3294 
         3295    Result:     OK - copy completed
         3296                NO - copy error: can't copy those messages or to that
         3297                     name
         3298                BAD - command unknown or arguments invalid
         3299 
         3300 
         3301 
         3302 
         3303 
         3304 
         3305 
         3306 Crispin                     Standards Track                    [Page 59]
         3307 
         3308 RFC 3501                         IMAPv4                       March 2003
         3309 
         3310 
         3311       The COPY command copies the specified message(s) to the end of the
         3312       specified destination mailbox.  The flags and internal date of the
         3313       message(s) SHOULD be preserved, and the Recent flag SHOULD be set,
         3314       in the copy.
         3315 
         3316       If the destination mailbox does not exist, a server SHOULD return
         3317       an error.  It SHOULD NOT automatically create the mailbox.  Unless
         3318       it is certain that the destination mailbox can not be created, the
         3319       server MUST send the response code "[TRYCREATE]" as the prefix of
         3320       the text of the tagged NO response.  This gives a hint to the
         3321       client that it can attempt a CREATE command and retry the COPY if
         3322       the CREATE is successful.
         3323 
         3324       If the COPY command is unsuccessful for any reason, server
         3325       implementations MUST restore the destination mailbox to its state
         3326       before the COPY attempt.
         3327 
         3328    Example:    C: A003 COPY 2:4 MEETING
         3329                S: A003 OK COPY completed
         3330 
         3331 
         3332 6.4.8.  UID Command
         3333 
         3334    Arguments:  command name
         3335                command arguments
         3336 
         3337    Responses:  untagged responses: FETCH, SEARCH
         3338 
         3339    Result:     OK - UID command completed
         3340                NO - UID command error
         3341                BAD - command unknown or arguments invalid
         3342 
         3343       The UID command has two forms.  In the first form, it takes as its
         3344       arguments a COPY, FETCH, or STORE command with arguments
         3345       appropriate for the associated command.  However, the numbers in
         3346       the sequence set argument are unique identifiers instead of
         3347       message sequence numbers.  Sequence set ranges are permitted, but
         3348       there is no guarantee that unique identifiers will be contiguous.
         3349 
         3350       A non-existent unique identifier is ignored without any error
         3351       message generated.  Thus, it is possible for a UID FETCH command
         3352       to return an OK without any data or a UID COPY or UID STORE to
         3353       return an OK without performing any operations.
         3354 
         3355       In the second form, the UID command takes a SEARCH command with
         3356       SEARCH command arguments.  The interpretation of the arguments is
         3357       the same as with SEARCH; however, the numbers returned in a SEARCH
         3358       response for a UID SEARCH command are unique identifiers instead
         3359 
         3360 
         3361 
         3362 Crispin                     Standards Track                    [Page 60]
         3363 
         3364 RFC 3501                         IMAPv4                       March 2003
         3365 
         3366 
         3367       of message sequence numbers.  For example, the command UID SEARCH
         3368       1:100 UID 443:557 returns the unique identifiers corresponding to
         3369       the intersection of two sequence sets, the message sequence number
         3370       range 1:100 and the UID range 443:557.
         3371 
         3372            Note: in the above example, the UID range 443:557
         3373            appears.  The same comment about a non-existent unique
         3374            identifier being ignored without any error message also
         3375            applies here.  Hence, even if neither UID 443 or 557
         3376            exist, this range is valid and would include an existing
         3377            UID 495.
         3378 
         3379            Also note that a UID range of 559:* always includes the
         3380            UID of the last message in the mailbox, even if 559 is
         3381            higher than any assigned UID value.  This is because the
         3382            contents of a range are independent of the order of the
         3383            range endpoints.  Thus, any UID range with * as one of
         3384            the endpoints indicates at least one message (the
         3385            message with the highest numbered UID), unless the
         3386            mailbox is empty.
         3387 
         3388       The number after the "*" in an untagged FETCH response is always a
         3389       message sequence number, not a unique identifier, even for a UID
         3390       command response.  However, server implementations MUST implicitly
         3391       include the UID message data item as part of any FETCH response
         3392       caused by a UID command, regardless of whether a UID was specified
         3393       as a message data item to the FETCH.
         3394 
         3395 
         3396       Note: The rule about including the UID message data item as part
         3397       of a FETCH response primarily applies to the UID FETCH and UID
         3398       STORE commands, including a UID FETCH command that does not
         3399       include UID as a message data item.  Although it is unlikely that
         3400       the other UID commands will cause an untagged FETCH, this rule
         3401       applies to these commands as well.
         3402 
         3403    Example:    C: A999 UID FETCH 4827313:4828442 FLAGS
         3404                S: * 23 FETCH (FLAGS (\Seen) UID 4827313)
         3405                S: * 24 FETCH (FLAGS (\Seen) UID 4827943)
         3406                S: * 25 FETCH (FLAGS (\Seen) UID 4828442)
         3407                S: A999 OK UID FETCH completed
         3408 
         3409 
         3410 
         3411 
         3412 
         3413 
         3414 
         3415 
         3416 
         3417 
         3418 Crispin                     Standards Track                    [Page 61]
         3419 
         3420 RFC 3501                         IMAPv4                       March 2003
         3421 
         3422 
         3423 6.5.    Client Commands - Experimental/Expansion
         3424 
         3425 
         3426 6.5.1.  X<atom> Command
         3427 
         3428    Arguments:  implementation defined
         3429 
         3430    Responses:  implementation defined
         3431 
         3432    Result:     OK - command completed
         3433                NO - failure
         3434                BAD - command unknown or arguments invalid
         3435 
         3436       Any command prefixed with an X is an experimental command.
         3437       Commands which are not part of this specification, a standard or
         3438       standards-track revision of this specification, or an
         3439       IESG-approved experimental protocol, MUST use the X prefix.
         3440 
         3441       Any added untagged responses issued by an experimental command
         3442       MUST also be prefixed with an X.  Server implementations MUST NOT
         3443       send any such untagged responses, unless the client requested it
         3444       by issuing the associated experimental command.
         3445 
         3446    Example:    C: a441 CAPABILITY
         3447                S: * CAPABILITY IMAP4rev1 XPIG-LATIN
         3448                S: a441 OK CAPABILITY completed
         3449                C: A442 XPIG-LATIN
         3450                S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay
         3451                S: A442 OK XPIG-LATIN ompleted-cay
         3452 
         3453 7.      Server Responses
         3454 
         3455    Server responses are in three forms: status responses, server data,
         3456    and command continuation request.  The information contained in a
         3457    server response, identified by "Contents:" in the response
         3458    descriptions below, is described by function, not by syntax.  The
         3459    precise syntax of server responses is described in the Formal Syntax
         3460    section.
         3461 
         3462    The client MUST be prepared to accept any response at all times.
         3463 
         3464    Status responses can be tagged or untagged.  Tagged status responses
         3465    indicate the completion result (OK, NO, or BAD status) of a client
         3466    command, and have a tag matching the command.
         3467 
         3468    Some status responses, and all server data, are untagged.  An
         3469    untagged response is indicated by the token "*" instead of a tag.
         3470    Untagged status responses indicate server greeting, or server status
         3471 
         3472 
         3473 
         3474 Crispin                     Standards Track                    [Page 62]
         3475 
         3476 RFC 3501                         IMAPv4                       March 2003
         3477 
         3478 
         3479    that does not indicate the completion of a command (for example, an
         3480    impending system shutdown alert).  For historical reasons, untagged
         3481    server data responses are also called "unsolicited data", although
         3482    strictly speaking, only unilateral server data is truly
         3483    "unsolicited".
         3484 
         3485    Certain server data MUST be recorded by the client when it is
         3486    received; this is noted in the description of that data.  Such data
         3487    conveys critical information which affects the interpretation of all
         3488    subsequent commands and responses (e.g., updates reflecting the
         3489    creation or destruction of messages).
         3490 
         3491    Other server data SHOULD be recorded for later reference; if the
         3492    client does not need to record the data, or if recording the data has
         3493    no obvious purpose (e.g., a SEARCH response when no SEARCH command is
         3494    in progress), the data SHOULD be ignored.
         3495 
         3496    An example of unilateral untagged server data occurs when the IMAP
         3497    connection is in the selected state.  In the selected state, the
         3498    server checks the mailbox for new messages as part of command
         3499    execution.  Normally, this is part of the execution of every command;
         3500    hence, a NOOP command suffices to check for new messages.  If new
         3501    messages are found, the server sends untagged EXISTS and RECENT
         3502    responses reflecting the new size of the mailbox.  Server
         3503    implementations that offer multiple simultaneous access to the same
         3504    mailbox SHOULD also send appropriate unilateral untagged FETCH and
         3505    EXPUNGE responses if another agent changes the state of any message
         3506    flags or expunges any messages.
         3507 
         3508    Command continuation request responses use the token "+" instead of a
         3509    tag.  These responses are sent by the server to indicate acceptance
         3510    of an incomplete client command and readiness for the remainder of
         3511    the command.
         3512 
         3513 7.1.    Server Responses - Status Responses
         3514 
         3515    Status responses are OK, NO, BAD, PREAUTH and BYE.  OK, NO, and BAD
         3516    can be tagged or untagged.  PREAUTH and BYE are always untagged.
         3517 
         3518    Status responses MAY include an OPTIONAL "response code".  A response
         3519    code consists of data inside square brackets in the form of an atom,
         3520    possibly followed by a space and arguments.  The response code
         3521    contains additional information or status codes for client software
         3522    beyond the OK/NO/BAD condition, and are defined when there is a
         3523    specific action that a client can take based upon the additional
         3524    information.
         3525 
         3526 
         3527 
         3528 
         3529 
         3530 Crispin                     Standards Track                    [Page 63]
         3531 
         3532 RFC 3501                         IMAPv4                       March 2003
         3533 
         3534 
         3535    The currently defined response codes are:
         3536 
         3537       ALERT
         3538 
         3539          The human-readable text contains a special alert that MUST be
         3540          presented to the user in a fashion that calls the user's
         3541          attention to the message.
         3542 
         3543       BADCHARSET
         3544 
         3545          Optionally followed by a parenthesized list of charsets.  A
         3546          SEARCH failed because the given charset is not supported by
         3547          this implementation.  If the optional list of charsets is
         3548          given, this lists the charsets that are supported by this
         3549          implementation.
         3550 
         3551       CAPABILITY
         3552 
         3553          Followed by a list of capabilities.  This can appear in the
         3554          initial OK or PREAUTH response to transmit an initial
         3555          capabilities list.  This makes it unnecessary for a client to
         3556          send a separate CAPABILITY command if it recognizes this
         3557          response.
         3558 
         3559       PARSE
         3560 
         3561          The human-readable text represents an error in parsing the
         3562          [RFC-2822] header or [MIME-IMB] headers of a message in the
         3563          mailbox.
         3564 
         3565       PERMANENTFLAGS
         3566 
         3567          Followed by a parenthesized list of flags, indicates which of
         3568          the known flags the client can change permanently.  Any flags
         3569          that are in the FLAGS untagged response, but not the
         3570          PERMANENTFLAGS list, can not be set permanently.  If the client
         3571          attempts to STORE a flag that is not in the PERMANENTFLAGS
         3572          list, the server will either ignore the change or store the
         3573          state change for the remainder of the current session only.
         3574          The PERMANENTFLAGS list can also include the special flag \*,
         3575          which indicates that it is possible to create new keywords by
         3576          attempting to store those flags in the mailbox.
         3577 
         3578 
         3579 
         3580 
         3581 
         3582 
         3583 
         3584 
         3585 
         3586 Crispin                     Standards Track                    [Page 64]
         3587 
         3588 RFC 3501                         IMAPv4                       March 2003
         3589 
         3590 
         3591       READ-ONLY
         3592 
         3593          The mailbox is selected read-only, or its access while selected
         3594          has changed from read-write to read-only.
         3595 
         3596       READ-WRITE
         3597 
         3598          The mailbox is selected read-write, or its access while
         3599          selected has changed from read-only to read-write.
         3600 
         3601       TRYCREATE
         3602 
         3603          An APPEND or COPY attempt is failing because the target mailbox
         3604          does not exist (as opposed to some other reason).  This is a
         3605          hint to the client that the operation can succeed if the
         3606          mailbox is first created by the CREATE command.
         3607 
         3608       UIDNEXT
         3609 
         3610          Followed by a decimal number, indicates the next unique
         3611          identifier value.  Refer to section 2.3.1.1 for more
         3612          information.
         3613 
         3614       UIDVALIDITY
         3615 
         3616          Followed by a decimal number, indicates the unique identifier
         3617          validity value.  Refer to section 2.3.1.1 for more information.
         3618 
         3619       UNSEEN
         3620 
         3621          Followed by a decimal number, indicates the number of the first
         3622          message without the \Seen flag set.
         3623 
         3624       Additional response codes defined by particular client or server
         3625       implementations SHOULD be prefixed with an "X" until they are
         3626       added to a revision of this protocol.  Client implementations
         3627       SHOULD ignore response codes that they do not recognize.
         3628 
         3629 7.1.1.  OK Response
         3630 
         3631    Contents:   OPTIONAL response code
         3632                human-readable text
         3633 
         3634       The OK response indicates an information message from the server.
         3635       When tagged, it indicates successful completion of the associated
         3636       command.  The human-readable text MAY be presented to the user as
         3637       an information message.  The untagged form indicates an
         3638 
         3639 
         3640 
         3641 
         3642 Crispin                     Standards Track                    [Page 65]
         3643 
         3644 RFC 3501                         IMAPv4                       March 2003
         3645 
         3646 
         3647       information-only message; the nature of the information MAY be
         3648       indicated by a response code.
         3649 
         3650       The untagged form is also used as one of three possible greetings
         3651       at connection startup.  It indicates that the connection is not
         3652       yet authenticated and that a LOGIN command is needed.
         3653 
         3654    Example:    S: * OK IMAP4rev1 server ready
         3655                C: A001 LOGIN fred blurdybloop
         3656                S: * OK [ALERT] System shutdown in 10 minutes
         3657                S: A001 OK LOGIN Completed
         3658 
         3659 
         3660 7.1.2.  NO Response
         3661 
         3662    Contents:   OPTIONAL response code
         3663                human-readable text
         3664 
         3665       The NO response indicates an operational error message from the
         3666       server.  When tagged, it indicates unsuccessful completion of the
         3667       associated command.  The untagged form indicates a warning; the
         3668       command can still complete successfully.  The human-readable text
         3669       describes the condition.
         3670 
         3671    Example:    C: A222 COPY 1:2 owatagusiam
         3672                S: * NO Disk is 98% full, please delete unnecessary data
         3673                S: A222 OK COPY completed
         3674                C: A223 COPY 3:200 blurdybloop
         3675                S: * NO Disk is 98% full, please delete unnecessary data
         3676                S: * NO Disk is 99% full, please delete unnecessary data
         3677                S: A223 NO COPY failed: disk is full
         3678 
         3679 
         3680 7.1.3.  BAD Response
         3681 
         3682    Contents:   OPTIONAL response code
         3683                human-readable text
         3684 
         3685       The BAD response indicates an error message from the server.  When
         3686       tagged, it reports a protocol-level error in the client's command;
         3687       the tag indicates the command that caused the error.  The untagged
         3688       form indicates a protocol-level error for which the associated
         3689       command can not be determined; it can also indicate an internal
         3690       server failure.  The human-readable text describes the condition.
         3691 
         3692 
         3693 
         3694 
         3695 
         3696 
         3697 
         3698 Crispin                     Standards Track                    [Page 66]
         3699 
         3700 RFC 3501                         IMAPv4                       March 2003
         3701 
         3702 
         3703    Example:    C: ...very long command line...
         3704                S: * BAD Command line too long
         3705                C: ...empty line...
         3706                S: * BAD Empty command line
         3707                C: A443 EXPUNGE
         3708                S: * BAD Disk crash, attempting salvage to a new disk!
         3709                S: * OK Salvage successful, no data lost
         3710                S: A443 OK Expunge completed
         3711 
         3712 
         3713 7.1.4.  PREAUTH Response
         3714 
         3715    Contents:   OPTIONAL response code
         3716                human-readable text
         3717 
         3718       The PREAUTH response is always untagged, and is one of three
         3719       possible greetings at connection startup.  It indicates that the
         3720       connection has already been authenticated by external means; thus
         3721       no LOGIN command is needed.
         3722 
         3723    Example:    S: * PREAUTH IMAP4rev1 server logged in as Smith
         3724 
         3725 
         3726 7.1.5.  BYE Response
         3727 
         3728    Contents:   OPTIONAL response code
         3729                human-readable text
         3730 
         3731       The BYE response is always untagged, and indicates that the server
         3732       is about to close the connection.  The human-readable text MAY be
         3733       displayed to the user in a status report by the client.  The BYE
         3734       response is sent under one of four conditions:
         3735 
         3736          1) as part of a normal logout sequence.  The server will close
         3737             the connection after sending the tagged OK response to the
         3738             LOGOUT command.
         3739 
         3740          2) as a panic shutdown announcement.  The server closes the
         3741             connection immediately.
         3742 
         3743          3) as an announcement of an inactivity autologout.  The server
         3744             closes the connection immediately.
         3745 
         3746          4) as one of three possible greetings at connection startup,
         3747             indicating that the server is not willing to accept a
         3748             connection from this client.  The server closes the
         3749             connection immediately.
         3750 
         3751 
         3752 
         3753 
         3754 Crispin                     Standards Track                    [Page 67]
         3755 
         3756 RFC 3501                         IMAPv4                       March 2003
         3757 
         3758 
         3759       The difference between a BYE that occurs as part of a normal
         3760       LOGOUT sequence (the first case) and a BYE that occurs because of
         3761       a failure (the other three cases) is that the connection closes
         3762       immediately in the failure case.  In all cases the client SHOULD
         3763       continue to read response data from the server until the
         3764       connection is closed; this will ensure that any pending untagged
         3765       or completion responses are read and processed.
         3766 
         3767    Example:    S: * BYE Autologout; idle for too long
         3768 
         3769 7.2.    Server Responses - Server and Mailbox Status
         3770 
         3771    These responses are always untagged.  This is how server and mailbox
         3772    status data are transmitted from the server to the client.  Many of
         3773    these responses typically result from a command with the same name.
         3774 
         3775 7.2.1.  CAPABILITY Response
         3776 
         3777    Contents:   capability listing
         3778 
         3779       The CAPABILITY response occurs as a result of a CAPABILITY
         3780       command.  The capability listing contains a space-separated
         3781       listing of capability names that the server supports.  The
         3782       capability listing MUST include the atom "IMAP4rev1".
         3783 
         3784       In addition, client and server implementations MUST implement the
         3785       STARTTLS, LOGINDISABLED, and AUTH=PLAIN (described in [IMAP-TLS])
         3786       capabilities.  See the Security Considerations section for
         3787       important information.
         3788 
         3789       A capability name which begins with "AUTH=" indicates that the
         3790       server supports that particular authentication mechanism.
         3791 
         3792       The LOGINDISABLED capability indicates that the LOGIN command is
         3793       disabled, and that the server will respond with a tagged NO
         3794       response to any attempt to use the LOGIN command even if the user
         3795       name and password are valid.  An IMAP client MUST NOT issue the
         3796       LOGIN command if the server advertises the LOGINDISABLED
         3797       capability.
         3798 
         3799       Other capability names indicate that the server supports an
         3800       extension, revision, or amendment to the IMAP4rev1 protocol.
         3801       Server responses MUST conform to this document until the client
         3802       issues a command that uses the associated capability.
         3803 
         3804       Capability names MUST either begin with "X" or be standard or
         3805       standards-track IMAP4rev1 extensions, revisions, or amendments
         3806       registered with IANA.  A server MUST NOT offer unregistered or
         3807 
         3808 
         3809 
         3810 Crispin                     Standards Track                    [Page 68]
         3811 
         3812 RFC 3501                         IMAPv4                       March 2003
         3813 
         3814 
         3815       non-standard capability names, unless such names are prefixed with
         3816       an "X".
         3817 
         3818       Client implementations SHOULD NOT require any capability name
         3819       other than "IMAP4rev1", and MUST ignore any unknown capability
         3820       names.
         3821 
         3822       A server MAY send capabilities automatically, by using the
         3823       CAPABILITY response code in the initial PREAUTH or OK responses,
         3824       and by sending an updated CAPABILITY response code in the tagged
         3825       OK response as part of a successful authentication.  It is
         3826       unnecessary for a client to send a separate CAPABILITY command if
         3827       it recognizes these automatic capabilities.
         3828 
         3829    Example:    S: * CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI XPIG-LATIN
         3830 
         3831 
         3832 7.2.2.  LIST Response
         3833 
         3834    Contents:   name attributes
         3835                hierarchy delimiter
         3836                name
         3837 
         3838       The LIST response occurs as a result of a LIST command.  It
         3839       returns a single name that matches the LIST specification.  There
         3840       can be multiple LIST responses for a single LIST command.
         3841 
         3842       Four name attributes are defined:
         3843 
         3844       \Noinferiors
         3845          It is not possible for any child levels of hierarchy to exist
         3846          under this name; no child levels exist now and none can be
         3847          created in the future.
         3848 
         3849       \Noselect
         3850          It is not possible to use this name as a selectable mailbox.
         3851 
         3852       \Marked
         3853          The mailbox has been marked "interesting" by the server; the
         3854          mailbox probably contains messages that have been added since
         3855          the last time the mailbox was selected.
         3856 
         3857       \Unmarked
         3858          The mailbox does not contain any additional messages since the
         3859          last time the mailbox was selected.
         3860 
         3861 
         3862 
         3863 
         3864 
         3865 
         3866 Crispin                     Standards Track                    [Page 69]
         3867 
         3868 RFC 3501                         IMAPv4                       March 2003
         3869 
         3870 
         3871       If it is not feasible for the server to determine whether or not
         3872       the mailbox is "interesting", or if the name is a \Noselect name,
         3873       the server SHOULD NOT send either \Marked or \Unmarked.
         3874 
         3875       The hierarchy delimiter is a character used to delimit levels of
         3876       hierarchy in a mailbox name.  A client can use it to create child
         3877       mailboxes, and to search higher or lower levels of naming
         3878       hierarchy.  All children of a top-level hierarchy node MUST use
         3879       the same separator character.  A NIL hierarchy delimiter means
         3880       that no hierarchy exists; the name is a "flat" name.
         3881 
         3882       The name represents an unambiguous left-to-right hierarchy, and
         3883       MUST be valid for use as a reference in LIST and LSUB commands.
         3884       Unless \Noselect is indicated, the name MUST also be valid as an
         3885       argument for commands, such as SELECT, that accept mailbox names.
         3886 
         3887    Example:    S: * LIST (\Noselect) "/" ~/Mail/foo
         3888 
         3889 
         3890 7.2.3.  LSUB Response
         3891 
         3892    Contents:   name attributes
         3893                hierarchy delimiter
         3894                name
         3895 
         3896       The LSUB response occurs as a result of an LSUB command.  It
         3897       returns a single name that matches the LSUB specification.  There
         3898       can be multiple LSUB responses for a single LSUB command.  The
         3899       data is identical in format to the LIST response.
         3900 
         3901    Example:    S: * LSUB () "." #news.comp.mail.misc
         3902 
         3903 
         3904 7.2.4   STATUS Response
         3905 
         3906    Contents:   name
         3907                status parenthesized list
         3908 
         3909       The STATUS response occurs as a result of an STATUS command.  It
         3910       returns the mailbox name that matches the STATUS specification and
         3911       the requested mailbox status information.
         3912 
         3913    Example:    S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)
         3914 
         3915 
         3916 
         3917 
         3918 
         3919 
         3920 
         3921 
         3922 Crispin                     Standards Track                    [Page 70]
         3923 
         3924 RFC 3501                         IMAPv4                       March 2003
         3925 
         3926 
         3927 7.2.5.  SEARCH Response
         3928 
         3929    Contents:   zero or more numbers
         3930 
         3931       The SEARCH response occurs as a result of a SEARCH or UID SEARCH
         3932       command.  The number(s) refer to those messages that match the
         3933       search criteria.  For SEARCH, these are message sequence numbers;
         3934       for UID SEARCH, these are unique identifiers.  Each number is
         3935       delimited by a space.
         3936 
         3937    Example:    S: * SEARCH 2 3 6
         3938 
         3939 
         3940 7.2.6.  FLAGS Response
         3941 
         3942    Contents:   flag parenthesized list
         3943 
         3944       The FLAGS response occurs as a result of a SELECT or EXAMINE
         3945       command.  The flag parenthesized list identifies the flags (at a
         3946       minimum, the system-defined flags) that are applicable for this
         3947       mailbox.  Flags other than the system flags can also exist,
         3948       depending on server implementation.
         3949 
         3950       The update from the FLAGS response MUST be recorded by the client.
         3951 
         3952    Example:    S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
         3953 
         3954 
         3955 7.3.    Server Responses - Mailbox Size
         3956 
         3957    These responses are always untagged.  This is how changes in the size
         3958    of the mailbox are transmitted from the server to the client.
         3959    Immediately following the "*" token is a number that represents a
         3960    message count.
         3961 
         3962 7.3.1.  EXISTS Response
         3963 
         3964    Contents:   none
         3965 
         3966       The EXISTS response reports the number of messages in the mailbox.
         3967       This response occurs as a result of a SELECT or EXAMINE command,
         3968       and if the size of the mailbox changes (e.g., new messages).
         3969 
         3970       The update from the EXISTS response MUST be recorded by the
         3971       client.
         3972 
         3973    Example:    S: * 23 EXISTS
         3974 
         3975 
         3976 
         3977 
         3978 Crispin                     Standards Track                    [Page 71]
         3979 
         3980 RFC 3501                         IMAPv4                       March 2003
         3981 
         3982 
         3983 7.3.2.  RECENT Response
         3984 
         3985    Contents:   none
         3986 
         3987       The RECENT response reports the number of messages with the
         3988       \Recent flag set.  This response occurs as a result of a SELECT or
         3989       EXAMINE command, and if the size of the mailbox changes (e.g., new
         3990       messages).
         3991 
         3992            Note: It is not guaranteed that the message sequence
         3993            numbers of recent messages will be a contiguous range of
         3994            the highest n messages in the mailbox (where n is the
         3995            value reported by the RECENT response).  Examples of
         3996            situations in which this is not the case are: multiple
         3997            clients having the same mailbox open (the first session
         3998            to be notified will see it as recent, others will
         3999            probably see it as non-recent), and when the mailbox is
         4000            re-ordered by a non-IMAP agent.
         4001 
         4002            The only reliable way to identify recent messages is to
         4003            look at message flags to see which have the \Recent flag
         4004            set, or to do a SEARCH RECENT.
         4005 
         4006       The update from the RECENT response MUST be recorded by the
         4007       client.
         4008 
         4009    Example:    S: * 5 RECENT
         4010 
         4011 
         4012 7.4.    Server Responses - Message Status
         4013 
         4014    These responses are always untagged.  This is how message data are
         4015    transmitted from the server to the client, often as a result of a
         4016    command with the same name.  Immediately following the "*" token is a
         4017    number that represents a message sequence number.
         4018 
         4019 7.4.1.  EXPUNGE Response
         4020 
         4021    Contents:   none
         4022 
         4023       The EXPUNGE response reports that the specified message sequence
         4024       number has been permanently removed from the mailbox.  The message
         4025       sequence number for each successive message in the mailbox is
         4026       immediately decremented by 1, and this decrement is reflected in
         4027       message sequence numbers in subsequent responses (including other
         4028       untagged EXPUNGE responses).
         4029 
         4030 
         4031 
         4032 
         4033 
         4034 Crispin                     Standards Track                    [Page 72]
         4035 
         4036 RFC 3501                         IMAPv4                       March 2003
         4037 
         4038 
         4039       The EXPUNGE response also decrements the number of messages in the
         4040       mailbox; it is not necessary to send an EXISTS response with the
         4041       new value.
         4042 
         4043       As a result of the immediate decrement rule, message sequence
         4044       numbers that appear in a set of successive EXPUNGE responses
         4045       depend upon whether the messages are removed starting from lower
         4046       numbers to higher numbers, or from higher numbers to lower
         4047       numbers.  For example, if the last 5 messages in a 9-message
         4048       mailbox are expunged, a "lower to higher" server will send five
         4049       untagged EXPUNGE responses for message sequence number 5, whereas
         4050       a "higher to lower server" will send successive untagged EXPUNGE
         4051       responses for message sequence numbers 9, 8, 7, 6, and 5.
         4052 
         4053       An EXPUNGE response MUST NOT be sent when no command is in
         4054       progress, nor while responding to a FETCH, STORE, or SEARCH
         4055       command.  This rule is necessary to prevent a loss of
         4056       synchronization of message sequence numbers between client and
         4057       server.  A command is not "in progress" until the complete command
         4058       has been received; in particular, a command is not "in progress"
         4059       during the negotiation of command continuation.
         4060 
         4061            Note: UID FETCH, UID STORE, and UID SEARCH are different
         4062            commands from FETCH, STORE, and SEARCH.  An EXPUNGE
         4063            response MAY be sent during a UID command.
         4064 
         4065       The update from the EXPUNGE response MUST be recorded by the
         4066       client.
         4067 
         4068    Example:    S: * 44 EXPUNGE
         4069 
         4070 
         4071 7.4.2.  FETCH Response
         4072 
         4073    Contents:   message data
         4074 
         4075       The FETCH response returns data about a message to the client.
         4076       The data are pairs of data item names and their values in
         4077       parentheses.  This response occurs as the result of a FETCH or
         4078       STORE command, as well as by unilateral server decision (e.g.,
         4079       flag updates).
         4080 
         4081       The current data items are:
         4082 
         4083       BODY
         4084          A form of BODYSTRUCTURE without extension data.
         4085 
         4086 
         4087 
         4088 
         4089 
         4090 Crispin                     Standards Track                    [Page 73]
         4091 
         4092 RFC 3501                         IMAPv4                       March 2003
         4093 
         4094 
         4095       BODY[<section>]<<origin octet>>
         4096          A string expressing the body contents of the specified section.
         4097          The string SHOULD be interpreted by the client according to the
         4098          content transfer encoding, body type, and subtype.
         4099 
         4100          If the origin octet is specified, this string is a substring of
         4101          the entire body contents, starting at that origin octet.  This
         4102          means that BODY[]<0> MAY be truncated, but BODY[] is NEVER
         4103          truncated.
         4104 
         4105             Note: The origin octet facility MUST NOT be used by a server
         4106             in a FETCH response unless the client specifically requested
         4107             it by means of a FETCH of a BODY[<section>]<<partial>> data
         4108             item.
         4109 
         4110          8-bit textual data is permitted if a [CHARSET] identifier is
         4111          part of the body parameter parenthesized list for this section.
         4112          Note that headers (part specifiers HEADER or MIME, or the
         4113          header portion of a MESSAGE/RFC822 part), MUST be 7-bit; 8-bit
         4114          characters are not permitted in headers.  Note also that the
         4115          [RFC-2822] delimiting blank line between the header and the
         4116          body is not affected by header line subsetting; the blank line
         4117          is always included as part of header data, except in the case
         4118          of a message which has no body and no blank line.
         4119 
         4120          Non-textual data such as binary data MUST be transfer encoded
         4121          into a textual form, such as BASE64, prior to being sent to the
         4122          client.  To derive the original binary data, the client MUST
         4123          decode the transfer encoded string.
         4124 
         4125       BODYSTRUCTURE
         4126          A parenthesized list that describes the [MIME-IMB] body
         4127          structure of a message.  This is computed by the server by
         4128          parsing the [MIME-IMB] header fields, defaulting various fields
         4129          as necessary.
         4130 
         4131          For example, a simple text message of 48 lines and 2279 octets
         4132          can have a body structure of: ("TEXT" "PLAIN" ("CHARSET"
         4133          "US-ASCII") NIL NIL "7BIT" 2279 48)
         4134 
         4135          Multiple parts are indicated by parenthesis nesting.  Instead
         4136          of a body type as the first element of the parenthesized list,
         4137          there is a sequence of one or more nested body structures.  The
         4138          second element of the parenthesized list is the multipart
         4139          subtype (mixed, digest, parallel, alternative, etc.).
         4140 
         4141 
         4142 
         4143 
         4144 
         4145 
         4146 Crispin                     Standards Track                    [Page 74]
         4147 
         4148 RFC 3501                         IMAPv4                       March 2003
         4149 
         4150 
         4151          For example, a two part message consisting of a text and a
         4152          BASE64-encoded text attachment can have a body structure of:
         4153          (("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 1152
         4154          23)("TEXT" "PLAIN" ("CHARSET" "US-ASCII" "NAME" "cc.diff")
         4155          "<960723163407.20117h@cac.washington.edu>" "Compiler diff"
         4156          "BASE64" 4554 73) "MIXED")
         4157 
         4158          Extension data follows the multipart subtype.  Extension data
         4159          is never returned with the BODY fetch, but can be returned with
         4160          a BODYSTRUCTURE fetch.  Extension data, if present, MUST be in
         4161          the defined order.  The extension data of a multipart body part
         4162          are in the following order:
         4163 
         4164          body parameter parenthesized list
         4165             A parenthesized list of attribute/value pairs [e.g., ("foo"
         4166             "bar" "baz" "rag") where "bar" is the value of "foo", and
         4167             "rag" is the value of "baz"] as defined in [MIME-IMB].
         4168 
         4169          body disposition
         4170             A parenthesized list, consisting of a disposition type
         4171             string, followed by a parenthesized list of disposition
         4172             attribute/value pairs as defined in [DISPOSITION].
         4173 
         4174          body language
         4175             A string or parenthesized list giving the body language
         4176             value as defined in [LANGUAGE-TAGS].
         4177 
         4178          body location
         4179             A string list giving the body content URI as defined in
         4180             [LOCATION].
         4181 
         4182          Any following extension data are not yet defined in this
         4183          version of the protocol.  Such extension data can consist of
         4184          zero or more NILs, strings, numbers, or potentially nested
         4185          parenthesized lists of such data.  Client implementations that
         4186          do a BODYSTRUCTURE fetch MUST be prepared to accept such
         4187          extension data.  Server implementations MUST NOT send such
         4188          extension data until it has been defined by a revision of this
         4189          protocol.
         4190 
         4191          The basic fields of a non-multipart body part are in the
         4192          following order:
         4193 
         4194          body type
         4195             A string giving the content media type name as defined in
         4196             [MIME-IMB].
         4197 
         4198 
         4199 
         4200 
         4201 
         4202 Crispin                     Standards Track                    [Page 75]
         4203 
         4204 RFC 3501                         IMAPv4                       March 2003
         4205 
         4206 
         4207          body subtype
         4208             A string giving the content subtype name as defined in
         4209             [MIME-IMB].
         4210 
         4211          body parameter parenthesized list
         4212             A parenthesized list of attribute/value pairs [e.g., ("foo"
         4213             "bar" "baz" "rag") where "bar" is the value of "foo" and
         4214             "rag" is the value of "baz"] as defined in [MIME-IMB].
         4215 
         4216          body id
         4217             A string giving the content id as defined in [MIME-IMB].
         4218 
         4219          body description
         4220             A string giving the content description as defined in
         4221             [MIME-IMB].
         4222 
         4223          body encoding
         4224             A string giving the content transfer encoding as defined in
         4225             [MIME-IMB].
         4226 
         4227          body size
         4228             A number giving the size of the body in octets.  Note that
         4229             this size is the size in its transfer encoding and not the
         4230             resulting size after any decoding.
         4231 
         4232          A body type of type MESSAGE and subtype RFC822 contains,
         4233          immediately after the basic fields, the envelope structure,
         4234          body structure, and size in text lines of the encapsulated
         4235          message.
         4236 
         4237          A body type of type TEXT contains, immediately after the basic
         4238          fields, the size of the body in text lines.  Note that this
         4239          size is the size in its content transfer encoding and not the
         4240          resulting size after any decoding.
         4241 
         4242          Extension data follows the basic fields and the type-specific
         4243          fields listed above.  Extension data is never returned with the
         4244          BODY fetch, but can be returned with a BODYSTRUCTURE fetch.
         4245          Extension data, if present, MUST be in the defined order.
         4246 
         4247          The extension data of a non-multipart body part are in the
         4248          following order:
         4249 
         4250          body MD5
         4251             A string giving the body MD5 value as defined in [MD5].
         4252 
         4253 
         4254 
         4255 
         4256 
         4257 
         4258 Crispin                     Standards Track                    [Page 76]
         4259 
         4260 RFC 3501                         IMAPv4                       March 2003
         4261 
         4262 
         4263          body disposition
         4264             A parenthesized list with the same content and function as
         4265             the body disposition for a multipart body part.
         4266 
         4267          body language
         4268             A string or parenthesized list giving the body language
         4269             value as defined in [LANGUAGE-TAGS].
         4270 
         4271          body location
         4272             A string list giving the body content URI as defined in
         4273             [LOCATION].
         4274 
         4275          Any following extension data are not yet defined in this
         4276          version of the protocol, and would be as described above under
         4277          multipart extension data.
         4278 
         4279       ENVELOPE
         4280          A parenthesized list that describes the envelope structure of a
         4281          message.  This is computed by the server by parsing the
         4282          [RFC-2822] header into the component parts, defaulting various
         4283          fields as necessary.
         4284 
         4285          The fields of the envelope structure are in the following
         4286          order: date, subject, from, sender, reply-to, to, cc, bcc,
         4287          in-reply-to, and message-id.  The date, subject, in-reply-to,
         4288          and message-id fields are strings.  The from, sender, reply-to,
         4289          to, cc, and bcc fields are parenthesized lists of address
         4290          structures.
         4291 
         4292          An address structure is a parenthesized list that describes an
         4293          electronic mail address.  The fields of an address structure
         4294          are in the following order: personal name, [SMTP]
         4295          at-domain-list (source route), mailbox name, and host name.
         4296 
         4297          [RFC-2822] group syntax is indicated by a special form of
         4298          address structure in which the host name field is NIL.  If the
         4299          mailbox name field is also NIL, this is an end of group marker
         4300          (semi-colon in RFC 822 syntax).  If the mailbox name field is
         4301          non-NIL, this is a start of group marker, and the mailbox name
         4302          field holds the group name phrase.
         4303 
         4304          If the Date, Subject, In-Reply-To, and Message-ID header lines
         4305          are absent in the [RFC-2822] header, the corresponding member
         4306          of the envelope is NIL; if these header lines are present but
         4307          empty the corresponding member of the envelope is the empty
         4308          string.
         4309 
         4310 
         4311 
         4312 
         4313 
         4314 Crispin                     Standards Track                    [Page 77]
         4315 
         4316 RFC 3501                         IMAPv4                       March 2003
         4317 
         4318 
         4319             Note: some servers may return a NIL envelope member in the
         4320             "present but empty" case.  Clients SHOULD treat NIL and
         4321             empty string as identical.
         4322 
         4323             Note: [RFC-2822] requires that all messages have a valid
         4324             Date header.  Therefore, the date member in the envelope can
         4325             not be NIL or the empty string.
         4326 
         4327             Note: [RFC-2822] requires that the In-Reply-To and
         4328             Message-ID headers, if present, have non-empty content.
         4329             Therefore, the in-reply-to and message-id members in the
         4330             envelope can not be the empty string.
         4331 
         4332          If the From, To, cc, and bcc header lines are absent in the
         4333          [RFC-2822] header, or are present but empty, the corresponding
         4334          member of the envelope is NIL.
         4335 
         4336          If the Sender or Reply-To lines are absent in the [RFC-2822]
         4337          header, or are present but empty, the server sets the
         4338          corresponding member of the envelope to be the same value as
         4339          the from member (the client is not expected to know to do
         4340          this).
         4341 
         4342             Note: [RFC-2822] requires that all messages have a valid
         4343             From header.  Therefore, the from, sender, and reply-to
         4344             members in the envelope can not be NIL.
         4345 
         4346       FLAGS
         4347          A parenthesized list of flags that are set for this message.
         4348 
         4349       INTERNALDATE
         4350          A string representing the internal date of the message.
         4351 
         4352       RFC822
         4353          Equivalent to BODY[].
         4354 
         4355       RFC822.HEADER
         4356          Equivalent to BODY[HEADER].  Note that this did not result in
         4357          \Seen being set, because RFC822.HEADER response data occurs as
         4358          a result of a FETCH of RFC822.HEADER.  BODY[HEADER] response
         4359          data occurs as a result of a FETCH of BODY[HEADER] (which sets
         4360          \Seen) or BODY.PEEK[HEADER] (which does not set \Seen).
         4361 
         4362       RFC822.SIZE
         4363          A number expressing the [RFC-2822] size of the message.
         4364 
         4365 
         4366 
         4367 
         4368 
         4369 
         4370 Crispin                     Standards Track                    [Page 78]
         4371 
         4372 RFC 3501                         IMAPv4                       March 2003
         4373 
         4374 
         4375       RFC822.TEXT
         4376          Equivalent to BODY[TEXT].
         4377 
         4378       UID
         4379          A number expressing the unique identifier of the message.
         4380 
         4381 
         4382    Example:    S: * 23 FETCH (FLAGS (\Seen) RFC822.SIZE 44827)
         4383 
         4384 
         4385 7.5.    Server Responses - Command Continuation Request
         4386 
         4387    The command continuation request response is indicated by a "+" token
         4388    instead of a tag.  This form of response indicates that the server is
         4389    ready to accept the continuation of a command from the client.  The
         4390    remainder of this response is a line of text.
         4391 
         4392    This response is used in the AUTHENTICATE command to transmit server
         4393    data to the client, and request additional client data.  This
         4394    response is also used if an argument to any command is a literal.
         4395 
         4396    The client is not permitted to send the octets of the literal unless
         4397    the server indicates that it is expected.  This permits the server to
         4398    process commands and reject errors on a line-by-line basis.  The
         4399    remainder of the command, including the CRLF that terminates a
         4400    command, follows the octets of the literal.  If there are any
         4401    additional command arguments, the literal octets are followed by a
         4402    space and those arguments.
         4403 
         4404    Example:    C: A001 LOGIN {11}
         4405                S: + Ready for additional command text
         4406                C: FRED FOOBAR {7}
         4407                S: + Ready for additional command text
         4408                C: fat man
         4409                S: A001 OK LOGIN completed
         4410                C: A044 BLURDYBLOOP {102856}
         4411                S: A044 BAD No such command as "BLURDYBLOOP"
         4412 
         4413 
         4414 
         4415 
         4416 
         4417 
         4418 
         4419 
         4420 
         4421 
         4422 
         4423 
         4424 
         4425 
         4426 Crispin                     Standards Track                    [Page 79]
         4427 
         4428 RFC 3501                         IMAPv4                       March 2003
         4429 
         4430 
         4431 8.      Sample IMAP4rev1 connection
         4432 
         4433    The following is a transcript of an IMAP4rev1 connection.  A long
         4434    line in this sample is broken for editorial clarity.
         4435 
         4436 S:   * OK IMAP4rev1 Service Ready
         4437 C:   a001 login mrc secret
         4438 S:   a001 OK LOGIN completed
         4439 C:   a002 select inbox
         4440 S:   * 18 EXISTS
         4441 S:   * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
         4442 S:   * 2 RECENT
         4443 S:   * OK [UNSEEN 17] Message 17 is the first unseen message
         4444 S:   * OK [UIDVALIDITY 3857529045] UIDs valid
         4445 S:   a002 OK [READ-WRITE] SELECT completed
         4446 C:   a003 fetch 12 full
         4447 S:   * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700"
         4448       RFC822.SIZE 4286 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)"
         4449       "IMAP4rev1 WG mtg summary and minutes"
         4450       (("Terry Gray" NIL "gray" "cac.washington.edu"))
         4451       (("Terry Gray" NIL "gray" "cac.washington.edu"))
         4452       (("Terry Gray" NIL "gray" "cac.washington.edu"))
         4453       ((NIL NIL "imap" "cac.washington.edu"))
         4454       ((NIL NIL "minutes" "CNRI.Reston.VA.US")
         4455       ("John Klensin" NIL "KLENSIN" "MIT.EDU")) NIL NIL
         4456       "<B27397-0100000@cac.washington.edu>")
         4457        BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028
         4458        92))
         4459 S:    a003 OK FETCH completed
         4460 C:    a004 fetch 12 body[header]
         4461 S:    * 12 FETCH (BODY[HEADER] {342}
         4462 S:    Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)
         4463 S:    From: Terry Gray <gray@cac.washington.edu>
         4464 S:    Subject: IMAP4rev1 WG mtg summary and minutes
         4465 S:    To: imap@cac.washington.edu
         4466 S:    cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@MIT.EDU>
         4467 S:    Message-Id: <B27397-0100000@cac.washington.edu>
         4468 S:    MIME-Version: 1.0
         4469 S:    Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
         4470 S:
         4471 S:    )
         4472 S:    a004 OK FETCH completed
         4473 C:    a005 store 12 +flags \deleted
         4474 S:    * 12 FETCH (FLAGS (\Seen \Deleted))
         4475 S:    a005 OK +FLAGS completed
         4476 C:    a006 logout
         4477 S:    * BYE IMAP4rev1 server terminating connection
         4478 S:    a006 OK LOGOUT completed
         4479 
         4480 
         4481 
         4482 Crispin                     Standards Track                    [Page 80]
         4483 
         4484 RFC 3501                         IMAPv4                       March 2003
         4485 
         4486 
         4487 9.      Formal Syntax
         4488 
         4489    The following syntax specification uses the Augmented Backus-Naur
         4490    Form (ABNF) notation as specified in [ABNF].
         4491 
         4492    In the case of alternative or optional rules in which a later rule
         4493    overlaps an earlier rule, the rule which is listed earlier MUST take
         4494    priority.  For example, "\Seen" when parsed as a flag is the \Seen
         4495    flag name and not a flag-extension, even though "\Seen" can be parsed
         4496    as a flag-extension.  Some, but not all, instances of this rule are
         4497    noted below.
         4498 
         4499         Note: [ABNF] rules MUST be followed strictly; in
         4500         particular:
         4501 
         4502         (1) Except as noted otherwise, all alphabetic characters
         4503         are case-insensitive.  The use of upper or lower case
         4504         characters to define token strings is for editorial clarity
         4505         only.  Implementations MUST accept these strings in a
         4506         case-insensitive fashion.
         4507 
         4508         (2) In all cases, SP refers to exactly one space.  It is
         4509         NOT permitted to substitute TAB, insert additional spaces,
         4510         or otherwise treat SP as being equivalent to LWSP.
         4511 
         4512         (3) The ASCII NUL character, %x00, MUST NOT be used at any
         4513         time.
         4514 
         4515 address         = "(" addr-name SP addr-adl SP addr-mailbox SP
         4516                   addr-host ")"
         4517 
         4518 addr-adl        = nstring
         4519                     ; Holds route from [RFC-2822] route-addr if
         4520                     ; non-NIL
         4521 
         4522 addr-host       = nstring
         4523                     ; NIL indicates [RFC-2822] group syntax.
         4524                     ; Otherwise, holds [RFC-2822] domain name
         4525 
         4526 addr-mailbox    = nstring
         4527                     ; NIL indicates end of [RFC-2822] group; if
         4528                     ; non-NIL and addr-host is NIL, holds
         4529                     ; [RFC-2822] group name.
         4530                     ; Otherwise, holds [RFC-2822] local-part
         4531                     ; after removing [RFC-2822] quoting
         4532 
         4533 
         4534 
         4535 
         4536 
         4537 
         4538 Crispin                     Standards Track                    [Page 81]
         4539 
         4540 RFC 3501                         IMAPv4                       March 2003
         4541 
         4542 
         4543 addr-name       = nstring
         4544                     ; If non-NIL, holds phrase from [RFC-2822]
         4545                     ; mailbox after removing [RFC-2822] quoting
         4546 
         4547 append          = "APPEND" SP mailbox [SP flag-list] [SP date-time] SP
         4548                   literal
         4549 
         4550 astring         = 1*ASTRING-CHAR / string
         4551 
         4552 ASTRING-CHAR   = ATOM-CHAR / resp-specials
         4553 
         4554 atom            = 1*ATOM-CHAR
         4555 
         4556 ATOM-CHAR       = <any CHAR except atom-specials>
         4557 
         4558 atom-specials   = "(" / ")" / "{" / SP / CTL / list-wildcards /
         4559                   quoted-specials / resp-specials
         4560 
         4561 authenticate    = "AUTHENTICATE" SP auth-type *(CRLF base64)
         4562 
         4563 auth-type       = atom
         4564                     ; Defined by [SASL]
         4565 
         4566 base64          = *(4base64-char) [base64-terminal]
         4567 
         4568 base64-char     = ALPHA / DIGIT / "+" / "/"
         4569                     ; Case-sensitive
         4570 
         4571 base64-terminal = (2base64-char "==") / (3base64-char "=")
         4572 
         4573 body            = "(" (body-type-1part / body-type-mpart) ")"
         4574 
         4575 body-extension  = nstring / number /
         4576                    "(" body-extension *(SP body-extension) ")"
         4577                     ; Future expansion.  Client implementations
         4578                     ; MUST accept body-extension fields.  Server
         4579                     ; implementations MUST NOT generate
         4580                     ; body-extension fields except as defined by
         4581                     ; future standard or standards-track
         4582                     ; revisions of this specification.
         4583 
         4584 body-ext-1part  = body-fld-md5 [SP body-fld-dsp [SP body-fld-lang
         4585                   [SP body-fld-loc *(SP body-extension)]]]
         4586                     ; MUST NOT be returned on non-extensible
         4587                     ; "BODY" fetch
         4588 
         4589 
         4590 
         4591 
         4592 
         4593 
         4594 Crispin                     Standards Track                    [Page 82]
         4595 
         4596 RFC 3501                         IMAPv4                       March 2003
         4597 
         4598 
         4599 body-ext-mpart  = body-fld-param [SP body-fld-dsp [SP body-fld-lang
         4600                   [SP body-fld-loc *(SP body-extension)]]]
         4601                     ; MUST NOT be returned on non-extensible
         4602                     ; "BODY" fetch
         4603 
         4604 body-fields     = body-fld-param SP body-fld-id SP body-fld-desc SP
         4605                   body-fld-enc SP body-fld-octets
         4606 
         4607 body-fld-desc   = nstring
         4608 
         4609 body-fld-dsp    = "(" string SP body-fld-param ")" / nil
         4610 
         4611 body-fld-enc    = (DQUOTE ("7BIT" / "8BIT" / "BINARY" / "BASE64"/
         4612                   "QUOTED-PRINTABLE") DQUOTE) / string
         4613 
         4614 body-fld-id     = nstring
         4615 
         4616 body-fld-lang   = nstring / "(" string *(SP string) ")"
         4617 
         4618 body-fld-loc    = nstring
         4619 
         4620 body-fld-lines  = number
         4621 
         4622 body-fld-md5    = nstring
         4623 
         4624 body-fld-octets = number
         4625 
         4626 body-fld-param  = "(" string SP string *(SP string SP string) ")" / nil
         4627 
         4628 body-type-1part = (body-type-basic / body-type-msg / body-type-text)
         4629                   [SP body-ext-1part]
         4630 
         4631 body-type-basic = media-basic SP body-fields
         4632                     ; MESSAGE subtype MUST NOT be "RFC822"
         4633 
         4634 body-type-mpart = 1*body SP media-subtype
         4635                   [SP body-ext-mpart]
         4636 
         4637 body-type-msg   = media-message SP body-fields SP envelope
         4638                   SP body SP body-fld-lines
         4639 
         4640 body-type-text  = media-text SP body-fields SP body-fld-lines
         4641 
         4642 capability      = ("AUTH=" auth-type) / atom
         4643                     ; New capabilities MUST begin with "X" or be
         4644                     ; registered with IANA as standard or
         4645                     ; standards-track
         4646 
         4647 
         4648 
         4649 
         4650 Crispin                     Standards Track                    [Page 83]
         4651 
         4652 RFC 3501                         IMAPv4                       March 2003
         4653 
         4654 
         4655 capability-data = "CAPABILITY" *(SP capability) SP "IMAP4rev1"
         4656                   *(SP capability)
         4657                     ; Servers MUST implement the STARTTLS, AUTH=PLAIN,
         4658                     ; and LOGINDISABLED capabilities
         4659                     ; Servers which offer RFC 1730 compatibility MUST
         4660                     ; list "IMAP4" as the first capability.
         4661 
         4662 CHAR8           = %x01-ff
         4663                     ; any OCTET except NUL, %x00
         4664 
         4665 command         = tag SP (command-any / command-auth / command-nonauth /
         4666                   command-select) CRLF
         4667                     ; Modal based on state
         4668 
         4669 command-any     = "CAPABILITY" / "LOGOUT" / "NOOP" / x-command
         4670                     ; Valid in all states
         4671 
         4672 command-auth    = append / create / delete / examine / list / lsub /
         4673                   rename / select / status / subscribe / unsubscribe
         4674                     ; Valid only in Authenticated or Selected state
         4675 
         4676 command-nonauth = login / authenticate / "STARTTLS"
         4677                     ; Valid only when in Not Authenticated state
         4678 
         4679 command-select  = "CHECK" / "CLOSE" / "EXPUNGE" / copy / fetch / store /
         4680                   uid / search
         4681                     ; Valid only when in Selected state
         4682 
         4683 continue-req    = "+" SP (resp-text / base64) CRLF
         4684 
         4685 copy            = "COPY" SP sequence-set SP mailbox
         4686 
         4687 create          = "CREATE" SP mailbox
         4688                     ; Use of INBOX gives a NO error
         4689 
         4690 date            = date-text / DQUOTE date-text DQUOTE
         4691 
         4692 date-day        = 1*2DIGIT
         4693                     ; Day of month
         4694 
         4695 date-day-fixed  = (SP DIGIT) / 2DIGIT
         4696                     ; Fixed-format version of date-day
         4697 
         4698 date-month      = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" /
         4699                   "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
         4700 
         4701 date-text       = date-day "-" date-month "-" date-year
         4702 
         4703 
         4704 
         4705 
         4706 Crispin                     Standards Track                    [Page 84]
         4707 
         4708 RFC 3501                         IMAPv4                       March 2003
         4709 
         4710 
         4711 date-year       = 4DIGIT
         4712 
         4713 date-time       = DQUOTE date-day-fixed "-" date-month "-" date-year
         4714                   SP time SP zone DQUOTE
         4715 
         4716 delete          = "DELETE" SP mailbox
         4717                     ; Use of INBOX gives a NO error
         4718 
         4719 digit-nz        = %x31-39
         4720                     ; 1-9
         4721 
         4722 envelope        = "(" env-date SP env-subject SP env-from SP
         4723                   env-sender SP env-reply-to SP env-to SP env-cc SP
         4724                   env-bcc SP env-in-reply-to SP env-message-id ")"
         4725 
         4726 env-bcc         = "(" 1*address ")" / nil
         4727 
         4728 env-cc          = "(" 1*address ")" / nil
         4729 
         4730 env-date        = nstring
         4731 
         4732 env-from        = "(" 1*address ")" / nil
         4733 
         4734 env-in-reply-to = nstring
         4735 
         4736 env-message-id  = nstring
         4737 
         4738 env-reply-to    = "(" 1*address ")" / nil
         4739 
         4740 env-sender      = "(" 1*address ")" / nil
         4741 
         4742 env-subject     = nstring
         4743 
         4744 env-to          = "(" 1*address ")" / nil
         4745 
         4746 examine         = "EXAMINE" SP mailbox
         4747 
         4748 fetch           = "FETCH" SP sequence-set SP ("ALL" / "FULL" / "FAST" /
         4749                   fetch-att / "(" fetch-att *(SP fetch-att) ")")
         4750 
         4751 fetch-att       = "ENVELOPE" / "FLAGS" / "INTERNALDATE" /
         4752                   "RFC822" [".HEADER" / ".SIZE" / ".TEXT"] /
         4753                   "BODY" ["STRUCTURE"] / "UID" /
         4754                   "BODY" section ["<" number "." nz-number ">"] /
         4755                   "BODY.PEEK" section ["<" number "." nz-number ">"]
         4756 
         4757 
         4758 
         4759 
         4760 
         4761 
         4762 Crispin                     Standards Track                    [Page 85]
         4763 
         4764 RFC 3501                         IMAPv4                       March 2003
         4765 
         4766 
         4767 flag            = "\Answered" / "\Flagged" / "\Deleted" /
         4768                   "\Seen" / "\Draft" / flag-keyword / flag-extension
         4769                     ; Does not include "\Recent"
         4770 
         4771 flag-extension  = "\" atom
         4772                     ; Future expansion.  Client implementations
         4773                     ; MUST accept flag-extension flags.  Server
         4774                     ; implementations MUST NOT generate
         4775                     ; flag-extension flags except as defined by
         4776                     ; future standard or standards-track
         4777                     ; revisions of this specification.
         4778 
         4779 flag-fetch      = flag / "\Recent"
         4780 
         4781 flag-keyword    = atom
         4782 
         4783 flag-list       = "(" [flag *(SP flag)] ")"
         4784 
         4785 flag-perm       = flag / "\*"
         4786 
         4787 greeting        = "*" SP (resp-cond-auth / resp-cond-bye) CRLF
         4788 
         4789 header-fld-name = astring
         4790 
         4791 header-list     = "(" header-fld-name *(SP header-fld-name) ")"
         4792 
         4793 list            = "LIST" SP mailbox SP list-mailbox
         4794 
         4795 list-mailbox    = 1*list-char / string
         4796 
         4797 list-char       = ATOM-CHAR / list-wildcards / resp-specials
         4798 
         4799 list-wildcards  = "%" / "*"
         4800 
         4801 literal         = "{" number "}" CRLF *CHAR8
         4802                     ; Number represents the number of CHAR8s
         4803 
         4804 login           = "LOGIN" SP userid SP password
         4805 
         4806 lsub            = "LSUB" SP mailbox SP list-mailbox
         4807 
         4808 
         4809 
         4810 
         4811 
         4812 
         4813 
         4814 
         4815 
         4816 
         4817 
         4818 Crispin                     Standards Track                    [Page 86]
         4819 
         4820 RFC 3501                         IMAPv4                       March 2003
         4821 
         4822 
         4823 mailbox         = "INBOX" / astring
         4824                     ; INBOX is case-insensitive.  All case variants of
         4825                     ; INBOX (e.g., "iNbOx") MUST be interpreted as INBOX
         4826                     ; not as an astring.  An astring which consists of
         4827                     ; the case-insensitive sequence "I" "N" "B" "O" "X"
         4828                     ; is considered to be INBOX and not an astring.
         4829                     ;  Refer to section 5.1 for further
         4830                     ; semantic details of mailbox names.
         4831 
         4832 mailbox-data    =  "FLAGS" SP flag-list / "LIST" SP mailbox-list /
         4833                    "LSUB" SP mailbox-list / "SEARCH" *(SP nz-number) /
         4834                    "STATUS" SP mailbox SP "(" [status-att-list] ")" /
         4835                    number SP "EXISTS" / number SP "RECENT"
         4836 
         4837 mailbox-list    = "(" [mbx-list-flags] ")" SP
         4838                    (DQUOTE QUOTED-CHAR DQUOTE / nil) SP mailbox
         4839 
         4840 mbx-list-flags  = *(mbx-list-oflag SP) mbx-list-sflag
         4841                   *(SP mbx-list-oflag) /
         4842                   mbx-list-oflag *(SP mbx-list-oflag)
         4843 
         4844 mbx-list-oflag  = "\Noinferiors" / flag-extension
         4845                     ; Other flags; multiple possible per LIST response
         4846 
         4847 mbx-list-sflag  = "\Noselect" / "\Marked" / "\Unmarked"
         4848                     ; Selectability flags; only one per LIST response
         4849 
         4850 media-basic     = ((DQUOTE ("APPLICATION" / "AUDIO" / "IMAGE" /
         4851                   "MESSAGE" / "VIDEO") DQUOTE) / string) SP
         4852                   media-subtype
         4853                     ; Defined in [MIME-IMT]
         4854 
         4855 media-message   = DQUOTE "MESSAGE" DQUOTE SP DQUOTE "RFC822" DQUOTE
         4856                     ; Defined in [MIME-IMT]
         4857 
         4858 media-subtype   = string
         4859                     ; Defined in [MIME-IMT]
         4860 
         4861 media-text      = DQUOTE "TEXT" DQUOTE SP media-subtype
         4862                     ; Defined in [MIME-IMT]
         4863 
         4864 message-data    = nz-number SP ("EXPUNGE" / ("FETCH" SP msg-att))
         4865 
         4866 msg-att         = "(" (msg-att-dynamic / msg-att-static)
         4867                    *(SP (msg-att-dynamic / msg-att-static)) ")"
         4868 
         4869 msg-att-dynamic = "FLAGS" SP "(" [flag-fetch *(SP flag-fetch)] ")"
         4870                     ; MAY change for a message
         4871 
         4872 
         4873 
         4874 Crispin                     Standards Track                    [Page 87]
         4875 
         4876 RFC 3501                         IMAPv4                       March 2003
         4877 
         4878 
         4879 msg-att-static  = "ENVELOPE" SP envelope / "INTERNALDATE" SP date-time /
         4880                   "RFC822" [".HEADER" / ".TEXT"] SP nstring /
         4881                   "RFC822.SIZE" SP number /
         4882                   "BODY" ["STRUCTURE"] SP body /
         4883                   "BODY" section ["<" number ">"] SP nstring /
         4884                   "UID" SP uniqueid
         4885                     ; MUST NOT change for a message
         4886 
         4887 nil             = "NIL"
         4888 
         4889 nstring         = string / nil
         4890 
         4891 number          = 1*DIGIT
         4892                     ; Unsigned 32-bit integer
         4893                     ; (0 <= n < 4,294,967,296)
         4894 
         4895 nz-number       = digit-nz *DIGIT
         4896                     ; Non-zero unsigned 32-bit integer
         4897                     ; (0 < n < 4,294,967,296)
         4898 
         4899 password        = astring
         4900 
         4901 quoted          = DQUOTE *QUOTED-CHAR DQUOTE
         4902 
         4903 QUOTED-CHAR     = <any TEXT-CHAR except quoted-specials> /
         4904                   "\" quoted-specials
         4905 
         4906 quoted-specials = DQUOTE / "\"
         4907 
         4908 rename          = "RENAME" SP mailbox SP mailbox
         4909                     ; Use of INBOX as a destination gives a NO error
         4910 
         4911 response        = *(continue-req / response-data) response-done
         4912 
         4913 response-data   = "*" SP (resp-cond-state / resp-cond-bye /
         4914                   mailbox-data / message-data / capability-data) CRLF
         4915 
         4916 response-done   = response-tagged / response-fatal
         4917 
         4918 response-fatal  = "*" SP resp-cond-bye CRLF
         4919                     ; Server closes connection immediately
         4920 
         4921 response-tagged = tag SP resp-cond-state CRLF
         4922 
         4923 resp-cond-auth  = ("OK" / "PREAUTH") SP resp-text
         4924                     ; Authentication condition
         4925 
         4926 
         4927 
         4928 
         4929 
         4930 Crispin                     Standards Track                    [Page 88]
         4931 
         4932 RFC 3501                         IMAPv4                       March 2003
         4933 
         4934 
         4935 resp-cond-bye   = "BYE" SP resp-text
         4936 
         4937 resp-cond-state = ("OK" / "NO" / "BAD") SP resp-text
         4938                     ; Status condition
         4939 
         4940 resp-specials   = "]"
         4941 
         4942 resp-text       = ["[" resp-text-code "]" SP] text
         4943 
         4944 resp-text-code  = "ALERT" /
         4945                   "BADCHARSET" [SP "(" astring *(SP astring) ")" ] /
         4946                   capability-data / "PARSE" /
         4947                   "PERMANENTFLAGS" SP "("
         4948                   [flag-perm *(SP flag-perm)] ")" /
         4949                   "READ-ONLY" / "READ-WRITE" / "TRYCREATE" /
         4950                   "UIDNEXT" SP nz-number / "UIDVALIDITY" SP nz-number /
         4951                   "UNSEEN" SP nz-number /
         4952                   atom [SP 1*<any TEXT-CHAR except "]">]
         4953 
         4954 search          = "SEARCH" [SP "CHARSET" SP astring] 1*(SP search-key)
         4955                     ; CHARSET argument to MUST be registered with IANA
         4956 
         4957 search-key      = "ALL" / "ANSWERED" / "BCC" SP astring /
         4958                   "BEFORE" SP date / "BODY" SP astring /
         4959                   "CC" SP astring / "DELETED" / "FLAGGED" /
         4960                   "FROM" SP astring / "KEYWORD" SP flag-keyword /
         4961                   "NEW" / "OLD" / "ON" SP date / "RECENT" / "SEEN" /
         4962                   "SINCE" SP date / "SUBJECT" SP astring /
         4963                   "TEXT" SP astring / "TO" SP astring /
         4964                   "UNANSWERED" / "UNDELETED" / "UNFLAGGED" /
         4965                   "UNKEYWORD" SP flag-keyword / "UNSEEN" /
         4966                     ; Above this line were in [IMAP2]
         4967                   "DRAFT" / "HEADER" SP header-fld-name SP astring /
         4968                   "LARGER" SP number / "NOT" SP search-key /
         4969                   "OR" SP search-key SP search-key /
         4970                   "SENTBEFORE" SP date / "SENTON" SP date /
         4971                   "SENTSINCE" SP date / "SMALLER" SP number /
         4972                   "UID" SP sequence-set / "UNDRAFT" / sequence-set /
         4973                   "(" search-key *(SP search-key) ")"
         4974 
         4975 section         = "[" [section-spec] "]"
         4976 
         4977 section-msgtext = "HEADER" / "HEADER.FIELDS" [".NOT"] SP header-list /
         4978                   "TEXT"
         4979                     ; top-level or MESSAGE/RFC822 part
         4980 
         4981 section-part    = nz-number *("." nz-number)
         4982                     ; body part nesting
         4983 
         4984 
         4985 
         4986 Crispin                     Standards Track                    [Page 89]
         4987 
         4988 RFC 3501                         IMAPv4                       March 2003
         4989 
         4990 
         4991 section-spec    = section-msgtext / (section-part ["." section-text])
         4992 
         4993 section-text    = section-msgtext / "MIME"
         4994                     ; text other than actual body part (headers, etc.)
         4995 
         4996 select          = "SELECT" SP mailbox
         4997 
         4998 seq-number      = nz-number / "*"
         4999                     ; message sequence number (COPY, FETCH, STORE
         5000                     ; commands) or unique identifier (UID COPY,
         5001                     ; UID FETCH, UID STORE commands).
         5002                     ; * represents the largest number in use.  In
         5003                     ; the case of message sequence numbers, it is
         5004                     ; the number of messages in a non-empty mailbox.
         5005                     ; In the case of unique identifiers, it is the
         5006                     ; unique identifier of the last message in the
         5007                     ; mailbox or, if the mailbox is empty, the
         5008                     ; mailbox's current UIDNEXT value.
         5009                     ; The server should respond with a tagged BAD
         5010                     ; response to a command that uses a message
         5011                     ; sequence number greater than the number of
         5012                     ; messages in the selected mailbox.  This
         5013                     ; includes "*" if the selected mailbox is empty.
         5014 
         5015 seq-range       = seq-number ":" seq-number
         5016                     ; two seq-number values and all values between
         5017                     ; these two regardless of order.
         5018                     ; Example: 2:4 and 4:2 are equivalent and indicate
         5019                     ; values 2, 3, and 4.
         5020                     ; Example: a unique identifier sequence range of
         5021                     ; 3291:* includes the UID of the last message in
         5022                     ; the mailbox, even if that value is less than 3291.
         5023 
         5024 sequence-set    = (seq-number / seq-range) *("," sequence-set)
         5025                     ; set of seq-number values, regardless of order.
         5026                     ; Servers MAY coalesce overlaps and/or execute the
         5027                     ; sequence in any order.
         5028                     ; Example: a message sequence number set of
         5029                     ; 2,4:7,9,12:* for a mailbox with 15 messages is
         5030                     ; equivalent to 2,4,5,6,7,9,12,13,14,15
         5031                     ; Example: a message sequence number set of *:4,5:7
         5032                     ; for a mailbox with 10 messages is equivalent to
         5033                     ; 10,9,8,7,6,5,4,5,6,7 and MAY be reordered and
         5034                     ; overlap coalesced to be 4,5,6,7,8,9,10.
         5035 
         5036 status          = "STATUS" SP mailbox SP
         5037                   "(" status-att *(SP status-att) ")"
         5038 
         5039 
         5040 
         5041 
         5042 Crispin                     Standards Track                    [Page 90]
         5043 
         5044 RFC 3501                         IMAPv4                       March 2003
         5045 
         5046 
         5047 status-att      = "MESSAGES" / "RECENT" / "UIDNEXT" / "UIDVALIDITY" /
         5048                   "UNSEEN"
         5049 
         5050 status-att-list =  status-att SP number *(SP status-att SP number)
         5051 
         5052 store           = "STORE" SP sequence-set SP store-att-flags
         5053 
         5054 store-att-flags = (["+" / "-"] "FLAGS" [".SILENT"]) SP
         5055                   (flag-list / (flag *(SP flag)))
         5056 
         5057 string          = quoted / literal
         5058 
         5059 subscribe       = "SUBSCRIBE" SP mailbox
         5060 
         5061 tag             = 1*<any ASTRING-CHAR except "+">
         5062 
         5063 text            = 1*TEXT-CHAR
         5064 
         5065 TEXT-CHAR       = <any CHAR except CR and LF>
         5066 
         5067 time            = 2DIGIT ":" 2DIGIT ":" 2DIGIT
         5068                     ; Hours minutes seconds
         5069 
         5070 uid             = "UID" SP (copy / fetch / search / store)
         5071                     ; Unique identifiers used instead of message
         5072                     ; sequence numbers
         5073 
         5074 uniqueid        = nz-number
         5075                     ; Strictly ascending
         5076 
         5077 unsubscribe     = "UNSUBSCRIBE" SP mailbox
         5078 
         5079 userid          = astring
         5080 
         5081 x-command       = "X" atom <experimental command arguments>
         5082 
         5083 zone            = ("+" / "-") 4DIGIT
         5084                     ; Signed four-digit value of hhmm representing
         5085                     ; hours and minutes east of Greenwich (that is,
         5086                     ; the amount that the given time differs from
         5087                     ; Universal Time).  Subtracting the timezone
         5088                     ; from the given time will give the UT form.
         5089                     ; The Universal Time zone is "+0000".
         5090 
         5091 
         5092 
         5093 
         5094 
         5095 
         5096 
         5097 
         5098 Crispin                     Standards Track                    [Page 91]
         5099 
         5100 RFC 3501                         IMAPv4                       March 2003
         5101 
         5102 
         5103 10.     Author's Note
         5104 
         5105    This document is a revision or rewrite of earlier documents, and
         5106    supercedes the protocol specification in those documents: RFC 2060,
         5107    RFC 1730, unpublished IMAP2bis.TXT document, RFC 1176, and RFC 1064.
         5108 
         5109 11.     Security Considerations
         5110 
         5111    IMAP4rev1 protocol transactions, including electronic mail data, are
         5112    sent in the clear over the network unless protection from snooping is
         5113    negotiated.  This can be accomplished either by the use of STARTTLS,
         5114    negotiated privacy protection in the AUTHENTICATE command, or some
         5115    other protection mechanism.
         5116 
         5117 11.1.   STARTTLS Security Considerations
         5118 
         5119    The specification of the STARTTLS command and LOGINDISABLED
         5120    capability in this document replaces that in [IMAP-TLS].  [IMAP-TLS]
         5121    remains normative for the PLAIN [SASL] authenticator.
         5122 
         5123    IMAP client and server implementations MUST implement the
         5124    TLS_RSA_WITH_RC4_128_MD5 [TLS] cipher suite, and SHOULD implement the
         5125    TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA [TLS] cipher suite.  This is
         5126    important as it assures that any two compliant implementations can be
         5127    configured to interoperate.  All other cipher suites are OPTIONAL.
         5128    Note that this is a change from section 2.1 of [IMAP-TLS].
         5129 
         5130    During the [TLS] negotiation, the client MUST check its understanding
         5131    of the server hostname against the server's identity as presented in
         5132    the server Certificate message, in order to prevent man-in-the-middle
         5133    attacks.  If the match fails, the client SHOULD either ask for
         5134    explicit user confirmation, or terminate the connection and indicate
         5135    that the server's identity is suspect.  Matching is performed
         5136    according to these rules:
         5137 
         5138         The client MUST use the server hostname it used to open the
         5139         connection as the value to compare against the server name
         5140         as expressed in the server certificate.  The client MUST
         5141         NOT use any form of the server hostname derived from an
         5142         insecure remote source (e.g., insecure DNS lookup).  CNAME
         5143         canonicalization is not done.
         5144 
         5145         If a subjectAltName extension of type dNSName is present in
         5146         the certificate, it SHOULD be used as the source of the
         5147         server's identity.
         5148 
         5149         Matching is case-insensitive.
         5150 
         5151 
         5152 
         5153 
         5154 Crispin                     Standards Track                    [Page 92]
         5155 
         5156 RFC 3501                         IMAPv4                       March 2003
         5157 
         5158 
         5159         A "*" wildcard character MAY be used as the left-most name
         5160         component in the certificate.  For example, *.example.com
         5161         would match a.example.com, foo.example.com, etc. but would
         5162         not match example.com.
         5163 
         5164         If the certificate contains multiple names (e.g., more than
         5165         one dNSName field), then a match with any one of the fields
         5166         is considered acceptable.
         5167 
         5168    Both the client and server MUST check the result of the STARTTLS
         5169    command and subsequent [TLS] negotiation to see whether acceptable
         5170    authentication or privacy was achieved.
         5171 
         5172 11.2.   Other Security Considerations
         5173 
         5174    A server error message for an AUTHENTICATE command which fails due to
         5175    invalid credentials SHOULD NOT detail why the credentials are
         5176    invalid.
         5177 
         5178    Use of the LOGIN command sends passwords in the clear.  This can be
         5179    avoided by using the AUTHENTICATE command with a [SASL] mechanism
         5180    that does not use plaintext passwords, by first negotiating
         5181    encryption via STARTTLS or some other protection mechanism.
         5182 
         5183    A server implementation MUST implement a configuration that, at the
         5184    time of authentication, requires:
         5185       (1) The STARTTLS command has been negotiated.
         5186    OR
         5187       (2) Some other mechanism that protects the session from password
         5188       snooping has been provided.
         5189    OR
         5190       (3) The following measures are in place:
         5191          (a) The LOGINDISABLED capability is advertised, and [SASL]
         5192          mechanisms (such as PLAIN) using plaintext passwords are NOT
         5193          advertised in the CAPABILITY list.
         5194       AND
         5195          (b) The LOGIN command returns an error even if the password is
         5196          correct.
         5197       AND
         5198          (c) The AUTHENTICATE command returns an error with all [SASL]
         5199          mechanisms that use plaintext passwords, even if the password
         5200          is correct.
         5201 
         5202    A server error message for a failing LOGIN command SHOULD NOT specify
         5203    that the user name, as opposed to the password, is invalid.
         5204 
         5205    A server SHOULD have mechanisms in place to limit or delay failed
         5206    AUTHENTICATE/LOGIN attempts.
         5207 
         5208 
         5209 
         5210 Crispin                     Standards Track                    [Page 93]
         5211 
         5212 RFC 3501                         IMAPv4                       March 2003
         5213 
         5214 
         5215    Additional security considerations are discussed in the section
         5216    discussing the AUTHENTICATE and LOGIN commands.
         5217 
         5218 12.     IANA Considerations
         5219 
         5220    IMAP4 capabilities are registered by publishing a standards track or
         5221    IESG approved experimental RFC.  The registry is currently located
         5222    at:
         5223 
         5224         http://www.iana.org/assignments/imap4-capabilities
         5225 
         5226    As this specification revises the STARTTLS and LOGINDISABLED
         5227    extensions previously defined in [IMAP-TLS], the registry will be
         5228    updated accordingly.
         5229 
         5230 
         5231 
         5232 
         5233 
         5234 
         5235 
         5236 
         5237 
         5238 
         5239 
         5240 
         5241 
         5242 
         5243 
         5244 
         5245 
         5246 
         5247 
         5248 
         5249 
         5250 
         5251 
         5252 
         5253 
         5254 
         5255 
         5256 
         5257 
         5258 
         5259 
         5260 
         5261 
         5262 
         5263 
         5264 
         5265 
         5266 Crispin                     Standards Track                    [Page 94]
         5267 
         5268 RFC 3501                         IMAPv4                       March 2003
         5269 
         5270 
         5271 Appendices
         5272 
         5273 A.      Normative References
         5274 
         5275    The following documents contain definitions or specifications that
         5276    are necessary to understand this document properly:
         5277    [ABNF]                Crocker, D. and P. Overell, "Augmented BNF for
         5278                          Syntax Specifications: ABNF", RFC 2234,
         5279                          November 1997.
         5280 
         5281    [ANONYMOUS]           Newman, C., "Anonymous SASL Mechanism", RFC
         5282                          2245, November 1997.
         5283 
         5284    [CHARSET]             Freed, N. and J. Postel, "IANA Character Set
         5285                          Registration Procedures", RFC 2978, October
         5286                          2000.
         5287 
         5288    [DIGEST-MD5]          Leach, P. and C. Newman, "Using Digest
         5289                          Authentication as a SASL Mechanism", RFC 2831,
         5290                          May 2000.
         5291 
         5292    [DISPOSITION]         Troost, R., Dorner, S. and K. Moore,
         5293                          "Communicating Presentation Information in
         5294                          Internet Messages: The Content-Disposition
         5295                          Header", RFC 2183, August 1997.
         5296 
         5297    [IMAP-TLS]            Newman, C., "Using TLS with IMAP, POP3 and
         5298                          ACAP", RFC 2595, June 1999.
         5299 
         5300    [KEYWORDS]            Bradner, S., "Key words for use in RFCs to
         5301                          Indicate Requirement Levels", BCP 14, RFC 2119,
         5302                          March 1997.
         5303 
         5304    [LANGUAGE-TAGS]       Alvestrand, H., "Tags for the Identification of
         5305                          Languages", BCP 47, RFC 3066, January 2001.
         5306 
         5307    [LOCATION]            Palme, J., Hopmann, A. and N. Shelness, "MIME
         5308                          Encapsulation of Aggregate Documents, such as
         5309                          HTML (MHTML)", RFC 2557, March 1999.
         5310 
         5311    [MD5]                 Myers, J. and M. Rose, "The Content-MD5 Header
         5312                          Field", RFC 1864, October 1995.
         5313 
         5314 
         5315 
         5316 
         5317 
         5318 
         5319 
         5320 
         5321 
         5322 Crispin                     Standards Track                    [Page 95]
         5323 
         5324 RFC 3501                         IMAPv4                       March 2003
         5325 
         5326 
         5327    [MIME-HDRS]           Moore, K., "MIME (Multipurpose Internet Mail
         5328                          Extensions) Part Three: Message Header
         5329                          Extensions for Non-ASCII Text", RFC 2047,
         5330                          November 1996.
         5331 
         5332    [MIME-IMB]            Freed, N. and N. Borenstein, "MIME
         5333                          (Multipurpose Internet Mail Extensions) Part
         5334                          One: Format of Internet Message Bodies", RFC
         5335                          2045, November 1996.
         5336 
         5337    [MIME-IMT]            Freed, N. and N. Borenstein, "MIME
         5338                          (Multipurpose Internet Mail Extensions) Part
         5339                          Two: Media Types", RFC 2046, November 1996.
         5340 
         5341    [RFC-2822]            Resnick, P., "Internet Message Format", RFC
         5342                          2822, April 2001.
         5343 
         5344    [SASL]                Myers, J., "Simple Authentication and Security
         5345                          Layer (SASL)", RFC 2222, October 1997.
         5346 
         5347    [TLS]                 Dierks, T. and C. Allen, "The TLS Protocol
         5348                          Version 1.0", RFC 2246, January 1999.
         5349 
         5350    [UTF-7]               Goldsmith, D. and M. Davis, "UTF-7: A Mail-Safe
         5351                          Transformation Format of Unicode", RFC 2152,
         5352                          May 1997.
         5353 
         5354    The following documents describe quality-of-implementation issues
         5355    that should be carefully considered when implementing this protocol:
         5356 
         5357    [IMAP-IMPLEMENTATION] Leiba, B., "IMAP Implementation
         5358                          Recommendations", RFC 2683, September 1999.
         5359 
         5360    [IMAP-MULTIACCESS]    Gahrns, M., "IMAP4 Multi-Accessed Mailbox
         5361                          Practice", RFC 2180, July 1997.
         5362 
         5363 A.1     Informative References
         5364 
         5365    The following documents describe related protocols:
         5366 
         5367    [IMAP-DISC]           Austein, R., "Synchronization Operations for
         5368                          Disconnected IMAP4 Clients", Work in Progress.
         5369 
         5370    [IMAP-MODEL]          Crispin, M., "Distributed Electronic Mail
         5371                          Models in IMAP4", RFC 1733, December 1994.
         5372 
         5373 
         5374 
         5375 
         5376 
         5377 
         5378 Crispin                     Standards Track                    [Page 96]
         5379 
         5380 RFC 3501                         IMAPv4                       March 2003
         5381 
         5382 
         5383    [ACAP]                Newman, C. and J. Myers, "ACAP -- Application
         5384                          Configuration Access Protocol", RFC 2244,
         5385                          November 1997.
         5386 
         5387    [SMTP]                Klensin, J., "Simple Mail Transfer Protocol",
         5388                          STD 10, RFC 2821, April 2001.
         5389 
         5390    The following documents are historical or describe historical aspects
         5391    of this protocol:
         5392 
         5393    [IMAP-COMPAT]         Crispin, M., "IMAP4 Compatibility with
         5394                          IMAP2bis", RFC 2061, December 1996.
         5395 
         5396    [IMAP-HISTORICAL]     Crispin, M., "IMAP4 Compatibility with IMAP2
         5397                          and IMAP2bis", RFC 1732, December 1994.
         5398 
         5399    [IMAP-OBSOLETE]       Crispin, M., "Internet Message Access Protocol
         5400                          - Obsolete Syntax", RFC 2062, December 1996.
         5401 
         5402    [IMAP2]               Crispin, M., "Interactive Mail Access Protocol
         5403                          - Version 2", RFC 1176, August 1990.
         5404 
         5405    [RFC-822]             Crocker, D., "Standard for the Format of ARPA
         5406                          Internet Text Messages", STD 11, RFC 822,
         5407                          August 1982.
         5408 
         5409    [RFC-821]             Postel, J., "Simple Mail Transfer Protocol",
         5410                          STD 10, RFC 821, August 1982.
         5411 
         5412 B.      Changes from RFC 2060
         5413 
         5414    1) Clarify description of unique identifiers and their semantics.
         5415 
         5416    2) Fix the SELECT description to clarify that UIDVALIDITY is required
         5417    in the SELECT and EXAMINE responses.
         5418 
         5419    3) Added an example of a failing search.
         5420 
         5421    4) Correct store-att-flags: "#flag" should be "1#flag".
         5422 
         5423    5) Made search and section rules clearer.
         5424 
         5425    6) Correct the STORE example.
         5426 
         5427    7) Correct "BASE645" misspelling.
         5428 
         5429    8) Remove extraneous close parenthesis in example of two-part message
         5430    with text and BASE64 attachment.
         5431 
         5432 
         5433 
         5434 Crispin                     Standards Track                    [Page 97]
         5435 
         5436 RFC 3501                         IMAPv4                       March 2003
         5437 
         5438 
         5439    9) Remove obsolete "MAILBOX" response from mailbox-data.
         5440 
         5441    10) A spurious "<" in the rule for mailbox-data was removed.
         5442 
         5443    11) Add CRLF to continue-req.
         5444 
         5445    12) Specifically exclude "]" from the atom in resp-text-code.
         5446 
         5447    13) Clarify that clients and servers should adhere strictly to the
         5448    protocol syntax.
         5449 
         5450    14) Emphasize in 5.2 that EXISTS can not be used to shrink a mailbox.
         5451 
         5452    15) Add NEWNAME to resp-text-code.
         5453 
         5454    16) Clarify that the empty string, not NIL, is used as arguments to
         5455    LIST.
         5456 
         5457    17) Clarify that NIL can be returned as a hierarchy delimiter for the
         5458    empty string mailbox name argument if the mailbox namespace is flat.
         5459 
         5460    18) Clarify that addr-mailbox and addr-name have RFC-2822 quoting
         5461    removed.
         5462 
         5463    19) Update UTF-7 reference.
         5464 
         5465    20) Fix example in 6.3.11.
         5466 
         5467    21) Clarify that non-existent UIDs are ignored.
         5468 
         5469    22) Update DISPOSITION reference.
         5470 
         5471    23) Expand state diagram.
         5472 
         5473    24) Clarify that partial fetch responses are only returned in
         5474    response to a partial fetch command.
         5475 
         5476    25) Add UIDNEXT response code.  Correct UIDVALIDITY definition
         5477    reference.
         5478 
         5479    26) Further clarification of "can" vs. "MAY".
         5480 
         5481    27) Reference RFC-2119.
         5482 
         5483    28) Clarify that superfluous shifts are not permitted in modified
         5484    UTF-7.
         5485 
         5486    29) Clarify that there are no implicit shifts in modified UTF-7.
         5487 
         5488 
         5489 
         5490 Crispin                     Standards Track                    [Page 98]
         5491 
         5492 RFC 3501                         IMAPv4                       March 2003
         5493 
         5494 
         5495    30) Clarify that "INBOX" in a mailbox name is always INBOX, even if
         5496    it is given as a string.
         5497 
         5498    31) Add missing open parenthesis in media-basic grammar rule.
         5499 
         5500    32) Correct attribute syntax in mailbox-data.
         5501 
         5502    33) Add UIDNEXT to EXAMINE responses.
         5503 
         5504    34) Clarify UNSEEN, PERMANENTFLAGS, UIDVALIDITY, and UIDNEXT
         5505    responses in SELECT and EXAMINE.  They are required now, but weren't
         5506    in older versions.
         5507 
         5508    35) Update references with RFC numbers.
         5509 
         5510    36) Flush text-mime2.
         5511 
         5512    37) Clarify that modified UTF-7 names must be case-sensitive and that
         5513    violating the convention should be avoided.
         5514 
         5515    38) Correct UID FETCH example.
         5516 
         5517    39) Clarify UID FETCH, UID STORE, and UID SEARCH vs. untagged EXPUNGE
         5518    responses.
         5519 
         5520    40) Clarify the use of the word "convention".
         5521 
         5522    41) Clarify that a command is not "in progress" until it has been
         5523    fully received (specifically, that a command is not "in progress"
         5524    during command continuation negotiation).
         5525 
         5526    42) Clarify envelope defaulting.
         5527 
         5528    43) Clarify that SP means one and only one space character.
         5529 
         5530    44) Forbid silly states in LIST response.
         5531 
         5532    45) Clarify that the ENVELOPE, INTERNALDATE, RFC822*, BODY*, and UID
         5533    for a message is static.
         5534 
         5535    46) Add BADCHARSET response code.
         5536 
         5537    47) Update formal syntax to [ABNF] conventions.
         5538 
         5539    48) Clarify trailing hierarchy delimiter in CREATE semantics.
         5540 
         5541    49) Clarify that the "blank line" is the [RFC-2822] delimiting blank
         5542    line.
         5543 
         5544 
         5545 
         5546 Crispin                     Standards Track                    [Page 99]
         5547 
         5548 RFC 3501                         IMAPv4                       March 2003
         5549 
         5550 
         5551    50) Clarify that RENAME should also create hierarchy as needed for
         5552    the command to complete.
         5553 
         5554    51) Fix body-ext-mpart to not require language if disposition
         5555    present.
         5556 
         5557    52) Clarify the RFC822.HEADER response.
         5558 
         5559    53) Correct missing space after charset astring in search.
         5560 
         5561    54) Correct missing quote for BADCHARSET in resp-text-code.
         5562 
         5563    55) Clarify that ALL, FAST, and FULL preclude any other data items
         5564    appearing.
         5565 
         5566    56) Clarify semantics of reference argument in LIST.
         5567 
         5568    57) Clarify that a null string for SEARCH HEADER X-FOO means any
         5569    message with a header line with a field-name of X-FOO regardless of
         5570    the text of the header.
         5571 
         5572    58) Specifically reserve 8-bit mailbox names for future use as UTF-8.
         5573 
         5574    59) It is not an error for the client to store a flag that is not in
         5575    the PERMANENTFLAGS list; however, the server will either ignore the
         5576    change or make the change in the session only.
         5577 
         5578    60) Correct/clarify the text regarding superfluous shifts.
         5579 
         5580    61) Correct typographic errors in the "Changes" section.
         5581 
         5582    62) Clarify that STATUS must not be used to check for new messages in
         5583    the selected mailbox
         5584 
         5585    63) Clarify LSUB behavior with "%" wildcard.
         5586 
         5587    64) Change AUTHORIZATION to AUTHENTICATE in section 7.5.
         5588 
         5589    65) Clarify description of multipart body type.
         5590 
         5591    66) Clarify that STORE FLAGS does not affect \Recent.
         5592 
         5593    67) Change "west" to "east" in description of timezone.
         5594 
         5595    68) Clarify that commands which break command pipelining must wait
         5596    for a completion result response.
         5597 
         5598    69) Clarify that EXAMINE does not affect \Recent.
         5599 
         5600 
         5601 
         5602 Crispin                     Standards Track                   [Page 100]
         5603 
         5604 RFC 3501                         IMAPv4                       March 2003
         5605 
         5606 
         5607    70) Make description of MIME structure consistent.
         5608 
         5609    71) Clarify that date searches disregard the time and timezone of the
         5610    INTERNALDATE or Date: header.  In other words, "ON 13-APR-2000" means
         5611    messages with an INTERNALDATE text which starts with "13-APR-2000",
         5612    even if timezone differential from the local timezone is sufficient
         5613    to move that INTERNALDATE into the previous or next day.
         5614 
         5615    72) Clarify that the header fetches don't add a blank line if one
         5616    isn't in the [RFC-2822] message.
         5617 
         5618    73) Clarify (in discussion of UIDs) that messages are immutable.
         5619 
         5620    74) Add an example of CHARSET searching.
         5621 
         5622    75) Clarify in SEARCH that keywords are a type of flag.
         5623 
         5624    76) Clarify the mandatory nature of the SELECT data responses.
         5625 
         5626    77) Add optional CAPABILITY response code in the initial OK or
         5627    PREAUTH.
         5628 
         5629    78) Add note that server can send an untagged CAPABILITY command as
         5630    part of the responses to AUTHENTICATE and LOGIN.
         5631 
         5632    79) Remove statement about it being unnecessary to issue a CAPABILITY
         5633    command more than once in a connection.  That statement is no longer
         5634    true.
         5635 
         5636    80) Clarify that untagged EXPUNGE decrements the number of messages
         5637    in the mailbox.
         5638 
         5639    81) Fix definition of "body" (concatenation has tighter binding than
         5640    alternation).
         5641 
         5642    82) Add a new "Special Notes to Implementors" section with reference
         5643    to [IMAP-IMPLEMENTATION].
         5644 
         5645    83) Clarify that an untagged CAPABILITY response to an AUTHENTICATE
         5646    command should only be done if a security layer was not negotiated.
         5647 
         5648    84) Change the definition of atom to exclude "]".  Update astring to
         5649    include "]" for compatibility with the past.  Remove resp-text-atom.
         5650 
         5651    85) Remove NEWNAME.  It can't work because mailbox names can be
         5652    literals and can include "]".  Functionality can be addressed via
         5653    referrals.
         5654 
         5655 
         5656 
         5657 
         5658 Crispin                     Standards Track                   [Page 101]
         5659 
         5660 RFC 3501                         IMAPv4                       March 2003
         5661 
         5662 
         5663    86) Move modified UTF-7 rationale in order to have more logical
         5664    paragraph flow.
         5665 
         5666    87) Clarify UID uniqueness guarantees with the use of MUST.
         5667 
         5668    88) Note that clients should read response data until the connection
         5669    is closed instead of immediately closing on a BYE.
         5670 
         5671    89) Change RFC-822 references to RFC-2822.
         5672 
         5673    90) Clarify that RFC-2822 should be followed instead of RFC-822.
         5674 
         5675    91) Change recommendation of optional automatic capabilities in LOGIN
         5676    and AUTHENTICATE to use the CAPABILITY response code in the tagged
         5677    OK.  This is more interoperable than an unsolicited untagged
         5678    CAPABILITY response.
         5679 
         5680    92) STARTTLS and AUTH=PLAIN are mandatory to implement; add
         5681    recommendations for other [SASL] mechanisms.
         5682 
         5683    93) Clarify that a "connection" (as opposed to "server" or "command")
         5684    is in one of the four states.
         5685 
         5686    94) Clarify that a failed or rejected command does not change state.
         5687 
         5688    95) Split references between normative and informative.
         5689 
         5690    96) Discuss authentication failure issues in security section.
         5691 
         5692    97) Clarify that a data item is not necessarily of only one data
         5693    type.
         5694 
         5695    98) Clarify that sequence ranges are independent of order.
         5696 
         5697    99) Change an example to clarify that superfluous shifts in
         5698    Modified-UTF7 can not be fixed just by omitting the shift.  The
         5699    entire string must be recalculated.
         5700 
         5701    100) Change Envelope Structure definition since [RFC-2822] uses
         5702    "envelope" to refer to the [SMTP] envelope and not the envelope data
         5703    that appears in the [RFC-2822] header.
         5704 
         5705    101) Expand on RFC822.HEADER response data vs. BODY[HEADER].
         5706 
         5707    102) Clarify Logout state semantics, change ASCII art.
         5708 
         5709    103) Security changes to comply with IESG requirements.
         5710 
         5711 
         5712 
         5713 
         5714 Crispin                     Standards Track                   [Page 102]
         5715 
         5716 RFC 3501                         IMAPv4                       March 2003
         5717 
         5718 
         5719    104) Add definition for body URI.
         5720 
         5721    105) Break sequence range definition into three rules, with rewritten
         5722    descriptions for each.
         5723 
         5724    106) Move STARTTLS and LOGINDISABLED here from [IMAP-TLS].
         5725 
         5726    107) Add IANA Considerations section.
         5727 
         5728    108) Clarify valid client assumptions for new message UIDs vs.
         5729    UIDNEXT.
         5730 
         5731    109) Clarify that changes to permanentflags affect concurrent
         5732    sessions as well as subsequent sessions.
         5733 
         5734    110) Clarify that authenticated state can be entered by the CLOSE
         5735    command.
         5736 
         5737    111) Emphasize that SELECT and EXAMINE are the exceptions to the rule
         5738    that a failing command does not change state.
         5739 
         5740    112) Clarify that newly-appended messages have the Recent flag set.
         5741 
         5742    113) Clarify that newly-copied messages SHOULD have the Recent flag
         5743    set.
         5744 
         5745    114) Clarify that UID commands always return the UID in FETCH
         5746    responses.
         5747 
         5748 C.      Key Word Index
         5749 
         5750        +FLAGS <flag list> (store command data item) ...............   59
         5751        +FLAGS.SILENT <flag list> (store command data item) ........   59
         5752        -FLAGS <flag list> (store command data item) ...............   59
         5753        -FLAGS.SILENT <flag list> (store command data item) ........   59
         5754        ALERT (response code) ......................................   64
         5755        ALL (fetch item) ...........................................   55
         5756        ALL (search key) ...........................................   50
         5757        ANSWERED (search key) ......................................   50
         5758        APPEND (command) ...........................................   45
         5759        AUTHENTICATE (command) .....................................   27
         5760        BAD (response) .............................................   66
         5761        BADCHARSET (response code) .................................   64
         5762        BCC <string> (search key) ..................................   51
         5763        BEFORE <date> (search key) .................................   51
         5764        BODY (fetch item) ..........................................   55
         5765        BODY (fetch result) ........................................   73
         5766        BODY <string> (search key) .................................   51
         5767 
         5768 
         5769 
         5770 Crispin                     Standards Track                   [Page 103]
         5771 
         5772 RFC 3501                         IMAPv4                       March 2003
         5773 
         5774 
         5775        BODY.PEEK[<section>]<<partial>> (fetch item) ...............   57
         5776        BODYSTRUCTURE (fetch item) .................................   57
         5777        BODYSTRUCTURE (fetch result) ...............................   74
         5778        BODY[<section>]<<origin octet>> (fetch result) .............   74
         5779        BODY[<section>]<<partial>> (fetch item) ....................   55
         5780        BYE (response) .............................................   67
         5781        Body Structure (message attribute) .........................   12
         5782        CAPABILITY (command) .......................................   24
         5783        CAPABILITY (response code) .................................   64
         5784        CAPABILITY (response) ......................................   68
         5785        CC <string> (search key) ...................................   51
         5786        CHECK (command) ............................................   47
         5787        CLOSE (command) ............................................   48
         5788        COPY (command) .............................................   59
         5789        CREATE (command) ...........................................   34
         5790        DELETE (command) ...........................................   35
         5791        DELETED (search key) .......................................   51
         5792        DRAFT (search key) .........................................   51
         5793        ENVELOPE (fetch item) ......................................   57
         5794        ENVELOPE (fetch result) ....................................   77
         5795        EXAMINE (command) ..........................................   33
         5796        EXISTS (response) ..........................................   71
         5797        EXPUNGE (command) ..........................................   48
         5798        EXPUNGE (response) .........................................   72
         5799        Envelope Structure (message attribute) .....................   12
         5800        FAST (fetch item) ..........................................   55
         5801        FETCH (command) ............................................   54
         5802        FETCH (response) ...........................................   73
         5803        FLAGGED (search key) .......................................   51
         5804        FLAGS (fetch item) .........................................   57
         5805        FLAGS (fetch result) .......................................   78
         5806        FLAGS (response) ...........................................   71
         5807        FLAGS <flag list> (store command data item) ................   59
         5808        FLAGS.SILENT <flag list> (store command data item) .........   59
         5809        FROM <string> (search key) .................................   51
         5810        FULL (fetch item) ..........................................   55
         5811        Flags (message attribute) ..................................   11
         5812        HEADER (part specifier) ....................................   55
         5813        HEADER <field-name> <string> (search key) ..................   51
         5814        HEADER.FIELDS <header-list> (part specifier) ...............   55
         5815        HEADER.FIELDS.NOT <header-list> (part specifier) ...........   55
         5816        INTERNALDATE (fetch item) ..................................   57
         5817        INTERNALDATE (fetch result) ................................   78
         5818        Internal Date (message attribute) ..........................   12
         5819        KEYWORD <flag> (search key) ................................   51
         5820        Keyword (type of flag) .....................................   11
         5821        LARGER <n> (search key) ....................................   51
         5822        LIST (command) .............................................   40
         5823 
         5824 
         5825 
         5826 Crispin                     Standards Track                   [Page 104]
         5827 
         5828 RFC 3501                         IMAPv4                       March 2003
         5829 
         5830 
         5831        LIST (response) ............................................   69
         5832        LOGIN (command) ............................................   30
         5833        LOGOUT (command) ...........................................   25
         5834        LSUB (command) .............................................   43
         5835        LSUB (response) ............................................   70
         5836        MAY (specification requirement term) .......................    4
         5837        MESSAGES (status item) .....................................   45
         5838        MIME (part specifier) ......................................   56
         5839        MUST (specification requirement term) ......................    4
         5840        MUST NOT (specification requirement term) ..................    4
         5841        Message Sequence Number (message attribute) ................   10
         5842        NEW (search key) ...........................................   51
         5843        NO (response) ..............................................   66
         5844        NOOP (command) .............................................   25
         5845        NOT <search-key> (search key) ..............................   52
         5846        OK (response) ..............................................   65
         5847        OLD (search key) ...........................................   52
         5848        ON <date> (search key) .....................................   52
         5849        OPTIONAL (specification requirement term) ..................    4
         5850        OR <search-key1> <search-key2> (search key) ................   52
         5851        PARSE (response code) ......................................   64
         5852        PERMANENTFLAGS (response code) .............................   64
         5853        PREAUTH (response) .........................................   67
         5854        Permanent Flag (class of flag) .............................   12
         5855        READ-ONLY (response code) ..................................   65
         5856        READ-WRITE (response code) .................................   65
         5857        RECENT (response) ..........................................   72
         5858        RECENT (search key) ........................................   52
         5859        RECENT (status item) .......................................   45
         5860        RENAME (command) ...........................................   37
         5861        REQUIRED (specification requirement term) ..................    4
         5862        RFC822 (fetch item) ........................................   57
         5863        RFC822 (fetch result) ......................................   78
         5864        RFC822.HEADER (fetch item) .................................   57
         5865        RFC822.HEADER (fetch result) ...............................   78
         5866        RFC822.SIZE (fetch item) ...................................   57
         5867        RFC822.SIZE (fetch result) .................................   78
         5868        RFC822.TEXT (fetch item) ...................................   58
         5869        RFC822.TEXT (fetch result) .................................   79
         5870        SEARCH (command) ...........................................   49
         5871        SEARCH (response) ..........................................   71
         5872        SEEN (search key) ..........................................   52
         5873        SELECT (command) ...........................................   31
         5874        SENTBEFORE <date> (search key) .............................   52
         5875        SENTON <date> (search key) .................................   52
         5876        SENTSINCE <date> (search key) ..............................   52
         5877        SHOULD (specification requirement term) ....................    4
         5878        SHOULD NOT (specification requirement term) ................    4
         5879 
         5880 
         5881 
         5882 Crispin                     Standards Track                   [Page 105]
         5883 
         5884 RFC 3501                         IMAPv4                       March 2003
         5885 
         5886 
         5887        SINCE <date> (search key) ..................................   52
         5888        SMALLER <n> (search key) ...................................   52
         5889        STARTTLS (command) .........................................   27
         5890        STATUS (command) ...........................................   44
         5891        STATUS (response) ..........................................   70
         5892        STORE (command) ............................................   58
         5893        SUBJECT <string> (search key) ..............................   53
         5894        SUBSCRIBE (command) ........................................   38
         5895        Session Flag (class of flag) ...............................   12
         5896        System Flag (type of flag) .................................   11
         5897        TEXT (part specifier) ......................................   56
         5898        TEXT <string> (search key) .................................   53
         5899        TO <string> (search key) ...................................   53
         5900        TRYCREATE (response code) ..................................   65
         5901        UID (command) ..............................................   60
         5902        UID (fetch item) ...........................................   58
         5903        UID (fetch result) .........................................   79
         5904        UID <sequence set> (search key) ............................   53
         5905        UIDNEXT (response code) ....................................   65
         5906        UIDNEXT (status item) ......................................   45
         5907        UIDVALIDITY (response code) ................................   65
         5908        UIDVALIDITY (status item) ..................................   45
         5909        UNANSWERED (search key) ....................................   53
         5910        UNDELETED (search key) .....................................   53
         5911        UNDRAFT (search key) .......................................   53
         5912        UNFLAGGED (search key) .....................................   53
         5913        UNKEYWORD <flag> (search key) ..............................   53
         5914        UNSEEN (response code) .....................................   65
         5915        UNSEEN (search key) ........................................   53
         5916        UNSEEN (status item) .......................................   45
         5917        UNSUBSCRIBE (command) ......................................   39
         5918        Unique Identifier (UID) (message attribute) ................    8
         5919        X<atom> (command) ..........................................   62
         5920        [RFC-2822] Size (message attribute) ........................   12
         5921        \Answered (system flag) ....................................   11
         5922        \Deleted (system flag) .....................................   11
         5923        \Draft (system flag) .......................................   11
         5924        \Flagged (system flag) .....................................   11
         5925        \Marked (mailbox name attribute) ...........................   69
         5926        \Noinferiors (mailbox name attribute) ......................   69
         5927        \Noselect (mailbox name attribute) .........................   69
         5928        \Recent (system flag) ......................................   11
         5929        \Seen (system flag) ........................................   11
         5930        \Unmarked (mailbox name attribute) .........................   69
         5931 
         5932 
         5933 
         5934 
         5935 
         5936 
         5937 
         5938 Crispin                     Standards Track                   [Page 106]
         5939 
         5940 RFC 3501                         IMAPv4                       March 2003
         5941 
         5942 
         5943 Author's Address
         5944 
         5945    Mark R. Crispin
         5946    Networks and Distributed Computing
         5947    University of Washington
         5948    4545 15th Avenue NE
         5949    Seattle, WA  98105-4527
         5950 
         5951    Phone: (206) 543-5762
         5952 
         5953    EMail: MRC@CAC.Washington.EDU
         5954 
         5955 
         5956 
         5957 
         5958 
         5959 
         5960 
         5961 
         5962 
         5963 
         5964 
         5965 
         5966 
         5967 
         5968 
         5969 
         5970 
         5971 
         5972 
         5973 
         5974 
         5975 
         5976 
         5977 
         5978 
         5979 
         5980 
         5981 
         5982 
         5983 
         5984 
         5985 
         5986 
         5987 
         5988 
         5989 
         5990 
         5991 
         5992 
         5993 
         5994 Crispin                     Standards Track                   [Page 107]
         5995 
         5996 RFC 3501                         IMAPv4                       March 2003
         5997 
         5998 
         5999 Full Copyright Statement
         6000 
         6001    Copyright (C) The Internet Society (2003).  All Rights Reserved.
         6002 
         6003    This document and translations of it may be copied and furnished to
         6004    others, and derivative works that comment on or otherwise explain it
         6005    or assist in its implementation may be prepared, copied, published
         6006    and distributed, in whole or in part, without restriction of any
         6007    kind, provided that the above copyright notice and this paragraph are
         6008    included on all such copies and derivative works.  However, this
         6009    document itself may not be modified in any way, such as by removing
         6010    the copyright notice or references to the Internet Society or other
         6011    Internet organizations, except as needed for the purpose of
         6012    developing Internet standards in which case the procedures for
         6013    copyrights defined in the Internet Standards process must be
         6014    followed, or as required to translate it into languages other than
         6015    English.
         6016 
         6017    The limited permissions granted above are perpetual and will not be
         6018    revoked by the Internet Society or its successors or assigns.  v This
         6019    document and the information contained herein is provided on an "AS
         6020    IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK
         6021    FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
         6022    LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL
         6023    NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY
         6024    OR FITNESS FOR A PARTICULAR PURPOSE.
         6025 
         6026 Acknowledgement
         6027 
         6028    Funding for the RFC Editor function is currently provided by the
         6029    Internet Society.
         6030 
         6031 
         6032 
         6033 
         6034 
         6035 
         6036 
         6037 
         6038 
         6039 
         6040 
         6041 
         6042 
         6043 
         6044 
         6045 
         6046 
         6047 
         6048 
         6049 
         6050 Crispin                     Standards Track                   [Page 108]
         6051