rohrpost

A commandline mail client to change the world as we see it.
git clone git://r-36.net/rohrpost
Log | Files | Refs | README | 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