rfc2060.txt
上传用户:ycwykj01
上传日期:2007-01-04
资源大小:1819k
文件大小:178k
源码类别:

网络编程

开发平台:

Unix_Linux

  1. Network Working Group                                        M. Crispin
  2. Request for Comments: 2060                     University of Washington
  3. Obsoletes: 1730                                           December 1996
  4. Category: Standards Track
  5.             INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
  6. Status of this Memo
  7.    This document specifies an Internet standards track protocol for the
  8.    Internet community, and requests discussion and suggestions for
  9.    improvements.  Please refer to the current edition of the "Internet
  10.    Official Protocol Standards" (STD 1) for the standardization state
  11.    and status of this protocol.  Distribution of this memo is unlimited.
  12. Abstract
  13.    The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1)
  14.    allows a client to access and manipulate electronic mail messages on
  15.    a server.  IMAP4rev1 permits manipulation of remote message folders,
  16.    called "mailboxes", in a way that is functionally equivalent to local
  17.    mailboxes.  IMAP4rev1 also provides the capability for an offline
  18.    client to resynchronize with the server (see also [IMAP-DISC]).
  19.    IMAP4rev1 includes operations for creating, deleting, and renaming
  20.    mailboxes; checking for new messages; permanently removing messages;
  21.    setting and clearing flags; [RFC-822] and [MIME-IMB] parsing;
  22.    searching; and selective fetching of message attributes, texts, and
  23.    portions thereof.  Messages in IMAP4rev1 are accessed by the use of
  24.    numbers.  These numbers are either message sequence numbers or unique
  25.    identifiers.
  26.    IMAP4rev1 supports a single server.  A mechanism for accessing
  27.    configuration information to support multiple IMAP4rev1 servers is
  28.    discussed in [ACAP].
  29.    IMAP4rev1 does not specify a means of posting mail; this function is
  30.    handled by a mail transfer protocol such as [SMTP].
  31.    IMAP4rev1 is designed to be upwards compatible from the [IMAP2] and
  32.    unpublished IMAP2bis protocols.  In the course of the evolution of
  33.    IMAP4rev1, some aspects in the earlier protocol have become obsolete.
  34.    Obsolete commands, responses, and data formats which an IMAP4rev1
  35.    implementation may encounter when used with an earlier implementation
  36.    are described in [IMAP-OBSOLETE].
  37. Crispin                     Standards Track                     [Page 1]
  38. RFC 2060                       IMAP4rev1                   December 1996
  39.    Other compatibility issues with IMAP2bis, the most common variant of
  40.    the earlier protocol, are discussed in [IMAP-COMPAT].  A full
  41.    discussion of compatibility issues with rare (and presumed extinct)
  42.    variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is
  43.    primarily of historical interest.
  44. Table of Contents
  45. IMAP4rev1 Protocol Specification ..................................    4
  46. 1.      How to Read This Document .................................    4
  47. 1.1.    Organization of This Document .............................    4
  48. 1.2.    Conventions Used in This Document .........................    4
  49. 2.      Protocol Overview .........................................    5
  50. 2.1.    Link Level ................................................    5
  51. 2.2.    Commands and Responses ....................................    6
  52. 2.2.1.  Client Protocol Sender and Server Protocol Receiver .......    6
  53. 2.2.2.  Server Protocol Sender and Client Protocol Receiver .......    7
  54. 2.3.    Message Attributes ........................................    7
  55. 2.3.1.  Message Numbers ...........................................    7
  56. 2.3.1.1.        Unique Identifier (UID) Message Attribute .........    7
  57. 2.3.1.2.        Message Sequence Number Message Attribute .........    9
  58. 2.3.2.  Flags Message Attribute ....................................   9
  59. 2.3.3.  Internal Date Message Attribute ...........................   10
  60. 2.3.4.  [RFC-822] Size Message Attribute ..........................   11
  61. 2.3.5.  Envelope Structure Message Attribute ......................   11
  62. 2.3.6.  Body Structure Message Attribute ..........................   11
  63. 2.4.    Message Texts .............................................   11
  64. 3.      State and Flow Diagram ....................................   11
  65. 3.1.    Non-Authenticated State ...................................   11
  66. 3.2.    Authenticated State .......................................   11
  67. 3.3.    Selected State ............................................   12
  68. 3.4.    Logout State ..............................................   12
  69. 4.      Data Formats ..............................................   12
  70. 4.1.    Atom ......................................................   13
  71. 4.2.    Number ....................................................   13
  72. 4.3.    String .....................................................  13
  73. 4.3.1.  8-bit and Binary Strings ..................................   13
  74. 4.4.    Parenthesized List ........................................   14
  75. 4.5.    NIL .......................................................   14
  76. 5.      Operational Considerations ................................   14
  77. 5.1.    Mailbox Naming ............................................   14
  78. 5.1.1.  Mailbox Hierarchy Naming ..................................   14
  79. 5.1.2.  Mailbox Namespace Naming Convention .......................   14
  80. 5.1.3.  Mailbox International Naming Convention ...................   15
  81. 5.2.    Mailbox Size and Message Status Updates ...................   16
  82. 5.3.    Response when no Command in Progress ......................   16
  83. 5.4.    Autologout Timer ..........................................   16
  84. 5.5.    Multiple Commands in Progress .............................   17
  85. Crispin                     Standards Track                     [Page 2]
  86. RFC 2060                       IMAP4rev1                   December 1996
  87. 6.      Client Commands ...........................................   17
  88. 6.1.    Client Commands - Any State ...............................   18
  89. 6.1.1.  CAPABILITY Command ........................................   18
  90. 6.1.2.  NOOP Command ..............................................   19
  91. 6.1.3.  LOGOUT Command ............................................   20
  92. 6.2.    Client Commands - Non-Authenticated State .................   20
  93. 6.2.1.  AUTHENTICATE Command ......................................   21
  94. 6.2.2.  LOGIN Command .............................................   22
  95. 6.3.    Client Commands - Authenticated State .....................   22
  96. 6.3.1.  SELECT Command ............................................   23
  97. 6.3.2.  EXAMINE Command ...........................................   24
  98. 6.3.3.  CREATE Command ............................................   25
  99. 6.3.4.  DELETE Command ............................................   26
  100. 6.3.5.  RENAME Command ............................................   27
  101. 6.3.6.  SUBSCRIBE Command .........................................   29
  102. 6.3.7.  UNSUBSCRIBE Command .......................................   30
  103. 6.3.8.  LIST Command ..............................................   30
  104. 6.3.9.  LSUB Command ..............................................   32
  105. 6.3.10. STATUS Command ............................................   33
  106. 6.3.11. APPEND Command ............................................   34
  107. 6.4.    Client Commands - Selected State ..........................   35
  108. 6.4.1.  CHECK Command .............................................   36
  109. 6.4.2.  CLOSE Command .............................................   36
  110. 6.4.3.  EXPUNGE Command ...........................................   37
  111. 6.4.4.  SEARCH Command ............................................   37
  112. 6.4.5.  FETCH Command .............................................   41
  113. 6.4.6.  STORE Command .............................................   45
  114. 6.4.7.  COPY Command ..............................................   46
  115. 6.4.8.  UID Command ...............................................   47
  116. 6.5.    Client Commands - Experimental/Expansion ..................   48
  117. 6.5.1.  X<atom> Command ...........................................   48
  118. 7.      Server Responses ..........................................   48
  119. 7.1.    Server Responses - Status Responses .......................   49
  120. 7.1.1.  OK Response ...............................................   51
  121. 7.1.2.  NO Response ...............................................   51
  122. 7.1.3.  BAD Response ..............................................   52
  123. 7.1.4.  PREAUTH Response ..........................................   52
  124. 7.1.5.  BYE Response ..............................................   52
  125. 7.2.    Server Responses - Server and Mailbox Status ..............   53
  126. 7.2.1.  CAPABILITY Response .......................................   53
  127. 7.2.2.  LIST Response ..............................................  54
  128. 7.2.3.  LSUB Response .............................................   55
  129. 7.2.4   STATUS Response ...........................................   55
  130. 7.2.5.  SEARCH Response ...........................................   55
  131. 7.2.6.  FLAGS Response ............................................   56
  132. 7.3.    Server Responses - Mailbox Size ...........................   56
  133. 7.3.1.  EXISTS Response ...........................................   56
  134. 7.3.2.  RECENT Response ...........................................   57
  135. Crispin                     Standards Track                     [Page 3]
  136. RFC 2060                       IMAP4rev1                   December 1996
  137. 7.4.    Server Responses - Message Status .........................   57
  138. 7.4.1.  EXPUNGE Response ..........................................   57
  139. 7.4.2.  FETCH Response ............................................   58
  140. 7.5.    Server Responses - Command Continuation Request ...........   63
  141. 8.      Sample IMAP4rev1 connection ...............................   63
  142. 9.      Formal Syntax .............................................   64
  143. 10.     Author's Note .............................................   74
  144. 11.     Security Considerations ...................................   74
  145. 12.     Author's Address ..........................................   75
  146. Appendices ........................................................   76
  147. A.      References ................................................   76
  148. B.      Changes from RFC 1730 .....................................   77
  149. C.      Key Word Index ............................................   79
  150. IMAP4rev1 Protocol Specification
  151. 1.      How to Read This Document
  152. 1.1.    Organization of This Document
  153.    This document is written from the point of view of the implementor of
  154.    an IMAP4rev1 client or server.  Beyond the protocol overview in
  155.    section 2, it is not optimized for someone trying to understand the
  156.    operation of the protocol.  The material in sections 3 through 5
  157.    provides the general context and definitions with which IMAP4rev1
  158.    operates.
  159.    Sections 6, 7, and 9 describe the IMAP commands, responses, and
  160.    syntax, respectively.  The relationships among these are such that it
  161.    is almost impossible to understand any of them separately.  In
  162.    particular, do not attempt to deduce command syntax from the command
  163.    section alone; instead refer to the Formal Syntax section.
  164. 1.2.    Conventions Used in This Document
  165.    In examples, "C:" and "S:" indicate lines sent by the client and
  166.    server respectively.
  167.    The following terms are used in this document to signify the
  168.    requirements of this specification.
  169.    1) MUST, or the adjective REQUIRED, means that the definition is
  170.       an absolute requirement of the specification.
  171.    2) MUST NOT that the definition is an absolute prohibition of the
  172.       specification.
  173. Crispin                     Standards Track                     [Page 4]
  174. RFC 2060                       IMAP4rev1                   December 1996
  175.    3) SHOULD means that there may exist valid reasons in particular
  176.       circumstances to ignore a particular item, but the full
  177.       implications MUST be understood and carefully weighed before
  178.       choosing a different course.
  179.    4) SHOULD NOT means that there may exist valid reasons in
  180.       particular circumstances when the particular behavior is
  181.       acceptable or even useful, but the full implications SHOULD be
  182.       understood and the case carefully weighed before implementing
  183.       any behavior described with this label.
  184.    5) MAY, or the adjective OPTIONAL, means that an item is truly
  185.       optional.  One vendor may choose to include the item because a
  186.       particular marketplace requires it or because the vendor feels
  187.       that it enhances the product while another vendor may omit the
  188.       same item.  An implementation which does not include a
  189.       particular option MUST be prepared to interoperate with another
  190.       implementation which does include the option.
  191.       "Can" is used instead of "may" when referring to a possible
  192.       circumstance or situation, as opposed to an optional facility of
  193.       the protocol.
  194.       "User" is used to refer to a human user, whereas "client" refers
  195.       to the software being run by the user.
  196.       "Connection" refers to the entire sequence of client/server
  197.       interaction from the initial establishment of the network
  198.       connection until its termination.  "Session" refers to the
  199.       sequence of client/server interaction from the time that a mailbox
  200.       is selected (SELECT or EXAMINE command) until the time that
  201.       selection ends (SELECT or EXAMINE of another mailbox, CLOSE
  202.       command, or connection termination).
  203.        Characters are 7-bit US-ASCII unless otherwise specified.  Other
  204.        character sets are indicated using a "CHARSET", as described in
  205.        [MIME-IMT] and defined in [CHARSET].  CHARSETs have important
  206.        additional semantics in addition to defining character set; refer
  207.        to these documents for more detail.
  208. 2.      Protocol Overview
  209. 2.1.    Link Level
  210.    The IMAP4rev1 protocol assumes a reliable data stream such as
  211.    provided by TCP.  When TCP is used, an IMAP4rev1 server listens on
  212.    port 143.
  213. Crispin                     Standards Track                     [Page 5]
  214. RFC 2060                       IMAP4rev1                   December 1996
  215. 2.2.    Commands and Responses
  216.    An IMAP4rev1 connection consists of the establishment of a
  217.    client/server network connection, an initial greeting from the
  218.    server, and client/server interactions.  These client/server
  219.    interactions consist of a client command, server data, and a server
  220.    completion result response.
  221.    All interactions transmitted by client and server are in the form of
  222.    lines; that is, strings that end with a CRLF.  The protocol receiver
  223.    of an IMAP4rev1 client or server is either reading a line, or is
  224.    reading a sequence of octets with a known count followed by a line.
  225. 2.2.1.  Client Protocol Sender and Server Protocol Receiver
  226.    The client command begins an operation.  Each client command is
  227.    prefixed with an identifier (typically a short alphanumeric string,
  228.    e.g. A0001, A0002, etc.) called a "tag".  A different tag is
  229.    generated by the client for each command.
  230.    There are two cases in which a line from the client does not
  231.    represent a complete command.  In one case, a command argument is
  232.    quoted with an octet count (see the description of literal in String
  233.    under Data Formats); in the other case, the command arguments require
  234.    server feedback (see the AUTHENTICATE command).  In either case, the
  235.    server sends a command continuation request response if it is ready
  236.    for the octets (if appropriate) and the remainder of the command.
  237.    This response is prefixed with the token "+".
  238.       Note: If, instead, the server detected an error in the command, it
  239.       sends a BAD completion response with tag matching the command (as
  240.       described below) to reject the command and prevent the client from
  241.       sending any more of the command.
  242.       It is also possible for the server to send a completion response
  243.       for some other command (if multiple commands are in progress), or
  244.       untagged data.  In either case, the command continuation request
  245.       is still pending; the client takes the appropriate action for the
  246.       response, and reads another response from the server.  In all
  247.       cases, the client MUST send a complete command (including
  248.       receiving all command continuation request responses and command
  249.       continuations for the command) before initiating a new command.
  250.    The protocol receiver of an IMAP4rev1 server reads a command line
  251.    from the client, parses the command and its arguments, and transmits
  252.    server data and a server command completion result response.
  253. Crispin                     Standards Track                     [Page 6]
  254. RFC 2060                       IMAP4rev1                   December 1996
  255. 2.2.2.  Server Protocol Sender and Client Protocol Receiver
  256.    Data transmitted by the server to the client and status responses
  257.    that do not indicate command completion are prefixed with the token
  258.    "*", and are called untagged responses.
  259.    Server data MAY be sent as a result of a client command, or MAY be
  260.    sent unilaterally by the server.  There is no syntactic difference
  261.    between server data that resulted from a specific command and server
  262.    data that were sent unilaterally.
  263.    The server completion result response indicates the success or
  264.    failure of the operation.  It is tagged with the same tag as the
  265.    client command which began the operation.  Thus, if more than one
  266.    command is in progress, the tag in a server completion response
  267.    identifies the command to which the response applies.  There are
  268.    three possible server completion responses: OK (indicating success),
  269.    NO (indicating failure), or BAD (indicating protocol error such as
  270.    unrecognized command or command syntax error).
  271.    The protocol receiver of an IMAP4rev1 client reads a response line
  272.    from the server.  It then takes action on the response based upon the
  273.    first token of the response, which can be a tag, a "*", or a "+".
  274.    A client MUST be prepared to accept any server response at all times.
  275.    This includes server data that was not requested.  Server data SHOULD
  276.    be recorded, so that the client can reference its recorded copy
  277.    rather than sending a command to the server to request the data.  In
  278.    the case of certain server data, the data MUST be recorded.
  279.    This topic is discussed in greater detail in the Server Responses
  280.    section.
  281. 2.3.    Message Attributes
  282.    In addition to message text, each message has several attributes
  283.    associated with it.  These attributes may be retrieved individually
  284.    or in conjunction with other attributes or message texts.
  285. 2.3.1.  Message Numbers
  286.    Messages in IMAP4rev1 are accessed by one of two numbers; the unique
  287.    identifier and the message sequence number.
  288. 2.3.1.1.        Unique Identifier (UID) Message Attribute
  289.    A 32-bit value assigned to each message, which when used with the
  290.    unique identifier validity value (see below) forms a 64-bit value
  291. Crispin                     Standards Track                     [Page 7]
  292. RFC 2060                       IMAP4rev1                   December 1996
  293.    that is permanently guaranteed not to refer to any other message in
  294.    the mailbox.  Unique identifiers are assigned in a strictly ascending
  295.    fashion in the mailbox; as each message is added to the mailbox it is
  296.    assigned a higher UID than the message(s) which were added
  297.    previously.
  298.    Unlike message sequence numbers, unique identifiers are not
  299.    necessarily contiguous.  Unique identifiers also persist across
  300.    sessions.  This permits a client to resynchronize its state from a
  301.    previous session with the server (e.g. disconnected or offline access
  302.    clients); this is discussed further in [IMAP-DISC].
  303.    Associated with every mailbox is a unique identifier validity value,
  304.    which is sent in an UIDVALIDITY response code in an OK untagged
  305.    response at mailbox selection time.  If unique identifiers from an
  306.    earlier session fail to persist to this session, the unique
  307.    identifier validity value MUST be greater than the one used in the
  308.    earlier session.
  309.       Note: Unique identifiers MUST be strictly ascending in the mailbox
  310.       at all times.  If the physical message store is re-ordered by a
  311.       non-IMAP agent, this requires that the unique identifiers in the
  312.       mailbox be regenerated, since the former unique identifers are no
  313.       longer strictly ascending as a result of the re-ordering.  Another
  314.       instance in which unique identifiers are regenerated is if the
  315.       message store has no mechanism to store unique identifiers.
  316.       Although this specification recognizes that this may be
  317.       unavoidable in certain server environments, it STRONGLY ENCOURAGES
  318.       message store implementation techniques that avoid this problem.
  319.       Another cause of non-persistance is if the mailbox is deleted and
  320.       a new mailbox with the same name is created at a later date, Since
  321.       the name is the same, a client may not know that this is a new
  322.       mailbox unless the unique identifier validity is different.  A
  323.       good value to use for the unique identifier validity value is a
  324.       32-bit representation of the creation date/time of the mailbox.
  325.       It is alright to use a constant such as 1, but only if it
  326.       guaranteed that unique identifiers will never be reused, even in
  327.       the case of a mailbox being deleted (or renamed) and a new mailbox
  328.       by the same name created at some future time.
  329.    The unique identifier of a message MUST NOT change during the
  330.    session, and SHOULD NOT change between sessions.  However, if it is
  331.    not possible to preserve the unique identifier of a message in a
  332.    subsequent session, each subsequent session MUST have a new unique
  333.    identifier validity value that is larger than any that was used
  334.    previously.
  335. Crispin                     Standards Track                     [Page 8]
  336. RFC 2060                       IMAP4rev1                   December 1996
  337. 2.3.1.2.        Message Sequence Number Message Attribute
  338.    A relative position from 1 to the number of messages in the mailbox.
  339.    This position MUST be ordered by ascending unique identifier.  As
  340.    each new message is added, it is assigned a message sequence number
  341.    that is 1 higher than the number of messages in the mailbox before
  342.    that new message was added.
  343.    Message sequence numbers can be reassigned during the session.  For
  344.    example, when a message is permanently removed (expunged) from the
  345.    mailbox, the message sequence number for all subsequent messages is
  346.    decremented.  Similarly, a new message can be assigned a message
  347.    sequence number that was once held by some other message prior to an
  348.    expunge.
  349.    In addition to accessing messages by relative position in the
  350.    mailbox, message sequence numbers can be used in mathematical
  351.    calculations.  For example, if an untagged "EXISTS 11" is received,
  352.    and previously an untagged "8 EXISTS" was received, three new
  353.    messages have arrived with message sequence numbers of 9, 10, and 11.
  354.    Another example; if message 287 in a 523 message mailbox has UID
  355.    12345, there are exactly 286 messages which have lesser UIDs and 236
  356.    messages which have greater UIDs.
  357. 2.3.2.  Flags Message Attribute
  358.    A list of zero or more named tokens associated with the message.  A
  359.    flag is set by its addition to this list, and is cleared by its
  360.    removal.  There are two types of flags in IMAP4rev1.  A flag of
  361.    either type may be permanent or session-only.
  362.    A system flag is a flag name that is pre-defined in this
  363.    specification.  All system flags begin with "".  Certain system
  364.    flags (Deleted and Seen) have special semantics described
  365.    elsewhere.  The currently-defined system flags are:
  366.         Seen       Message has been read
  367.         Answered   Message has been answered
  368.         Flagged    Message is "flagged" for urgent/special attention
  369.         Deleted    Message is "deleted" for removal by later EXPUNGE
  370.         Draft      Message has not completed composition (marked as a
  371.                     draft).
  372. Crispin                     Standards Track                     [Page 9]
  373. RFC 2060                       IMAP4rev1                   December 1996
  374.         Recent     Message is "recently" arrived in this mailbox.  This
  375.                     session is the first session to have been notified
  376.                     about this message; subsequent sessions will not see
  377.                     Recent set for this message.  This flag can not be
  378.                     altered by the client.
  379.                     If it is not possible to determine whether or not
  380.                     this session is the first session to be notified
  381.                     about a message, then that message SHOULD be
  382.                     considered recent.
  383.                     If multiple connections have the same mailbox
  384.                     selected simultaneously, it is undefined which of
  385.                     these connections will see newly-arrives messages
  386.                     with Recent set and which will see it without
  387.                     Recent set.
  388.       A keyword is defined by the server implementation.  Keywords do
  389.       not begin with "".  Servers MAY permit the client to define new
  390.       keywords in the mailbox (see the description of the
  391.       PERMANENTFLAGS response code for more information).
  392.       A flag may be permanent or session-only on a per-flag basis.
  393.       Permanent flags are those which the client can add or remove
  394.       from the message flags permanently; that is, subsequent sessions
  395.       will see any change in permanent flags.  Changes to session
  396.       flags are valid only in that session.
  397.       Note: The Recent system flag is a special case of a
  398.       session flag.  Recent can not be used as an argument in a
  399.       STORE command, and thus can not be changed at all.
  400. 2.3.3.  Internal Date Message Attribute
  401.    The internal date and time of the message on the server.  This is not
  402.    the date and time in the [RFC-822] header, but rather a date and time
  403.    which reflects when the message was received.  In the case of
  404.    messages delivered via [SMTP], this SHOULD be the date and time of
  405.    final delivery of the message as defined by [SMTP].  In the case of
  406.    messages delivered by the IMAP4rev1 COPY command, this SHOULD be the
  407.    internal date and time of the source message.  In the case of
  408.    messages delivered by the IMAP4rev1 APPEND command, this SHOULD be
  409.    the date and time as specified in the APPEND command description.
  410.    All other cases are implementation defined.
  411. Crispin                     Standards Track                    [Page 10]
  412. RFC 2060                       IMAP4rev1                   December 1996
  413. 2.3.4.  [RFC-822] Size Message Attribute
  414.    The number of octets in the message, as expressed in [RFC-822]
  415.    format.
  416. 2.3.5.  Envelope Structure Message Attribute
  417.    A parsed representation of the [RFC-822] envelope information (not to
  418.    be confused with an [SMTP] envelope) of the message.
  419. 2.3.6.  Body Structure Message Attribute
  420.    A parsed representation of the [MIME-IMB] body structure information
  421.    of the message.
  422. 2.4.    Message Texts
  423.    In addition to being able to fetch the full [RFC-822] text of a
  424.    message, IMAP4rev1 permits the fetching of portions of the full
  425.    message text.  Specifically, it is possible to fetch the [RFC-822]
  426.    message header, [RFC-822] message body, a [MIME-IMB] body part, or a
  427.    [MIME-IMB] header.
  428. 3.      State and Flow Diagram
  429.    An IMAP4rev1 server is in one of four states.  Most commands are
  430.    valid in only certain states.  It is a protocol error for the client
  431.    to attempt a command while the command is in an inappropriate state.
  432.    In this case, a server will respond with a BAD or NO (depending upon
  433.    server implementation) command completion result.
  434. 3.1.    Non-Authenticated State
  435.    In non-authenticated state, the client MUST supply authentication
  436.    credentials before most commands will be permitted.  This state is
  437.    entered when a connection starts unless the connection has been pre-
  438.    authenticated.
  439. 3.2.    Authenticated State
  440.    In authenticated state, the client is authenticated and MUST select a
  441.    mailbox to access before commands that affect messages will be
  442.    permitted.  This state is entered when a pre-authenticated connection
  443.    starts, when acceptable authentication credentials have been
  444.    provided, or after an error in selecting a mailbox.
  445. Crispin                     Standards Track                    [Page 11]
  446. RFC 2060                       IMAP4rev1                   December 1996
  447. 3.3.    Selected State
  448.    In selected state, a mailbox has been selected to access.  This state
  449.    is entered when a mailbox has been successfully selected.
  450. 3.4.    Logout State
  451.    In logout state, the connection is being terminated, and the server
  452.    will close the connection.  This state can be entered as a result of
  453.    a client request or by unilateral server decision.
  454.             +--------------------------------------+
  455.             |initial connection and server greeting|
  456.             +--------------------------------------+
  457.                       || (1)       || (2)        || (3)
  458.                       VV           ||            ||
  459.             +-----------------+    ||            ||
  460.             |non-authenticated|    ||            ||
  461.             +-----------------+    ||            ||
  462.              || (7)   || (4)       ||            ||
  463.              ||       VV           VV            ||
  464.              ||     +----------------+           ||
  465.              ||     | authenticated  |<=++       ||
  466.              ||     +----------------+  ||       ||
  467.              ||       || (7)   || (5)   || (6)   ||
  468.              ||       ||       VV       ||       ||
  469.              ||       ||    +--------+  ||       ||
  470.              ||       ||    |selected|==++       ||
  471.              ||       ||    +--------+           ||
  472.              ||       ||       || (7)            ||
  473.              VV       VV       VV                VV
  474.             +--------------------------------------+
  475.             |     logout and close connection      |
  476.             +--------------------------------------+
  477.          (1) connection without pre-authentication (OK greeting)
  478.          (2) pre-authenticated connection (PREAUTH greeting)
  479.          (3) rejected connection (BYE greeting)
  480.          (4) successful LOGIN or AUTHENTICATE command
  481.          (5) successful SELECT or EXAMINE command
  482.          (6) CLOSE command, or failed SELECT or EXAMINE command
  483.          (7) LOGOUT command, server shutdown, or connection closed
  484. 4.      Data Formats
  485.    IMAP4rev1 uses textual commands and responses.  Data in IMAP4rev1 can
  486.    be in one of several forms: atom, number, string, parenthesized list,
  487.    or NIL.
  488. Crispin                     Standards Track                    [Page 12]
  489. RFC 2060                       IMAP4rev1                   December 1996
  490. 4.1.    Atom
  491.    An atom consists of one or more non-special characters.
  492. 4.2.    Number
  493.    A number consists of one or more digit characters, and represents a
  494.    numeric value.
  495. 4.3.    String
  496.    A string is in one of two forms: literal and quoted string.  The
  497.    literal form is the general form of string.  The quoted string form
  498.    is an alternative that avoids the overhead of processing a literal at
  499.    the cost of limitations of characters that can be used in a quoted
  500.    string.
  501.    A literal is a sequence of zero or more octets (including CR and LF),
  502.    prefix-quoted with an octet count in the form of an open brace ("{"),
  503.    the number of octets, close brace ("}"), and CRLF.  In the case of
  504.    literals transmitted from server to client, the CRLF is immediately
  505.    followed by the octet data.  In the case of literals transmitted from
  506.    client to server, the client MUST wait to receive a command
  507.    continuation request (described later in this document) before
  508.    sending the octet data (and the remainder of the command).
  509.    A quoted string is a sequence of zero or more 7-bit characters,
  510.    excluding CR and LF, with double quote (<">) characters at each end.
  511.    The empty string is represented as either "" (a quoted string with
  512.    zero characters between double quotes) or as {0} followed by CRLF (a
  513.    literal with an octet count of 0).
  514.       Note: Even if the octet count is 0, a client transmitting a
  515.       literal MUST wait to receive a command continuation request.
  516. 4.3.1.  8-bit and Binary Strings
  517.    8-bit textual and binary mail is supported through the use of a
  518.    [MIME-IMB] content transfer encoding.  IMAP4rev1 implementations MAY
  519.    transmit 8-bit or multi-octet characters in literals, but SHOULD do
  520.    so only when the [CHARSET] is identified.
  521. Crispin                     Standards Track                    [Page 13]
  522. RFC 2060                       IMAP4rev1                   December 1996
  523.    Although a BINARY body encoding is defined, unencoded binary strings
  524.    are not permitted.  A "binary string" is any string with NUL
  525.    characters.  Implementations MUST encode binary data into a textual
  526.    form such as BASE64 before transmitting the data.  A string with an
  527.    excessive amount of CTL characters MAY also be considered to be
  528.    binary.
  529. 4.4.    Parenthesized List
  530.    Data structures are represented as a "parenthesized list"; a sequence
  531.    of data items, delimited by space, and bounded at each end by
  532.    parentheses.  A parenthesized list can contain other parenthesized
  533.    lists, using multiple levels of parentheses to indicate nesting.
  534.    The empty list is represented as () -- a parenthesized list with no
  535.    members.
  536. 4.5.    NIL
  537.    The special atom "NIL" represents the non-existence of a particular
  538.    data item that is represented as a string or parenthesized list, as
  539.    distinct from the empty string "" or the empty parenthesized list ().
  540. 5.      Operational Considerations
  541. 5.1.    Mailbox Naming
  542.    The interpretation of mailbox names is implementation-dependent.
  543.    However, the case-insensitive mailbox name INBOX is a special name
  544.    reserved to mean "the primary mailbox for this user on this server".
  545. 5.1.1.  Mailbox Hierarchy Naming
  546.    If it is desired to export hierarchical mailbox names, mailbox names
  547.    MUST be left-to-right hierarchical using a single character to
  548.    separate levels of hierarchy.  The same hierarchy separator character
  549.    is used for all levels of hierarchy within a single name.
  550. 5.1.2.  Mailbox Namespace Naming Convention
  551.    By convention, the first hierarchical element of any mailbox name
  552.    which begins with "#" identifies the "namespace" of the remainder of
  553.    the name.  This makes it possible to disambiguate between different
  554.    types of mailbox stores, each of which have their own namespaces.
  555. Crispin                     Standards Track                    [Page 14]
  556. RFC 2060                       IMAP4rev1                   December 1996
  557.       For example, implementations which offer access to USENET
  558.       newsgroups MAY use the "#news" namespace to partition the USENET
  559.       newsgroup namespace from that of other mailboxes.  Thus, the
  560.       comp.mail.misc newsgroup would have an mailbox name of
  561.       "#news.comp.mail.misc", and the name "comp.mail.misc" could refer
  562.       to a different object (e.g. a user's private mailbox).
  563. 5.1.3.  Mailbox International Naming Convention
  564.    By convention, international mailbox names are specified using a
  565.    modified version of the UTF-7 encoding described in [UTF-7].  The
  566.    purpose of these modifications is to correct the following problems
  567.    with UTF-7:
  568.       1) UTF-7 uses the "+" character for shifting; this conflicts with
  569.          the common use of "+" in mailbox names, in particular USENET
  570.          newsgroup names.
  571.       2) UTF-7's encoding is BASE64 which uses the "/" character; this
  572.          conflicts with the use of "/" as a popular hierarchy delimiter.
  573.       3) UTF-7 prohibits the unencoded usage of ""; this conflicts with
  574.          the use of "" as a popular hierarchy delimiter.
  575.       4) UTF-7 prohibits the unencoded usage of "~"; this conflicts with
  576.          the use of "~" in some servers as a home directory indicator.
  577.       5) UTF-7 permits multiple alternate forms to represent the same
  578.          string; in particular, printable US-ASCII chararacters can be
  579.          represented in encoded form.
  580.    In modified UTF-7, printable US-ASCII characters except for "&"
  581.    represent themselves; that is, characters with octet values 0x20-0x25
  582.    and 0x27-0x7e.  The character "&" (0x26) is represented by the two-
  583.    octet sequence "&-".
  584.    All other characters (octet values 0x00-0x1f, 0x7f-0xff, and all
  585.    Unicode 16-bit octets) are represented in modified BASE64, with a
  586.    further modification from [UTF-7] that "," is used instead of "/".
  587.    Modified BASE64 MUST NOT be used to represent any printing US-ASCII
  588.    character which can represent itself.
  589.    "&" is used to shift to modified BASE64 and "-" to shift back to US-
  590.    ASCII.  All names start in US-ASCII, and MUST end in US-ASCII (that
  591.    is, a name that ends with a Unicode 16-bit octet MUST end with a "-
  592.    ").
  593. Crispin                     Standards Track                    [Page 15]
  594. RFC 2060                       IMAP4rev1                   December 1996
  595.       For example, here is a mailbox name which mixes English, Japanese,
  596.       and Chinese text: ~peter/mail/&ZeVnLIqe-/&U,BTFw-
  597. 5.2.    Mailbox Size and Message Status Updates
  598.    At any time, a server can send data that the client did not request.
  599.    Sometimes, such behavior is REQUIRED.  For example, agents other than
  600.    the server MAY add messages to the mailbox (e.g. new mail delivery),
  601.    change the flags of message in the mailbox (e.g. simultaneous access
  602.    to the same mailbox by multiple agents), or even remove messages from
  603.    the mailbox.  A server MUST send mailbox size updates automatically
  604.    if a mailbox size change is observed during the processing of a
  605.    command.  A server SHOULD send message flag updates automatically,
  606.    without requiring the client to request such updates explicitly.
  607.    Special rules exist for server notification of a client about the
  608.    removal of messages to prevent synchronization errors; see the
  609.    description of the EXPUNGE response for more detail.
  610.    Regardless of what implementation decisions a client makes on
  611.    remembering data from the server, a client implementation MUST record
  612.    mailbox size updates.  It MUST NOT assume that any command after
  613.    initial mailbox selection will return the size of the mailbox.
  614. 5.3.    Response when no Command in Progress
  615.    Server implementations are permitted to send an untagged response
  616.    (except for EXPUNGE) while there is no command in progress.  Server
  617.    implementations that send such responses MUST deal with flow control
  618.    considerations.  Specifically, they MUST either (1) verify that the
  619.    size of the data does not exceed the underlying transport's available
  620.    window size, or (2) use non-blocking writes.
  621. 5.4.    Autologout Timer
  622.    If a server has an inactivity autologout timer, that timer MUST be of
  623.    at least 30 minutes' duration.  The receipt of ANY command from the
  624.    client during that interval SHOULD suffice to reset the autologout
  625.    timer.
  626. Crispin                     Standards Track                    [Page 16]
  627. RFC 2060                       IMAP4rev1                   December 1996
  628. 5.5.    Multiple Commands in Progress
  629.    The client MAY send another command without waiting for the
  630.    completion result response of a command, subject to ambiguity rules
  631.    (see below) and flow control constraints on the underlying data
  632.    stream.  Similarly, a server MAY begin processing another command
  633.    before processing the current command to completion, subject to
  634.    ambiguity rules.  However, any command continuation request responses
  635.    and command continuations MUST be negotiated before any subsequent
  636.    command is initiated.
  637.    The exception is if an ambiguity would result because of a command
  638.    that would affect the results of other commands.  Clients MUST NOT
  639.    send multiple commands without waiting if an ambiguity would result.
  640.    If the server detects a possible ambiguity, it MUST execute commands
  641.    to completion in the order given by the client.
  642.    The most obvious example of ambiguity is when a command would affect
  643.    the results of another command; for example, a FETCH of a message's
  644.    flags and a STORE of that same message's flags.
  645.    A non-obvious ambiguity occurs with commands that permit an untagged
  646.    EXPUNGE response (commands other than FETCH, STORE, and SEARCH),
  647.    since an untagged EXPUNGE response can invalidate sequence numbers in
  648.    a subsequent command.  This is not a problem for FETCH, STORE, or
  649.    SEARCH commands because servers are prohibited from sending EXPUNGE
  650.    responses while any of those commands are in progress.  Therefore, if
  651.    the client sends any command other than FETCH, STORE, or SEARCH, it
  652.    MUST wait for a response before sending a command with message
  653.    sequence numbers.
  654.    For example, the following non-waiting command sequences are invalid:
  655.       FETCH + NOOP + STORE
  656.       STORE + COPY + FETCH
  657.       COPY + COPY
  658.       CHECK + FETCH
  659.    The following are examples of valid non-waiting command sequences:
  660.       FETCH + STORE + SEARCH + CHECK
  661.       STORE + COPY + EXPUNGE
  662. 6.      Client Commands
  663.    IMAP4rev1 commands are described in this section.  Commands are
  664.    organized by the state in which the command is permitted.  Commands
  665.    which are permitted in multiple states are listed in the minimum
  666. Crispin                     Standards Track                    [Page 17]
  667. RFC 2060                       IMAP4rev1                   December 1996
  668.    permitted state (for example, commands valid in authenticated and
  669.    selected state are listed in the authenticated state commands).
  670.    Command arguments, identified by "Arguments:" in the command
  671.    descriptions below, are described by function, not by syntax.  The
  672.    precise syntax of command arguments is described in the Formal Syntax
  673.    section.
  674.    Some commands cause specific server responses to be returned; these
  675.    are identified by "Responses:" in the command descriptions below.
  676.    See the response descriptions in the Responses section for
  677.    information on these responses, and the Formal Syntax section for the
  678.    precise syntax of these responses.  It is possible for server data to
  679.    be transmitted as a result of any command; thus, commands that do not
  680.    specifically require server data specify "no specific responses for
  681.    this command" instead of "none".
  682.    The "Result:" in the command description refers to the possible
  683.    tagged status responses to a command, and any special interpretation
  684.    of these status responses.
  685. 6.1.    Client Commands - Any State
  686.    The following commands are valid in any state: CAPABILITY, NOOP, and
  687.    LOGOUT.
  688. 6.1.1.  CAPABILITY Command
  689.    Arguments:  none
  690.    Responses:  REQUIRED untagged response: CAPABILITY
  691.    Result:     OK - capability completed
  692.                BAD - command unknown or arguments invalid
  693.       The CAPABILITY command requests a listing of capabilities that the
  694.       server supports.  The server MUST send a single untagged
  695.       CAPABILITY response with "IMAP4rev1" as one of the listed
  696.       capabilities before the (tagged) OK response.  This listing of
  697.       capabilities is not dependent upon connection state or user.  It
  698.       is therefore not necessary to issue a CAPABILITY command more than
  699.       once in a connection.
  700. Crispin                     Standards Track                    [Page 18]
  701. RFC 2060                       IMAP4rev1                   December 1996
  702.       A capability name which begins with "AUTH=" indicates that the
  703.       server supports that particular authentication mechanism.  All
  704.       such names are, by definition, part of this specification.  For
  705.       example, the authorization capability for an experimental
  706.       "blurdybloop" authenticator would be "AUTH=XBLURDYBLOOP" and not
  707.       "XAUTH=BLURDYBLOOP" or "XAUTH=XBLURDYBLOOP".
  708.       Other capability names refer to extensions, revisions, or
  709.       amendments to this specification.  See the documentation of the
  710.       CAPABILITY response for additional information.  No capabilities,
  711.       beyond the base IMAP4rev1 set defined in this specification, are
  712.       enabled without explicit client action to invoke the capability.
  713.       See the section entitled "Client Commands -
  714.       Experimental/Expansion" for information about the form of site or
  715.       implementation-specific capabilities.
  716.    Example:    C: abcd CAPABILITY
  717.                S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4
  718.                S: abcd OK CAPABILITY completed
  719. 6.1.2.  NOOP Command
  720.    Arguments:  none
  721.    Responses:  no specific responses for this command (but see below)
  722.    Result:     OK - noop completed
  723.                BAD - command unknown or arguments invalid
  724.       The NOOP command always succeeds.  It does nothing.
  725.       Since any command can return a status update as untagged data, the
  726.       NOOP command can be used as a periodic poll for new messages or
  727.       message status updates during a period of inactivity.  The NOOP
  728.       command can also be used to reset any inactivity autologout timer
  729.       on the server.
  730.    Example:    C: a002 NOOP
  731.                S: a002 OK NOOP completed
  732.                   . . .
  733.                C: a047 NOOP
  734.                S: * 22 EXPUNGE
  735.                S: * 23 EXISTS
  736.                S: * 3 RECENT
  737.                S: * 14 FETCH (FLAGS (Seen Deleted))
  738.                S: a047 OK NOOP completed
  739. Crispin                     Standards Track                    [Page 19]
  740. RFC 2060                       IMAP4rev1                   December 1996
  741. 6.1.3.  LOGOUT Command
  742.    Arguments:  none
  743.    Responses:  REQUIRED untagged response: BYE
  744.    Result:     OK - logout completed
  745.                BAD - command unknown or arguments invalid
  746.       The LOGOUT command informs the server that the client is done with
  747.       the connection.  The server MUST send a BYE untagged response
  748.       before the (tagged) OK response, and then close the network
  749.       connection.
  750.    Example:    C: A023 LOGOUT
  751.                S: * BYE IMAP4rev1 Server logging out
  752.                S: A023 OK LOGOUT completed
  753.                (Server and client then close the connection)
  754. 6.2.    Client Commands - Non-Authenticated State
  755.    In non-authenticated state, the AUTHENTICATE or LOGIN command
  756.    establishes authentication and enter authenticated state.  The
  757.    AUTHENTICATE command provides a general mechanism for a variety of
  758.    authentication techniques, whereas the LOGIN command uses the
  759.    traditional user name and plaintext password pair.
  760.    Server implementations MAY allow non-authenticated access to certain
  761.    mailboxes.  The convention is to use a LOGIN command with the userid
  762.    "anonymous".  A password is REQUIRED.  It is implementation-dependent
  763.    what requirements, if any, are placed on the password and what access
  764.    restrictions are placed on anonymous users.
  765.    Once authenticated (including as anonymous), it is not possible to
  766.    re-enter non-authenticated state.
  767.    In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),
  768.    the following commands are valid in non-authenticated state:
  769.    AUTHENTICATE and LOGIN.
  770. Crispin                     Standards Track                    [Page 20]
  771. RFC 2060                       IMAP4rev1                   December 1996
  772. 6.2.1.  AUTHENTICATE Command
  773.    Arguments:  authentication mechanism name
  774.    Responses:  continuation data can be requested
  775.    Result:     OK - authenticate completed, now in authenticated state
  776.                NO - authenticate failure: unsupported authentication
  777.                     mechanism, credentials rejected
  778.               BAD - command unknown or arguments invalid,
  779.                     authentication exchange cancelled
  780.       The AUTHENTICATE command indicates an authentication mechanism,
  781.       such as described in [IMAP-AUTH], to the server.  If the server
  782.       supports the requested authentication mechanism, it performs an
  783.       authentication protocol exchange to authenticate and identify the
  784.       client.  It MAY also negotiate an OPTIONAL protection mechanism
  785.       for subsequent protocol interactions.  If the requested
  786.       authentication mechanism is not supported, the server SHOULD
  787.       reject the AUTHENTICATE command by sending a tagged NO response.
  788.       The authentication protocol exchange consists of a series of
  789.       server challenges and client answers that are specific to the
  790.       authentication mechanism.  A server challenge consists of a
  791.       command continuation request response with the "+" token followed
  792.       by a BASE64 encoded string.  The client answer consists of a line
  793.       consisting of a BASE64 encoded string.  If the client wishes to
  794.       cancel an authentication exchange, it issues a line with a single
  795.       "*".  If the server receives such an answer, it MUST reject the
  796.       AUTHENTICATE command by sending a tagged BAD response.
  797.       A protection mechanism provides integrity and privacy protection
  798.       to the connection.  If a protection mechanism is negotiated, it is
  799.       applied to all subsequent data sent over the connection.  The
  800.       protection mechanism takes effect immediately following the CRLF
  801.       that concludes the authentication exchange for the client, and the
  802.       CRLF of the tagged OK response for the server.  Once the
  803.       protection mechanism is in effect, the stream of command and
  804.       response octets is processed into buffers of ciphertext.  Each
  805.       buffer is transferred over the connection as a stream of octets
  806.       prepended with a four octet field in network byte order that
  807.       represents the length of the following data.  The maximum
  808.       ciphertext buffer length is defined by the protection mechanism.
  809.       Authentication mechanisms are OPTIONAL.  Protection mechanisms are
  810.       also OPTIONAL; an authentication mechanism MAY be implemented
  811.       without any protection mechanism.  If an AUTHENTICATE command
  812.       fails with a NO response, the client MAY try another
  813. Crispin                     Standards Track                    [Page 21]
  814. RFC 2060                       IMAP4rev1                   December 1996
  815.       authentication mechanism by issuing another AUTHENTICATE command,
  816.       or MAY attempt to authenticate by using the LOGIN command.  In
  817.       other words, the client MAY request authentication types in
  818.       decreasing order of preference, with the LOGIN command as a last
  819.       resort.
  820.    Example:    S: * OK KerberosV4 IMAP4rev1 Server
  821.                C: A001 AUTHENTICATE KERBEROS_V4
  822.                S: + AmFYig==
  823.                C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT
  824.                   +nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFd
  825.                   WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh
  826.                S: + or//EoAADZI=
  827.                C: DiAF5A4gA+oOIALuBkAAmw==
  828.                S: A001 OK Kerberos V4 authentication successful
  829.       Note: the line breaks in the first client answer are for editorial
  830.       clarity and are not in real authenticators.
  831. 6.2.2.  LOGIN Command
  832.    Arguments:  user name
  833.                password
  834.    Responses:  no specific responses for this command
  835.    Result:     OK - login completed, now in authenticated state
  836.                NO - login failure: user name or password rejected
  837.                BAD - command unknown or arguments invalid
  838.       The LOGIN command identifies the client to the server and carries
  839.       the plaintext password authenticating this user.
  840.    Example:    C: a001 LOGIN SMITH SESAME
  841.                S: a001 OK LOGIN completed
  842. 6.3.    Client Commands - Authenticated State
  843.    In authenticated state, commands that manipulate mailboxes as atomic
  844.    entities are permitted.  Of these commands, the SELECT and EXAMINE
  845.    commands will select a mailbox for access and enter selected state.
  846.    In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),
  847.    the following commands are valid in authenticated state: SELECT,
  848.    EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB,
  849.    STATUS, and APPEND.
  850. Crispin                     Standards Track                    [Page 22]
  851. RFC 2060                       IMAP4rev1                   December 1996
  852. 6.3.1.  SELECT Command
  853.    Arguments:  mailbox name
  854.    Responses:  REQUIRED untagged responses: FLAGS, EXISTS, RECENT
  855.                OPTIONAL OK untagged responses: UNSEEN, PERMANENTFLAGS
  856.    Result:     OK - select completed, now in selected state
  857.                NO - select failure, now in authenticated state: no
  858.                     such mailbox, can't access mailbox
  859.                BAD - command unknown or arguments invalid
  860.    The SELECT command selects a mailbox so that messages in the
  861.    mailbox can be accessed.  Before returning an OK to the client,
  862.    the server MUST send the following untagged data to the client:
  863.       FLAGS       Defined flags in the mailbox.  See the description
  864.                   of the FLAGS response for more detail.
  865.       <n> EXISTS  The number of messages in the mailbox.  See the
  866.                   description of the EXISTS response for more detail.
  867.       <n> RECENT  The number of messages with the Recent flag set.
  868.                   See the description of the RECENT response for more
  869.                   detail.
  870.       OK [UIDVALIDITY <n>]
  871.                   The unique identifier validity value.  See the
  872.                   description of the UID command for more detail.
  873.    to define the initial state of the mailbox at the client.
  874.    The server SHOULD also send an UNSEEN response code in an OK
  875.    untagged response, indicating the message sequence number of the
  876.    first unseen message in the mailbox.
  877.    If the client can not change the permanent state of one or more of
  878.    the flags listed in the FLAGS untagged response, the server SHOULD
  879.    send a PERMANENTFLAGS response code in an OK untagged response,
  880.    listing the flags that the client can change permanently.
  881.    Only one mailbox can be selected at a time in a connection;
  882.    simultaneous access to multiple mailboxes requires multiple
  883.    connections.  The SELECT command automatically deselects any
  884.    currently selected mailbox before attempting the new selection.
  885.    Consequently, if a mailbox is selected and a SELECT command that
  886.    fails is attempted, no mailbox is selected.
  887. Crispin                     Standards Track                    [Page 23]
  888. RFC 2060                       IMAP4rev1                   December 1996
  889.    If the client is permitted to modify the mailbox, the server
  890.    SHOULD prefix the text of the tagged OK response with the
  891.          "[READ-WRITE]" response code.
  892.       If the client is not permitted to modify the mailbox but is
  893.       permitted read access, the mailbox is selected as read-only, and
  894.       the server MUST prefix the text of the tagged OK response to
  895.       SELECT with the "[READ-ONLY]" response code.  Read-only access
  896.       through SELECT differs from the EXAMINE command in that certain
  897.       read-only mailboxes MAY permit the change of permanent state on a
  898.       per-user (as opposed to global) basis.  Netnews messages marked in
  899.       a server-based .newsrc file are an example of such per-user
  900.       permanent state that can be modified with read-only mailboxes.
  901.    Example:    C: A142 SELECT INBOX
  902.                S: * 172 EXISTS
  903.                S: * 1 RECENT
  904.                S: * OK [UNSEEN 12] Message 12 is first unseen
  905.                S: * OK [UIDVALIDITY 3857529045] UIDs valid
  906.                S: * FLAGS (Answered Flagged Deleted Seen Draft)
  907.                S: * OK [PERMANENTFLAGS (Deleted Seen *)] Limited
  908.                S: A142 OK [READ-WRITE] SELECT completed
  909. 6.3.2.  EXAMINE Command
  910.    Arguments:  mailbox name
  911.    Responses:  REQUIRED untagged responses: FLAGS, EXISTS, RECENT
  912.                OPTIONAL OK untagged responses: UNSEEN, PERMANENTFLAGS
  913.    Result:     OK - examine completed, now in selected state
  914.                NO - examine failure, now in authenticated state: no
  915.                     such mailbox, can't access mailbox
  916.                BAD - command unknown or arguments invalid
  917.       The EXAMINE command is identical to SELECT and returns the same
  918.       output; however, the selected mailbox is identified as read-only.
  919.       No changes to the permanent state of the mailbox, including
  920.       per-user state, are permitted.
  921. Crispin                     Standards Track                    [Page 24]
  922. RFC 2060                       IMAP4rev1                   December 1996
  923.       The text of the tagged OK response to the EXAMINE command MUST
  924.       begin with the "[READ-ONLY]" response code.
  925.    Example:    C: A932 EXAMINE blurdybloop
  926.                S: * 17 EXISTS
  927.                S: * 2 RECENT
  928.                S: * OK [UNSEEN 8] Message 8 is first unseen
  929.                S: * OK [UIDVALIDITY 3857529045] UIDs valid
  930.                S: * FLAGS (Answered Flagged Deleted Seen Draft)
  931.                S: * OK [PERMANENTFLAGS ()] No permanent flags permitted
  932.                S: A932 OK [READ-ONLY] EXAMINE completed
  933. 6.3.3.  CREATE Command
  934.    Arguments:  mailbox name
  935.    Responses:  no specific responses for this command
  936.    Result:     OK - create completed
  937.                NO - create failure: can't create mailbox with that name
  938.                BAD - command unknown or arguments invalid
  939.       The CREATE command creates a mailbox with the given name.  An OK
  940.       response is returned only if a new mailbox with that name has been
  941.       created.  It is an error to attempt to create INBOX or a mailbox
  942.       with a name that refers to an extant mailbox.  Any error in
  943.       creation will return a tagged NO response.
  944.       If the mailbox name is suffixed with the server's hierarchy
  945.       separator character (as returned from the server by a LIST
  946.       command), this is a declaration that the client intends to create
  947.       mailbox names under this name in the hierarchy.  Server
  948.       implementations that do not require this declaration MUST ignore
  949.       it.
  950.       If the server's hierarchy separator character appears elsewhere in
  951.       the name, the server SHOULD create any superior hierarchical names
  952.       that are needed for the CREATE command to complete successfully.
  953.       In other words, an attempt to create "foo/bar/zap" on a server in
  954.       which "/" is the hierarchy separator character SHOULD create foo/
  955.       and foo/bar/ if they do not already exist.
  956.       If a new mailbox is created with the same name as a mailbox which
  957.       was deleted, its unique identifiers MUST be greater than any
  958.       unique identifiers used in the previous incarnation of the mailbox
  959.       UNLESS the new incarnation has a different unique identifier
  960.       validity value.  See the description of the UID command for more
  961.       detail.
  962. Crispin                     Standards Track                    [Page 25]
  963. RFC 2060                       IMAP4rev1                   December 1996
  964.    Example:    C: A003 CREATE owatagusiam/
  965.                S: A003 OK CREATE completed
  966.                C: A004 CREATE owatagusiam/blurdybloop
  967.                S: A004 OK CREATE completed
  968.       Note: the interpretation of this example depends on whether "/"
  969.       was returned as the hierarchy separator from LIST.  If "/" is the
  970.       hierarchy separator, a new level of hierarchy named "owatagusiam"
  971.       with a member called "blurdybloop" is created.  Otherwise, two
  972.       mailboxes at the same hierarchy level are created.
  973. 6.3.4.  DELETE Command
  974.    Arguments:  mailbox name
  975.    Responses:  no specific responses for this command
  976.    Result:     OK - delete completed
  977.                NO - delete failure: can't delete mailbox with that name
  978.                BAD - command unknown or arguments invalid
  979.       The DELETE command permanently removes the mailbox with the given
  980.       name.  A tagged OK response is returned only if the mailbox has
  981.       been deleted.  It is an error to attempt to delete INBOX or a
  982.       mailbox name that does not exist.
  983.       The DELETE command MUST NOT remove inferior hierarchical names.
  984.       For example, if a mailbox "foo" has an inferior "foo.bar"
  985.       (assuming "." is the hierarchy delimiter character), removing
  986.       "foo" MUST NOT remove "foo.bar".  It is an error to attempt to
  987.       delete a name that has inferior hierarchical names and also has
  988.       the Noselect mailbox name attribute (see the description of the
  989.       LIST response for more details).
  990.       It is permitted to delete a name that has inferior hierarchical
  991.       names and does not have the Noselect mailbox name attribute.  In
  992.       this case, all messages in that mailbox are removed, and the name
  993.       will acquire the Noselect mailbox name attribute.
  994.       The value of the highest-used unique identifier of the deleted
  995.       mailbox MUST be preserved so that a new mailbox created with the
  996.       same name will not reuse the identifiers of the former
  997.       incarnation, UNLESS the new incarnation has a different unique
  998.       identifier validity value.  See the description of the UID command
  999.       for more detail.
  1000. Crispin                     Standards Track                    [Page 26]
  1001. RFC 2060                       IMAP4rev1                   December 1996
  1002.    Examples:   C: A682 LIST "" *
  1003.                S: * LIST () "/" blurdybloop
  1004.                S: * LIST (Noselect) "/" foo
  1005.                S: * LIST () "/" foo/bar
  1006.                S: A682 OK LIST completed
  1007.                C: A683 DELETE blurdybloop
  1008.                S: A683 OK DELETE completed
  1009.                C: A684 DELETE foo
  1010.                S: A684 NO Name "foo" has inferior hierarchical names
  1011.                C: A685 DELETE foo/bar
  1012.                S: A685 OK DELETE Completed
  1013.                C: A686 LIST "" *
  1014.                S: * LIST (Noselect) "/" foo
  1015.                S: A686 OK LIST completed
  1016.                C: A687 DELETE foo
  1017.                S: A687 OK DELETE Completed
  1018.                C: A82 LIST "" *
  1019.                S: * LIST () "." blurdybloop
  1020.                S: * LIST () "." foo
  1021.                S: * LIST () "." foo.bar
  1022.                S: A82 OK LIST completed
  1023.                C: A83 DELETE blurdybloop
  1024.                S: A83 OK DELETE completed
  1025.                C: A84 DELETE foo
  1026.                S: A84 OK DELETE Completed
  1027.                C: A85 LIST "" *
  1028.                S: * LIST () "." foo.bar
  1029.                S: A85 OK LIST completed
  1030.                C: A86 LIST "" %
  1031.                S: * LIST (Noselect) "." foo
  1032.                S: A86 OK LIST completed
  1033. 6.3.5.  RENAME Command
  1034.    Arguments:  existing mailbox name
  1035.                new mailbox name
  1036.    Responses:  no specific responses for this command
  1037.    Result:     OK - rename completed
  1038.                NO - rename failure: can't rename mailbox with that name,
  1039.                     can't rename to mailbox with that name
  1040.                BAD - command unknown or arguments invalid
  1041.       The RENAME command changes the name of a mailbox.  A tagged OK
  1042.       response is returned only if the mailbox has been renamed.  It is
  1043. Crispin                     Standards Track                    [Page 27]
  1044. RFC 2060                       IMAP4rev1                   December 1996
  1045.       an error to attempt to rename from a mailbox name that does not
  1046.       exist or to a mailbox name that already exists.  Any error in
  1047.       renaming will return a tagged NO response.
  1048.       If the name has inferior hierarchical names, then the inferior
  1049.       hierarchical names MUST also be renamed.  For example, a rename of
  1050.       "foo" to "zap" will rename "foo/bar" (assuming "/" is the
  1051.       hierarchy delimiter character) to "zap/bar".
  1052.       The value of the highest-used unique identifier of the old mailbox
  1053.       name MUST be preserved so that a new mailbox created with the same
  1054.       name will not reuse the identifiers of the former incarnation,
  1055.       UNLESS the new incarnation has a different unique identifier
  1056.       validity value.  See the description of the UID command for more
  1057.       detail.
  1058.       Renaming INBOX is permitted, and has special behavior.  It moves
  1059.       all messages in INBOX to a new mailbox with the given name,
  1060.       leaving INBOX empty.  If the server implementation supports
  1061.       inferior hierarchical names of INBOX, these are unaffected by a
  1062.       rename of INBOX.
  1063.    Examples:   C: A682 LIST "" *
  1064.                S: * LIST () "/" blurdybloop
  1065.                S: * LIST (Noselect) "/" foo
  1066.                S: * LIST () "/" foo/bar
  1067.                S: A682 OK LIST completed
  1068.                C: A683 RENAME blurdybloop sarasoop
  1069.                S: A683 OK RENAME completed
  1070.                C: A684 RENAME foo zowie
  1071.                S: A684 OK RENAME Completed
  1072.                C: A685 LIST "" *
  1073.                S: * LIST () "/" sarasoop
  1074.                S: * LIST (Noselect) "/" zowie
  1075.                S: * LIST () "/" zowie/bar
  1076.                S: A685 OK LIST completed
  1077. Crispin                     Standards Track                    [Page 28]
  1078. RFC 2060                       IMAP4rev1                   December 1996
  1079.                C: Z432 LIST "" *
  1080.                S: * LIST () "." INBOX
  1081.                S: * LIST () "." INBOX.bar
  1082.                S: Z432 OK LIST completed
  1083.                C: Z433 RENAME INBOX old-mail
  1084.                S: Z433 OK RENAME completed
  1085.                C: Z434 LIST "" *
  1086.                S: * LIST () "." INBOX
  1087.                S: * LIST () "." INBOX.bar
  1088.                S: * LIST () "." old-mail
  1089.                S: Z434 OK LIST completed
  1090. 6.3.6.  SUBSCRIBE Command
  1091.    Arguments:  mailbox
  1092.    Responses:  no specific responses for this command
  1093.    Result:     OK - subscribe completed
  1094.                NO - subscribe failure: can't subscribe to that name
  1095.                BAD - command unknown or arguments invalid
  1096.       The SUBSCRIBE command adds the specified mailbox name to the
  1097.       server's set of "active" or "subscribed" mailboxes as returned by
  1098.       the LSUB command.  This command returns a tagged OK response only
  1099.       if the subscription is successful.
  1100.       A server MAY validate the mailbox argument to SUBSCRIBE to verify
  1101.       that it exists.  However, it MUST NOT unilaterally remove an
  1102.       existing mailbox name from the subscription list even if a mailbox
  1103.       by that name no longer exists.
  1104.       Note: this requirement is because some server sites may routinely
  1105.       remove a mailbox with a well-known name (e.g.  "system-alerts")
  1106.       after its contents expire, with the intention of recreating it
  1107.       when new contents are appropriate.
  1108.    Example:    C: A002 SUBSCRIBE #news.comp.mail.mime
  1109.                S: A002 OK SUBSCRIBE completed
  1110. Crispin                     Standards Track                    [Page 29]
  1111. RFC 2060                       IMAP4rev1                   December 1996
  1112. 6.3.7.  UNSUBSCRIBE Command
  1113.    Arguments:  mailbox name
  1114.    Responses:  no specific responses for this command
  1115.    Result:     OK - unsubscribe completed
  1116.                NO - unsubscribe failure: can't unsubscribe that name
  1117.                BAD - command unknown or arguments invalid
  1118.       The UNSUBSCRIBE command removes the specified mailbox name from
  1119.       the server's set of "active" or "subscribed" mailboxes as returned
  1120.       by the LSUB command.  This command returns a tagged OK response
  1121.       only if the unsubscription is successful.
  1122.    Example:    C: A002 UNSUBSCRIBE #news.comp.mail.mime
  1123.                S: A002 OK UNSUBSCRIBE completed
  1124. 6.3..8.  LIST Command
  1125.    Arguments:  reference name
  1126.                mailbox name with possible wildcards
  1127.    Responses:  untagged responses: LIST
  1128.    Result:     OK - list completed
  1129.                NO - list failure: can't list that reference or name
  1130.                BAD - command unknown or arguments invalid
  1131.       The LIST command returns a subset of names from the complete set
  1132.       of all names available to the client.  Zero or more untagged LIST
  1133.       replies are returned, containing the name attributes, hierarchy
  1134.       delimiter, and name; see the description of the LIST reply for
  1135.       more detail.
  1136.       The LIST command SHOULD return its data quickly, without undue
  1137.       delay.  For example, it SHOULD NOT go to excess trouble to
  1138.       calculate Marked or Unmarked status or perform other processing;
  1139.       if each name requires 1 second of processing, then a list of 1200
  1140.       names would take 20 minutes!
  1141.       An empty ("" string) reference name argument indicates that the
  1142.       mailbox name is interpreted as by SELECT. The returned mailbox
  1143.       names MUST match the supplied mailbox name pattern.  A non-empty
  1144.       reference name argument is the name of a mailbox or a level of
  1145.       mailbox hierarchy, and indicates a context in which the mailbox
  1146.       name is interpreted in an implementation-defined manner.
  1147. Crispin                     Standards Track                    [Page 30]
  1148. RFC 2060                       IMAP4rev1                   December 1996
  1149.       An empty ("" string) mailbox name argument is a special request to
  1150.       return the hierarchy delimiter and the root name of the name given
  1151.       in the reference.  The value returned as the root MAY be null if
  1152.       the reference is non-rooted or is null.  In all cases, the
  1153.       hierarchy delimiter is returned.  This permits a client to get the
  1154.       hierarchy delimiter even when no mailboxes by that name currently
  1155.       exist.
  1156.       The reference and mailbox name arguments are interpreted, in an
  1157.       implementation-dependent fashion, into a canonical form that
  1158.       represents an unambiguous left-to-right hierarchy.  The returned
  1159.       mailbox names will be in the interpreted form.
  1160.       Any part of the reference argument that is included in the
  1161.       interpreted form SHOULD prefix the interpreted form.  It SHOULD
  1162.       also be in the same form as the reference name argument.  This
  1163.       rule permits the client to determine if the returned mailbox name
  1164.       is in the context of the reference argument, or if something about
  1165.       the mailbox argument overrode the reference argument.  Without
  1166.       this rule, the client would have to have knowledge of the server's
  1167.       naming semantics including what characters are "breakouts" that
  1168.       override a naming context.
  1169.       For example, here are some examples of how references and mailbox
  1170.       names might be interpreted on a UNIX-based server:
  1171.                Reference     Mailbox Name  Interpretation
  1172.                ------------  ------------  --------------
  1173.                ~smith/Mail/  foo.*         ~smith/Mail/foo.*
  1174.                archive/      %             archive/%
  1175.                #news.        comp.mail.*   #news.comp.mail.*
  1176.                ~smith/Mail/  /usr/doc/foo  /usr/doc/foo
  1177.                archive/      ~fred/Mail/*  ~fred/Mail/*
  1178.       The first three examples demonstrate interpretations in the
  1179.       context of the reference argument.  Note that "~smith/Mail" SHOULD
  1180.       NOT be transformed into something like "/u2/users/smith/Mail", or
  1181.       it would be impossible for the client to determine that the
  1182.       interpretation was in the context of the reference.
  1183.       The character "*" is a wildcard, and matches zero or more
  1184.       characters at this position.  The character "%" is similar to "*",
  1185.       but it does not match a hierarchy delimiter.  If the "%" wildcard
  1186.       is the last character of a mailbox name argument, matching levels
  1187.       of hierarchy are also returned.  If these levels of hierarchy are
  1188.       not also selectable mailboxes, they are returned with the
  1189.       Noselect mailbox name attribute (see the description of the LIST
  1190.       response for more details).
  1191. Crispin                     Standards Track                    [Page 31]
  1192. RFC 2060                       IMAP4rev1                   December 1996
  1193.       Server implementations are permitted to "hide" otherwise
  1194.       accessible mailboxes from the wildcard characters, by preventing
  1195.       certain characters or names from matching a wildcard in certain
  1196.       situations.  For example, a UNIX-based server might restrict the
  1197.       interpretation of "*" so that an initial "/" character does not
  1198.       match.
  1199.       The special name INBOX is included in the output from LIST, if
  1200.       INBOX is supported by this server for this user and if the
  1201.       uppercase string "INBOX" matches the interpreted reference and
  1202.       mailbox name arguments with wildcards as described above.  The
  1203.       criteria for omitting INBOX is whether SELECT INBOX will return
  1204.       failure; it is not relevant whether the user's real INBOX resides
  1205.       on this or some other server.
  1206.    Example:    C: A101 LIST "" ""
  1207.                S: * LIST (Noselect) "/" ""
  1208.                S: A101 OK LIST Completed
  1209.                C: A102 LIST #news.comp.mail.misc ""
  1210.                S: * LIST (Noselect) "." #news.
  1211.                S: A102 OK LIST Completed
  1212.                C: A103 LIST /usr/staff/jones ""
  1213.                S: * LIST (Noselect) "/" /
  1214.                S: A103 OK LIST Completed
  1215.                C: A202 LIST ~/Mail/ %
  1216.                S: * LIST (Noselect) "/" ~/Mail/foo
  1217.                S: * LIST () "/" ~/Mail/meetings
  1218.                S: A202 OK LIST completed
  1219. 6.3.9.  LSUB Command
  1220.    Arguments:  reference name
  1221.                mailbox name with possible wildcards
  1222.    Responses:  untagged responses: LSUB
  1223.    Result:     OK - lsub completed
  1224.                NO - lsub failure: can't list that reference or name
  1225.                BAD - command unknown or arguments invalid
  1226.       The LSUB command returns a subset of names from the set of names
  1227.       that the user has declared as being "active" or "subscribed".
  1228.       Zero or more untagged LSUB replies are returned.  The arguments to
  1229.       LSUB are in the same form as those for LIST.
  1230.       A server MAY validate the subscribed names to see if they still
  1231.       exist.  If a name does not exist, it SHOULD be flagged with the
  1232.       Noselect attribute in the LSUB response.  The server MUST NOT
  1233. Crispin                     Standards Track                    [Page 32]
  1234. RFC 2060                       IMAP4rev1                   December 1996
  1235.       unilaterally remove an existing mailbox name from the subscription
  1236.       list even if a mailbox by that name no longer exists.
  1237.    Example:    C: A002 LSUB "#news." "comp.mail.*"
  1238.                S: * LSUB () "." #news.comp.mail.mime
  1239.                S: * LSUB () "." #news.comp.mail.misc
  1240.                S: A002 OK LSUB completed
  1241. 6.3.10. STATUS Command
  1242.    Arguments:  mailbox name
  1243.                status data item names
  1244.    Responses:  untagged responses: STATUS
  1245.    Result:     OK - status completed
  1246.                NO - status failure: no status for that name
  1247.                BAD - command unknown or arguments invalid
  1248.       The STATUS command requests the status of the indicated mailbox.
  1249.       It does not change the currently selected mailbox, nor does it
  1250.       affect the state of any messages in the queried mailbox (in
  1251.       particular, STATUS MUST NOT cause messages to lose the Recent
  1252.       flag).
  1253.       The STATUS command provides an alternative to opening a second
  1254.       IMAP4rev1 connection and doing an EXAMINE command on a mailbox to
  1255.       query that mailbox's status without deselecting the current
  1256.       mailbox in the first IMAP4rev1 connection.
  1257.       Unlike the LIST command, the STATUS command is not guaranteed to
  1258.       be fast in its response.  In some implementations, the server is
  1259.       obliged to open the mailbox read-only internally to obtain certain
  1260.       status information.  Also unlike the LIST command, the STATUS
  1261.       command does not accept wildcards.
  1262.       The currently defined status data items that can be requested are:
  1263.       MESSAGES       The number of messages in the mailbox.
  1264.       RECENT         The number of messages with the Recent flag set.
  1265.       UIDNEXT        The next UID value that will be assigned to a new
  1266.                      message in the mailbox.  It is guaranteed that this
  1267.                      value will not change unless new messages are added
  1268.                      to the mailbox; and that it will change when new
  1269.                      messages are added even if those new messages are
  1270.                      subsequently expunged.
  1271. Crispin                     Standards Track                    [Page 33]
  1272. RFC 2060                       IMAP4rev1                   December 1996
  1273.       UIDVALIDITY    The unique identifier validity value of the
  1274.                      mailbox.
  1275.       UNSEEN         The number of messages which do not have the Seen
  1276.                      flag set.
  1277.       Example:    C: A042 STATUS blurdybloop (UIDNEXT MESSAGES)
  1278.                   S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)
  1279.                   S: A042 OK STATUS completed
  1280. 6.3.11. APPEND Command
  1281.    Arguments:  mailbox name
  1282.                OPTIONAL flag parenthesized list
  1283.                OPTIONAL date/time string
  1284.                message literal
  1285.    Responses:  no specific responses for this command
  1286.    Result:     OK - append completed
  1287.                NO - append error: can't append to that mailbox, error
  1288.                     in flags or date/time or message text
  1289.                BAD - command unknown or arguments invalid
  1290.       The APPEND command appends the literal argument as a new message
  1291.       to the end of the specified destination mailbox.  This argument
  1292.       SHOULD be in the format of an [RFC-822] message.  8-bit characters
  1293.       are permitted in the message.  A server implementation that is
  1294.       unable to preserve 8-bit data properly MUST be able to reversibly
  1295.       convert 8-bit APPEND data to 7-bit using a [MIME-IMB] content
  1296.       transfer encoding.
  1297.       Note: There MAY be exceptions, e.g. draft messages, in which
  1298.       required [RFC-822] header lines are omitted in the message literal
  1299.       argument to APPEND.  The full implications of doing so MUST be
  1300.       understood and carefully weighed.
  1301.    If a flag parenthesized list is specified, the flags SHOULD be set in
  1302.    the resulting message; otherwise, the flag list of the resulting
  1303.    message is set empty by default.
  1304.    If a date_time is specified, the internal date SHOULD be set in the
  1305.    resulting message; otherwise, the internal date of the resulting
  1306.    message is set to the current date and time by default.
  1307. Crispin                     Standards Track                    [Page 34]
  1308. RFC 2060                       IMAP4rev1                   December 1996
  1309.    If the append is unsuccessful for any reason, the mailbox MUST be
  1310.    restored to its state before the APPEND attempt; no partial appending
  1311.    is permitted.
  1312.    If the destination mailbox does not exist, a server MUST return an
  1313.    error, and MUST NOT automatically create the mailbox.  Unless it is
  1314.    certain that the destination mailbox can not be created, the server
  1315.    MUST send the response code "[TRYCREATE]" as the prefix of the text
  1316.    of the tagged NO response.  This gives a hint to the client that it
  1317.    can attempt a CREATE command and retry the APPEND if the CREATE is
  1318.    successful.
  1319.    If the mailbox is currently selected, the normal new mail actions
  1320.    SHOULD occur.  Specifically, the server SHOULD notify the client
  1321.    immediately via an untagged EXISTS response.  If the server does not
  1322.    do so, the client MAY issue a NOOP command (or failing that, a CHECK
  1323.    command) after one or more APPEND commands.
  1324.    Example:    C: A003 APPEND saved-messages (Seen) {310}
  1325.                C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
  1326.                C: From: Fred Foobar <foobar@Blurdybloop.COM>
  1327.                C: Subject: afternoon meeting
  1328.                C: To: mooch@owatagu.siam.edu
  1329.                C: Message-Id: <B27397-0100000@Blurdybloop.COM>
  1330.                C: MIME-Version: 1.0
  1331.                C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
  1332.                C:
  1333.                C: Hello Joe, do you think we can meet at 3:30 tomorrow?
  1334.                C:
  1335.                S: A003 OK APPEND completed
  1336.       Note: the APPEND command is not used for message delivery, because
  1337.       it does not provide a mechanism to transfer [SMTP] envelope
  1338.       information.
  1339. 6.4.    Client Commands - Selected State
  1340.    In selected state, commands that manipulate messages in a mailbox are
  1341.    permitted.
  1342.    In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),
  1343.    and the authenticated state commands (SELECT, EXAMINE, CREATE,
  1344.    DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, and
  1345.    APPEND), the following commands are valid in the selected state:
  1346.    CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, and UID.
  1347. Crispin                     Standards Track                    [Page 35]
  1348. RFC 2060                       IMAP4rev1                   December 1996
  1349. 6.4.1.  CHECK Command
  1350.    Arguments:  none
  1351.    Responses:  no specific responses for this command
  1352.    Result:     OK - check completed
  1353.                BAD - command unknown or arguments invalid
  1354.       The CHECK command requests a checkpoint of the currently selected
  1355.       mailbox.  A checkpoint refers to any implementation-dependent
  1356.       housekeeping associated with the mailbox (e.g. resolving the
  1357.       server's in-memory state of the mailbox with the state on its
  1358.       disk) that is not normally executed as part of each command.  A
  1359.       checkpoint MAY take a non-instantaneous amount of real time to
  1360.       complete.  If a server implementation has no such housekeeping
  1361.       considerations, CHECK is equivalent to NOOP.
  1362.       There is no guarantee that an EXISTS untagged response will happen
  1363.       as a result of CHECK.  NOOP, not CHECK, SHOULD be used for new
  1364.       mail polling.
  1365.    Example:    C: FXXZ CHECK
  1366.                S: FXXZ OK CHECK Completed
  1367. 6.4.2.  CLOSE Command
  1368.    Arguments:  none
  1369.    Responses:  no specific responses for this command
  1370.    Result:     OK - close completed, now in authenticated state
  1371.                NO - close failure: no mailbox selected
  1372.                BAD - command unknown or arguments invalid
  1373.       The CLOSE command permanently removes from the currently selected
  1374.       mailbox all messages that have the Deleted flag set, and returns
  1375.       to authenticated state from selected state.  No untagged EXPUNGE
  1376.       responses are sent.
  1377.       No messages are removed, and no error is given, if the mailbox is
  1378.       selected by an EXAMINE command or is otherwise selected read-only.
  1379.       Even if a mailbox is selected, a SELECT, EXAMINE, or LOGOUT
  1380.       command MAY be issued without previously issuing a CLOSE command.
  1381.       The SELECT, EXAMINE, and LOGOUT commands implicitly close the
  1382.       currently selected mailbox without doing an expunge.  However,
  1383.       when many messages are deleted, a CLOSE-LOGOUT or CLOSE-SELECT
  1384. Crispin                     Standards Track                    [Page 36]
  1385. RFC 2060                       IMAP4rev1                   December 1996
  1386.       sequence is considerably faster than an EXPUNGE-LOGOUT or
  1387.       EXPUNGE-SELECT because no untagged EXPUNGE responses (which the
  1388.       client would probably ignore) are sent.
  1389.    Example:    C: A341 CLOSE
  1390.                S: A341 OK CLOSE completed
  1391. 6.4.3.  EXPUNGE Command
  1392.    Arguments:  none
  1393.    Responses:  untagged responses: EXPUNGE
  1394.    Result:     OK - expunge completed
  1395.                NO - expunge failure: can't expunge (e.g. permission
  1396.                     denied)
  1397.                BAD - command unknown or arguments invalid
  1398.       The EXPUNGE command permanently removes from the currently
  1399.       selected mailbox all messages that have the Deleted flag set.
  1400.       Before returning an OK to the client, an untagged EXPUNGE response
  1401.       is sent for each message that is removed.
  1402.    Example:    C: A202 EXPUNGE
  1403.                S: * 3 EXPUNGE
  1404.                S: * 3 EXPUNGE
  1405.                S: * 5 EXPUNGE
  1406.                S: * 8 EXPUNGE
  1407.                S: A202 OK EXPUNGE completed
  1408.       Note: in this example, messages 3, 4, 7, and 11 had the
  1409.       Deleted flag set.  See the description of the EXPUNGE
  1410.       response for further explanation.
  1411. 6.4.4.  SEARCH Command
  1412.    Arguments:  OPTIONAL [CHARSET] specification
  1413.                searching criteria (one or more)
  1414.    Responses:  REQUIRED untagged response: SEARCH
  1415.    Result:     OK - search completed
  1416.                NO - search error: can't search that [CHARSET] or
  1417.                     criteria
  1418.                BAD - command unknown or arguments invalid
  1419. Crispin                     Standards Track                    [Page 37]
  1420. RFC 2060                       IMAP4rev1                   December 1996
  1421.       The SEARCH command searches the mailbox for messages that match
  1422.       the given searching criteria.  Searching criteria consist of one
  1423.       or more search keys.  The untagged SEARCH response from the server
  1424.       contains a listing of message sequence numbers corresponding to
  1425.       those messages that match the searching criteria.
  1426.       When multiple keys are specified, the result is the intersection
  1427.       (AND function) of all the messages that match those keys.  For
  1428.       example, the criteria DELETED FROM "SMITH" SINCE 1-Feb-1994 refers
  1429.       to all deleted messages from Smith that were placed in the mailbox
  1430.       since February 1, 1994.  A search key can also be a parenthesized
  1431.       list of one or more search keys (e.g. for use with the OR and NOT
  1432.       keys).
  1433.       Server implementations MAY exclude [MIME-IMB] body parts with
  1434.       terminal content media types other than TEXT and MESSAGE from
  1435.       consideration in SEARCH matching.
  1436.       The OPTIONAL [CHARSET] specification consists of the word
  1437.       "CHARSET" followed by a registered [CHARSET].  It indicates the
  1438.       [CHARSET] of the strings that appear in the search criteria.
  1439.       [MIME-IMB] content transfer encodings, and [MIME-HDRS] strings in
  1440.       [RFC-822]/[MIME-IMB] headers, MUST be decoded before comparing
  1441.       text in a [CHARSET] other than US-ASCII.  US-ASCII MUST be
  1442.       supported; other [CHARSET]s MAY be supported.  If the server does
  1443.       not support the specified [CHARSET], it MUST return a tagged NO
  1444.       response (not a BAD).
  1445.       In all search keys that use strings, a message matches the key if
  1446.       the string is a substring of the field.  The matching is case-
  1447.       insensitive.
  1448.       The defined search keys are as follows.  Refer to the Formal
  1449.       Syntax section for the precise syntactic definitions of the
  1450.       arguments.
  1451.       <message set>  Messages with message sequence numbers
  1452.                      corresponding to the specified message sequence
  1453.                      number set
  1454.       ALL            All messages in the mailbox; the default initial
  1455.                      key for ANDing.
  1456.       ANSWERED       Messages with the Answered flag set.
  1457.       BCC <string>   Messages that contain the specified string in the
  1458.                      envelope structure's BCC field.
  1459. Crispin                     Standards Track                    [Page 38]
  1460. RFC 2060                       IMAP4rev1                   December 1996
  1461.       BEFORE <date>  Messages whose internal date is earlier than the
  1462.                      specified date.
  1463.       BODY <string>  Messages that contain the specified string in the
  1464.                      body of the message.
  1465.       CC <string>    Messages that contain the specified string in the
  1466.                      envelope structure's CC field.
  1467.       DELETED        Messages with the Deleted flag set.
  1468.       DRAFT          Messages with the Draft flag set.
  1469.       FLAGGED        Messages with the Flagged flag set.
  1470.       FROM <string>  Messages that contain the specified string in the
  1471.                      envelope structure's FROM field.
  1472.       HEADER <field-name> <string>
  1473.                      Messages that have a header with the specified
  1474.                      field-name (as defined in [RFC-822]) and that
  1475.                      contains the specified string in the [RFC-822]
  1476.                      field-body.
  1477.       KEYWORD <flag> Messages with the specified keyword set.
  1478.       LARGER <n>     Messages with an [RFC-822] size larger than the
  1479.                      specified number of octets.
  1480.       NEW            Messages that have the Recent flag set but not the
  1481.                      Seen flag.  This is functionally equivalent to
  1482.                      "(RECENT UNSEEN)".
  1483.       NOT <search-key>
  1484.                      Messages that do not match the specified search
  1485.                      key.
  1486.       OLD            Messages that do not have the Recent flag set.
  1487.                      This is functionally equivalent to "NOT RECENT" (as
  1488.                      opposed to "NOT NEW").
  1489.       ON <date>      Messages whose internal date is within the
  1490.                      specified date.
  1491.       OR <search-key1> <search-key2>
  1492.                      Messages that match either search key.
  1493.       RECENT         Messages that have the Recent flag set.
  1494. Crispin                     Standards Track                    [Page 39]
  1495. RFC 2060                       IMAP4rev1                   December 1996
  1496.       SEEN           Messages that have the Seen flag set.
  1497.       SENTBEFORE <date>
  1498.                      Messages whose [RFC-822] Date: header is earlier
  1499.                      than the specified date.
  1500.       SENTON <date>  Messages whose [RFC-822] Date: header is within the
  1501.                      specified date.
  1502.       SENTSINCE <date>
  1503.                      Messages whose [RFC-822] Date: header is within or
  1504.                      later than the specified date.
  1505.       SINCE <date>   Messages whose internal date is within or later
  1506.                      than the specified date.
  1507.       SMALLER <n>    Messages with an [RFC-822] size smaller than the
  1508.                      specified number of octets.
  1509.       SUBJECT <string>
  1510.                      Messages that contain the specified string in the
  1511.                      envelope structure's SUBJECT field.
  1512.       TEXT <string>  Messages that contain the specified string in the
  1513.                      header or body of the message.
  1514.       TO <string>    Messages that contain the specified string in the
  1515.                      envelope structure's TO field.
  1516.       UID <message set>
  1517.                      Messages with unique identifiers corresponding to
  1518.                      the specified unique identifier set.
  1519.       UNANSWERED     Messages that do not have the Answered flag set.
  1520.       UNDELETED      Messages that do not have the Deleted flag set.
  1521.       UNDRAFT        Messages that do not have the Draft flag set.
  1522.       UNFLAGGED      Messages that do not have the Flagged flag set.
  1523.       UNKEYWORD <flag>
  1524.                      Messages that do not have the specified keyword
  1525.                      set.
  1526.       UNSEEN         Messages that do not have the Seen flag set.
  1527. Crispin                     Standards Track                    [Page 40]
  1528. RFC 2060                       IMAP4rev1                   December 1996
  1529.    Example:    C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM "Smith"
  1530.                S: * SEARCH 2 84 882
  1531.                S: A282 OK SEARCH completed
  1532. 6.4.5.  FETCH Command
  1533.    Arguments:  message set
  1534.                message data item names
  1535.    Responses:  untagged responses: FETCH
  1536.    Result:     OK - fetch completed
  1537.                NO - fetch error: can't fetch that data
  1538.                BAD - command unknown or arguments invalid
  1539.       The FETCH command retrieves data associated with a message in the
  1540.       mailbox.  The data items to be fetched can be either a single atom
  1541.       or a parenthesized list.
  1542.       The currently defined data items that can be fetched are:
  1543.       ALL            Macro equivalent to: (FLAGS INTERNALDATE
  1544.                      RFC822.SIZE ENVELOPE)
  1545.       BODY           Non-extensible form of BODYSTRUCTURE.
  1546.       BODY[<section>]<<partial>>
  1547.                      The text of a particular body section.  The section
  1548.                      specification is a set of zero or more part
  1549.                      specifiers delimited by periods.  A part specifier
  1550.                      is either a part number or one of the following:
  1551.                      HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and
  1552.                      TEXT.  An empty section specification refers to the
  1553.                      entire message, including the header.
  1554.                      Every message has at least one part number.
  1555.                      Non-[MIME-IMB] messages, and non-multipart
  1556.                      [MIME-IMB] messages with no encapsulated message,
  1557.                      only have a part 1.
  1558.                      Multipart messages are assigned consecutive part
  1559.                      numbers, as they occur in the message.  If a
  1560.                      particular part is of type message or multipart,
  1561.                      its parts MUST be indicated by a period followed by
  1562.                      the part number within that nested multipart part.
  1563. Crispin                     Standards Track                    [Page 41]