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

网络编程

开发平台:

Unix_Linux

  1. RFC 2060                       IMAP4rev1                   December 1996
  2.                      A part of type MESSAGE/RFC822 also has nested part
  3.                      numbers, referring to parts of the MESSAGE part's
  4.                      body.
  5.                      The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, and
  6.                      TEXT part specifiers can be the sole part specifier
  7.                      or can be prefixed by one or more numeric part
  8.                      specifiers, provided that the numeric part
  9.                      specifier refers to a part of type MESSAGE/RFC822.
  10.                      The MIME part specifier MUST be prefixed by one or
  11.                      more numeric part specifiers.
  12.                      The HEADER, HEADER.FIELDS, and HEADER.FIELDS.NOT
  13.                      part specifiers refer to the [RFC-822] header of
  14.                      the message or of an encapsulated [MIME-IMT]
  15.                      MESSAGE/RFC822 message.  HEADER.FIELDS and
  16.                      HEADER.FIELDS.NOT are followed by a list of
  17.                      field-name (as defined in [RFC-822]) names, and
  18.                      return a subset of the header.  The subset returned
  19.                      by HEADER.FIELDS contains only those header fields
  20.                      with a field-name that matches one of the names in
  21.                      the list; similarly, the subset returned by
  22.                      HEADER.FIELDS.NOT contains only the header fields
  23.                      with a non-matching field-name.  The field-matching
  24.                      is case-insensitive but otherwise exact.  In all
  25.                      cases, the delimiting blank line between the header
  26.                      and the body is always included.
  27.                      The MIME part specifier refers to the [MIME-IMB]
  28.                      header for this part.
  29.                      The TEXT part specifier refers to the text body of
  30.                      the message, omitting the [RFC-822] header.
  31. Crispin                     Standards Track                    [Page 42]
  32. RFC 2060                       IMAP4rev1                   December 1996
  33.                        Here is an example of a complex message
  34.                        with some of its part specifiers:
  35.                         HEADER     ([RFC-822] header of the message)
  36.                         TEXT       MULTIPART/MIXED
  37.                         1          TEXT/PLAIN
  38.                         2          APPLICATION/OCTET-STREAM
  39.                         3          MESSAGE/RFC822
  40.                         3.HEADER   ([RFC-822] header of the message)
  41.                         3.TEXT     ([RFC-822] text body of the message)
  42.                         3.1        TEXT/PLAIN
  43.                         3.2        APPLICATION/OCTET-STREAM
  44.                         4          MULTIPART/MIXED
  45.                         4.1        IMAGE/GIF
  46.                         4.1.MIME   ([MIME-IMB] header for the IMAGE/GIF)
  47.                         4.2        MESSAGE/RFC822
  48.                         4.2.HEADER ([RFC-822] header of the message)
  49.                         4.2.TEXT   ([RFC-822] text body of the message)
  50.                         4.2.1      TEXT/PLAIN
  51.                         4.2.2      MULTIPART/ALTERNATIVE
  52.                         4.2.2.1    TEXT/PLAIN
  53.                         4.2.2.2    TEXT/RICHTEXT
  54.                      It is possible to fetch a substring of the
  55.                      designated text.  This is done by appending an open
  56.                      angle bracket ("<"), the octet position of the
  57.                      first desired octet, a period, the maximum number
  58.                      of octets desired, and a close angle bracket (">")
  59.                      to the part specifier.  If the starting octet is
  60.                      beyond the end of the text, an empty string is
  61.                      returned.
  62.                      Any partial fetch that attempts to read beyond the
  63.                      end of the text is truncated as appropriate.  A
  64.                      partial fetch that starts at octet 0 is returned as
  65.                      a partial fetch, even if this truncation happened.
  66.                           Note: this means that BODY[]<0.2048> of a
  67.                           1500-octet message will return BODY[]<0>
  68.                           with a literal of size 1500, not BODY[].
  69.                           Note: a substring fetch of a
  70.                           HEADER.FIELDS or HEADER.FIELDS.NOT part
  71.                           specifier is calculated after subsetting
  72.                           the header.
  73. Crispin                     Standards Track                    [Page 43]
  74. RFC 2060                       IMAP4rev1                   December 1996
  75.                      The Seen flag is implicitly set; if this causes
  76.                      the flags to change they SHOULD be included as part
  77.                      of the FETCH responses.
  78.       BODY.PEEK[<section>]<<partial>>
  79.                      An alternate form of BODY[<section>] that does not
  80.                      implicitly set the Seen flag.
  81.       BODYSTRUCTURE  The [MIME-IMB] body structure of the message.  This
  82.                      is computed by the server by parsing the [MIME-IMB]
  83.                      header fields in the [RFC-822] header and
  84.                      [MIME-IMB] headers.
  85.       ENVELOPE       The envelope structure of the message.  This is
  86.                      computed by the server by parsing the [RFC-822]
  87.                      header into the component parts, defaulting various
  88.                      fields as necessary.
  89.       FAST           Macro equivalent to: (FLAGS INTERNALDATE
  90.                      RFC822.SIZE)
  91.       FLAGS          The flags that are set for this message.
  92.       FULL           Macro equivalent to: (FLAGS INTERNALDATE
  93.                      RFC822.SIZE ENVELOPE BODY)
  94.       INTERNALDATE   The internal date of the message.
  95.       RFC822         Functionally equivalent to BODY[], differing in the
  96.                      syntax of the resulting untagged FETCH data (RFC822
  97.                      is returned).
  98.       RFC822.HEADER  Functionally equivalent to BODY.PEEK[HEADER],
  99.                      differing in the syntax of the resulting untagged
  100.                      FETCH data (RFC822.HEADER is returned).
  101.       RFC822.SIZE    The [RFC-822] size of the message.
  102.       RFC822.TEXT    Functionally equivalent to BODY[TEXT], differing in
  103.                      the syntax of the resulting untagged FETCH data
  104.                      (RFC822.TEXT is returned).
  105.       UID            The unique identifier for the message.
  106. Crispin                     Standards Track                    [Page 44]
  107. RFC 2060                       IMAP4rev1                   December 1996
  108.    Example:    C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])
  109.                S: * 2 FETCH ....
  110.                S: * 3 FETCH ....
  111.                S: * 4 FETCH ....
  112.                S: A654 OK FETCH completed
  113. 6.4.6.  STORE Command
  114.    Arguments:  message set
  115.                message data item name
  116.                value for message data item
  117.    Responses:  untagged responses: FETCH
  118.    Result:     OK - store completed
  119.                NO - store error: can't store that data
  120.                BAD - command unknown or arguments invalid
  121.       The STORE command alters data associated with a message in the
  122.       mailbox.  Normally, STORE will return the updated value of the
  123.       data with an untagged FETCH response.  A suffix of ".SILENT" in
  124.       the data item name prevents the untagged FETCH, and the server
  125.       SHOULD assume that the client has determined the updated value
  126.       itself or does not care about the updated value.
  127.          Note: regardless of whether or not the ".SILENT" suffix was
  128.          used, the server SHOULD send an untagged FETCH response if a
  129.          change to a message's flags from an external source is
  130.          observed.  The intent is that the status of the flags is
  131.          determinate without a race condition.
  132.       The currently defined data items that can be stored are:
  133.       FLAGS <flag list>
  134.                      Replace the flags for the message with the
  135.                      argument.  The new value of the flags are returned
  136.                      as if a FETCH of those flags was done.
  137.       FLAGS.SILENT <flag list>
  138.                      Equivalent to FLAGS, but without returning a new
  139.                      value.
  140.       +FLAGS <flag list>
  141.                      Add the argument to the flags for the message.  The
  142.                      new value of the flags are returned as if a FETCH
  143.                      of those flags was done.
  144. Crispin                     Standards Track                    [Page 45]
  145. RFC 2060                       IMAP4rev1                   December 1996
  146.       +FLAGS.SILENT <flag list>
  147.                      Equivalent to +FLAGS, but without returning a new
  148.                      value.
  149.       -FLAGS <flag list>
  150.                      Remove the argument from the flags for the message.
  151.                      The new value of the flags are returned as if a
  152.                      FETCH of those flags was done.
  153.       -FLAGS.SILENT <flag list>
  154.                      Equivalent to -FLAGS, but without returning a new
  155.                      value.
  156.    Example:    C: A003 STORE 2:4 +FLAGS (Deleted)
  157.                S: * 2 FETCH FLAGS (Deleted Seen)
  158.                S: * 3 FETCH FLAGS (Deleted)
  159.                S: * 4 FETCH FLAGS (Deleted Flagged Seen)
  160.                S: A003 OK STORE completed
  161. 6.4.7.  COPY Command
  162.    Arguments:  message set
  163.                mailbox name
  164.    Responses:  no specific responses for this command
  165.    Result:     OK - copy completed
  166.                NO - copy error: can't copy those messages or to that
  167.                     name
  168.                BAD - command unknown or arguments invalid
  169.       The COPY command copies the specified message(s) to the end of the
  170.       specified destination mailbox.  The flags and internal date of the
  171.       message(s) SHOULD be preserved in the copy.
  172.       If the destination mailbox does not exist, a server SHOULD return
  173.       an error.  It SHOULD NOT automatically create the mailbox.  Unless
  174.       it is certain that the destination mailbox can not be created, the
  175.       server MUST send the response code "[TRYCREATE]" as the prefix of
  176.       the text of the tagged NO response.  This gives a hint to the
  177.       client that it can attempt a CREATE command and retry the COPY if
  178.       the CREATE is successful.
  179. Crispin                     Standards Track                    [Page 46]
  180. RFC 2060                       IMAP4rev1                   December 1996
  181.       If the COPY command is unsuccessful for any reason, server
  182.       implementations MUST restore the destination mailbox to its state
  183.       before the COPY attempt.
  184.    Example:    C: A003 COPY 2:4 MEETING
  185.                S: A003 OK COPY completed
  186. 6.4.8.  UID Command
  187.    Arguments:  command name
  188.                command arguments
  189.    Responses:  untagged responses: FETCH, SEARCH
  190.    Result:     OK - UID command completed
  191.                NO - UID command error
  192.                BAD - command unknown or arguments invalid
  193.       The UID command has two forms.  In the first form, it takes as its
  194.       arguments a COPY, FETCH, or STORE command with arguments
  195.       appropriate for the associated command.  However, the numbers in
  196.       the message set argument are unique identifiers instead of message
  197.       sequence numbers.
  198.       In the second form, the UID command takes a SEARCH command with
  199.       SEARCH command arguments.  The interpretation of the arguments is
  200.       the same as with SEARCH; however, the numbers returned in a SEARCH
  201.       response for a UID SEARCH command are unique identifiers instead
  202.       of message sequence numbers.  For example, the command UID SEARCH
  203.       1:100 UID 443:557 returns the unique identifiers corresponding to
  204.       the intersection of the message sequence number set 1:100 and the
  205.       UID set 443:557.
  206.       Message set ranges are permitted; however, there is no guarantee
  207.       that unique identifiers be contiguous.  A non-existent unique
  208.       identifier within a message set range is ignored without any error
  209.       message generated.
  210.       The number after the "*" in an untagged FETCH response is always a
  211.       message sequence number, not a unique identifier, even for a UID
  212.       command response.  However, server implementations MUST implicitly
  213.       include the UID message data item as part of any FETCH response
  214.       caused by a UID command, regardless of whether a UID was specified
  215.       as a message data item to the FETCH.
  216. Crispin                     Standards Track                    [Page 47]
  217. RFC 2060                       IMAP4rev1                   December 1996
  218.    Example:    C: A999 UID FETCH 4827313:4828442 FLAGS
  219.                S: * 23 FETCH (FLAGS (Seen) UID 4827313)
  220.                S: * 24 FETCH (FLAGS (Seen) UID 4827943)
  221.                S: * 25 FETCH (FLAGS (Seen) UID 4828442)
  222.                S: A999 UID FETCH completed
  223. 6.5.    Client Commands - Experimental/Expansion
  224. 6.5.1.  X<atom> Command
  225.    Arguments:  implementation defined
  226.    Responses:  implementation defined
  227.    Result:     OK - command completed
  228.                NO - failure
  229.                BAD - command unknown or arguments invalid
  230.       Any command prefixed with an X is an experimental command.
  231.       Commands which are not part of this specification, a standard or
  232.       standards-track revision of this specification, or an IESG-
  233.       approved experimental protocol, MUST use the X prefix.
  234.       Any added untagged responses issued by an experimental command
  235.       MUST also be prefixed with an X.  Server implementations MUST NOT
  236.       send any such untagged responses, unless the client requested it
  237.       by issuing the associated experimental command.
  238.    Example:    C: a441 CAPABILITY
  239.                S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN
  240.                S: a441 OK CAPABILITY completed
  241.                C: A442 XPIG-LATIN
  242.                S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay
  243.                S: A442 OK XPIG-LATIN ompleted-cay
  244. 7.      Server Responses
  245.    Server responses are in three forms: status responses, server data,
  246.    and command continuation request.  The information contained in a
  247.    server response, identified by "Contents:" in the response
  248.    descriptions below, is described by function, not by syntax.  The
  249.    precise syntax of server responses is described in the Formal Syntax
  250.    section.
  251.    The client MUST be prepared to accept any response at all times.
  252. Crispin                     Standards Track                    [Page 48]
  253. RFC 2060                       IMAP4rev1                   December 1996
  254.    Status responses can be tagged or untagged.  Tagged status responses
  255.    indicate the completion result (OK, NO, or BAD status) of a client
  256.    command, and have a tag matching the command.
  257.    Some status responses, and all server data, are untagged.  An
  258.    untagged response is indicated by the token "*" instead of a tag.
  259.    Untagged status responses indicate server greeting, or server status
  260.    that does not indicate the completion of a command (for example, an
  261.    impending system shutdown alert).  For historical reasons, untagged
  262.    server data responses are also called "unsolicited data", although
  263.    strictly speaking only unilateral server data is truly "unsolicited".
  264.    Certain server data MUST be recorded by the client when it is
  265.    received; this is noted in the description of that data.  Such data
  266.    conveys critical information which affects the interpretation of all
  267.    subsequent commands and responses (e.g. updates reflecting the
  268.    creation or destruction of messages).
  269.    Other server data SHOULD be recorded for later reference; if the
  270.    client does not need to record the data, or if recording the data has
  271.    no obvious purpose (e.g. a SEARCH response when no SEARCH command is
  272.    in progress), the data SHOULD be ignored.
  273.    An example of unilateral untagged server data occurs when the IMAP
  274.    connection is in selected state.  In selected state, the server
  275.    checks the mailbox for new messages as part of command execution.
  276.    Normally, this is part of the execution of every command; hence, a
  277.    NOOP command suffices to check for new messages.  If new messages are
  278.    found, the server sends untagged EXISTS and RECENT responses
  279.    reflecting the new size of the mailbox.  Server implementations that
  280.    offer multiple simultaneous access to the same mailbox SHOULD also
  281.    send appropriate unilateral untagged FETCH and EXPUNGE responses if
  282.    another agent changes the state of any message flags or expunges any
  283.    messages.
  284.    Command continuation request responses use the token "+" instead of a
  285.    tag.  These responses are sent by the server to indicate acceptance
  286.    of an incomplete client command and readiness for the remainder of
  287.    the command.
  288. 7.1.    Server Responses - Status Responses
  289.    Status responses are OK, NO, BAD, PREAUTH and BYE.  OK, NO, and BAD
  290.    may be tagged or untagged.  PREAUTH and BYE are always untagged.
  291.    Status responses MAY include an OPTIONAL "response code".  A response
  292.    code consists of data inside square brackets in the form of an atom,
  293.    possibly followed by a space and arguments.  The response code
  294. Crispin                     Standards Track                    [Page 49]
  295. RFC 2060                       IMAP4rev1                   December 1996
  296.    contains additional information or status codes for client software
  297.    beyond the OK/NO/BAD condition, and are defined when there is a
  298.    specific action that a client can take based upon the additional
  299.    information.
  300.    The currently defined response codes are:
  301.       ALERT          The human-readable text contains a special alert
  302.                      that MUST be presented to the user in a fashion
  303.                      that calls the user's attention to the message.
  304.       NEWNAME        Followed by a mailbox name and a new mailbox name.
  305.                      A SELECT or EXAMINE is failing because the target
  306.                      mailbox name no longer exists because it was
  307.                      renamed to the new mailbox name.  This is a hint to
  308.                      the client that the operation can succeed if the
  309.                      SELECT or EXAMINE is reissued with the new mailbox
  310.                      name.
  311.       PARSE          The human-readable text represents an error in
  312.                      parsing the [RFC-822] header or [MIME-IMB] headers
  313.                      of a message in the mailbox.
  314.       PERMANENTFLAGS Followed by a parenthesized list of flags,
  315.                      indicates which of the known flags that the client
  316.                      can change permanently.  Any flags that are in the
  317.                      FLAGS untagged response, but not the PERMANENTFLAGS
  318.                      list, can not be set permanently.  If the client
  319.                      attempts to STORE a flag that is not in the
  320.                      PERMANENTFLAGS list, the server will either reject
  321.                      it with a NO reply or store the state for the
  322.                      remainder of the current session only.  The
  323.                      PERMANENTFLAGS list can also include the special
  324.                      flag *, which indicates that it is possible to
  325.                      create new keywords by attempting to store those
  326.                      flags in the mailbox.
  327.       READ-ONLY      The mailbox is selected read-only, or its access
  328.                      while selected has changed from read-write to
  329.                      read-only.
  330.       READ-WRITE     The mailbox is selected read-write, or its access
  331.                      while selected has changed from read-only to
  332.                      read-write.
  333. Crispin                     Standards Track                    [Page 50]
  334. RFC 2060                       IMAP4rev1                   December 1996
  335.       TRYCREATE      An APPEND or COPY attempt is failing because the
  336.                      target mailbox does not exist (as opposed to some
  337.                      other reason).  This is a hint to the client that
  338.                      the operation can succeed if the mailbox is first
  339.                      created by the CREATE command.
  340.       UIDVALIDITY    Followed by a decimal number, indicates the unique
  341.                      identifier validity value.
  342.       UNSEEN         Followed by a decimal number, indicates the number
  343.                      of the first message without the Seen flag set.
  344.       Additional response codes defined by particular client or server
  345.       implementations SHOULD be prefixed with an "X" until they are
  346.       added to a revision of this protocol.  Client implementations
  347.       SHOULD ignore response codes that they do not recognize.
  348. 7.1.1.  OK Response
  349.    Contents:   OPTIONAL response code
  350.                human-readable text
  351.       The OK response indicates an information message from the server.
  352.       When tagged, it indicates successful completion of the associated
  353.       command.  The human-readable text MAY be presented to the user as
  354.       an information message.  The untagged form indicates an
  355.       information-only message; the nature of the information MAY be
  356.       indicated by a response code.
  357.       The untagged form is also used as one of three possible greetings
  358.       at connection startup.  It indicates that the connection is not
  359.       yet authenticated and that a LOGIN command is needed.
  360.    Example:    S: * OK IMAP4rev1 server ready
  361.                C: A001 LOGIN fred blurdybloop
  362.                S: * OK [ALERT] System shutdown in 10 minutes
  363.                S: A001 OK LOGIN Completed
  364. 7.1.2.  NO Response
  365.       Contents:   OPTIONAL response code
  366.                   human-readable text
  367.       The NO response indicates an operational error message from the
  368.       server.  When tagged, it indicates unsuccessful completion of the
  369.       associated command.  The untagged form indicates a warning; the
  370.       command can still complete successfully.  The human-readable text
  371.       describes the condition.
  372. Crispin                     Standards Track                    [Page 51]
  373. RFC 2060                       IMAP4rev1                   December 1996
  374.    Example:    C: A222 COPY 1:2 owatagusiam
  375.                S: * NO Disk is 98% full, please delete unnecessary data
  376.                S: A222 OK COPY completed
  377.                C: A223 COPY 3:200 blurdybloop
  378.                S: * NO Disk is 98% full, please delete unnecessary data
  379.                S: * NO Disk is 99% full, please delete unnecessary data
  380.                S: A223 NO COPY failed: disk is full
  381. 7.1.3.  BAD Response
  382.    Contents:   OPTIONAL response code
  383.                human-readable text
  384.       The BAD response indicates an error message from the server.  When
  385.       tagged, it reports a protocol-level error in the client's command;
  386.       the tag indicates the command that caused the error.  The untagged
  387.       form indicates a protocol-level error for which the associated
  388.       command can not be determined; it can also indicate an internal
  389.       server failure.  The human-readable text describes the condition.
  390.    Example:    C: ...very long command line...
  391.                S: * BAD Command line too long
  392.                C: ...empty line...
  393.                S: * BAD Empty command line
  394.                C: A443 EXPUNGE
  395.                S: * BAD Disk crash, attempting salvage to a new disk!
  396.                S: * OK Salvage successful, no data lost
  397.                S: A443 OK Expunge completed
  398. 7.1.4.  PREAUTH Response
  399.    Contents:   OPTIONAL response code
  400.                human-readable text
  401.       The PREAUTH response is always untagged, and is one of three
  402.       possible greetings at connection startup.  It indicates that the
  403.       connection has already been authenticated by external means and
  404.       thus no LOGIN command is needed.
  405.    Example:    S: * PREAUTH IMAP4rev1 server logged in as Smith
  406. 7.1.5.  BYE Response
  407.    Contents:   OPTIONAL response code
  408.                human-readable text
  409. Crispin                     Standards Track                    [Page 52]
  410. RFC 2060                       IMAP4rev1                   December 1996
  411.       The BYE response is always untagged, and indicates that the server
  412.       is about to close the connection.  The human-readable text MAY be
  413.       displayed to the user in a status report by the client.  The BYE
  414.       response is sent under one of four conditions:
  415.          1) as part of a normal logout sequence.  The server will close
  416.             the connection after sending the tagged OK response to the
  417.             LOGOUT command.
  418.          2) as a panic shutdown announcement.  The server closes the
  419.             connection immediately.
  420.          3) as an announcement of an inactivity autologout.  The server
  421.             closes the connection immediately.
  422.          4) as one of three possible greetings at connection startup,
  423.             indicating that the server is not willing to accept a
  424.             connection from this client.  The server closes the
  425.             connection immediately.
  426.       The difference between a BYE that occurs as part of a normal
  427.       LOGOUT sequence (the first case) and a BYE that occurs because of
  428.       a failure (the other three cases) is that the connection closes
  429.       immediately in the failure case.
  430.    Example:    S: * BYE Autologout; idle for too long
  431. 7.2.    Server Responses - Server and Mailbox Status
  432.    These responses are always untagged.  This is how server and mailbox
  433.    status data are transmitted from the server to the client.  Many of
  434.    these responses typically result from a command with the same name.
  435. 7.2.1.  CAPABILITY Response
  436.    Contents:   capability listing
  437.       The CAPABILITY response occurs as a result of a CAPABILITY
  438.       command.  The capability listing contains a space-separated
  439.       listing of capability names that the server supports.  The
  440.       capability listing MUST include the atom "IMAP4rev1".
  441.       A capability name which begins with "AUTH=" indicates that the
  442.       server supports that particular authentication mechanism.
  443. Crispin                     Standards Track                    [Page 53]
  444. RFC 2060                       IMAP4rev1                   December 1996
  445.       Other capability names indicate that the server supports an
  446.       extension, revision, or amendment to the IMAP4rev1 protocol.
  447.       Server responses MUST conform to this document until the client
  448.       issues a command that uses the associated capability.
  449.       Capability names MUST either begin with "X" or be standard or
  450.       standards-track IMAP4rev1 extensions, revisions, or amendments
  451.       registered with IANA.  A server MUST NOT offer unregistered or
  452.       non-standard capability names, unless such names are prefixed with
  453.       an "X".
  454.       Client implementations SHOULD NOT require any capability name
  455.       other than "IMAP4rev1", and MUST ignore any unknown capability
  456.       names.
  457.    Example:    S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN
  458. 7.2.2.  LIST Response
  459.    Contents:   name attributes
  460.                hierarchy delimiter
  461.                name
  462.       The LIST response occurs as a result of a LIST command.  It
  463.       returns a single name that matches the LIST specification.  There
  464.       can be multiple LIST responses for a single LIST command.
  465.       Four name attributes are defined:
  466.       Noinferiors   It is not possible for any child levels of
  467.                      hierarchy to exist under this name; no child levels
  468.                      exist now and none can be created in the future.
  469.       Noselect      It is not possible to use this name as a selectable
  470.                      mailbox.
  471.       Marked        The mailbox has been marked "interesting" by the
  472.                      server; the mailbox probably contains messages that
  473.                      have been added since the last time the mailbox was
  474.                      selected.
  475.       Unmarked      The mailbox does not contain any additional
  476.                      messages since the last time the mailbox was
  477.                      selected.
  478.       If it is not feasible for the server to determine whether the
  479.       mailbox is "interesting" or not, or if the name is a Noselect
  480.       name, the server SHOULD NOT send either Marked or Unmarked.
  481. Crispin                     Standards Track                    [Page 54]
  482. RFC 2060                       IMAP4rev1                   December 1996
  483.       The hierarchy delimiter is a character used to delimit levels of
  484.       hierarchy in a mailbox name.  A client can use it to create child
  485.       mailboxes, and to search higher or lower levels of naming
  486.       hierarchy.  All children of a top-level hierarchy node MUST use
  487.       the same separator character.  A NIL hierarchy delimiter means
  488.       that no hierarchy exists; the name is a "flat" name.
  489.       The name represents an unambiguous left-to-right hierarchy, and
  490.       MUST be valid for use as a reference in LIST and LSUB commands.
  491.       Unless Noselect is indicated, the name MUST also be valid as an
  492.             argument for commands, such as SELECT, that accept mailbox
  493.       names.
  494.    Example:    S: * LIST (Noselect) "/" ~/Mail/foo
  495. 7.2.3.  LSUB Response
  496.    Contents:   name attributes
  497.                hierarchy delimiter
  498.                name
  499.       The LSUB response occurs as a result of an LSUB command.  It
  500.       returns a single name that matches the LSUB specification.  There
  501.       can be multiple LSUB responses for a single LSUB command.  The
  502.       data is identical in format to the LIST response.
  503.    Example:    S: * LSUB () "." #news.comp.mail.misc
  504. 7.2.4   STATUS Response
  505.    Contents:   name
  506.                status parenthesized list
  507.       The STATUS response occurs as a result of an STATUS command.  It
  508.       returns the mailbox name that matches the STATUS specification and
  509.       the requested mailbox status information.
  510.    Example:    S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)
  511. 7.2.5.  SEARCH Response
  512.    Contents:   zero or more numbers
  513. Crispin                     Standards Track                    [Page 55]
  514. RFC 2060                       IMAP4rev1                   December 1996
  515.       The SEARCH response occurs as a result of a SEARCH or UID SEARCH
  516.       command.  The number(s) refer to those messages that match the
  517.       search criteria.  For SEARCH, these are message sequence numbers;
  518.       for UID SEARCH, these are unique identifiers.  Each number is
  519.       delimited by a space.
  520.    Example:    S: * SEARCH 2 3 6
  521. 7.2.6.  FLAGS Response
  522.    Contents:   flag parenthesized list
  523.       The FLAGS response occurs as a result of a SELECT or EXAMINE
  524.       command.  The flag parenthesized list identifies the flags (at a
  525.       minimum, the system-defined flags) that are applicable for this
  526.       mailbox.  Flags other than the system flags can also exist,
  527.       depending on server implementation.
  528.       The update from the FLAGS response MUST be recorded by the client.
  529.    Example:    S: * FLAGS (Answered Flagged Deleted Seen Draft)
  530. 7.3.    Server Responses - Mailbox Size
  531.    These responses are always untagged.  This is how changes in the size
  532.    of the mailbox are trasnmitted from the server to the client.
  533.    Immediately following the "*" token is a number that represents a
  534.    message count.
  535. 7.3.1.  EXISTS Response
  536.    Contents:   none
  537.       The EXISTS response reports the number of messages in the mailbox.
  538.       This response occurs as a result of a SELECT or EXAMINE command,
  539.       and if the size of the mailbox changes (e.g. new mail).
  540.       The update from the EXISTS response MUST be recorded by the
  541.       client.
  542.    Example:    S: * 23 EXISTS
  543. Crispin                     Standards Track                    [Page 56]
  544. RFC 2060                       IMAP4rev1                   December 1996
  545. 7.3.2.  RECENT Response
  546.       Contents:   none
  547.       The RECENT response reports the number of messages with the
  548.       Recent flag set.  This response occurs as a result of a SELECT or
  549.       EXAMINE command, and if the size of the mailbox changes (e.g. new
  550.       mail).
  551.          Note: It is not guaranteed that the message sequence numbers of
  552.          recent messages will be a contiguous range of the highest n
  553.          messages in the mailbox (where n is the value reported by the
  554.          RECENT response).  Examples of situations in which this is not
  555.          the case are: multiple clients having the same mailbox open
  556.          (the first session to be notified will see it as recent, others
  557.          will probably see it as non-recent), and when the mailbox is
  558.          re-ordered by a non-IMAP agent.
  559.          The only reliable way to identify recent messages is to look at
  560.          message flags to see which have the Recent flag set, or to do
  561.          a SEARCH RECENT.
  562.          The update from the RECENT response MUST be recorded by the
  563.          client.
  564.    Example:    S: * 5 RECENT
  565. 7.4.    Server Responses - Message Status
  566.    These responses are always untagged.  This is how message data are
  567.    transmitted from the server to the client, often as a result of a
  568.    command with the same name.  Immediately following the "*" token is a
  569.    number that represents a message sequence number.
  570. 7.4.1.  EXPUNGE Response
  571.    Contents:   none
  572.       The EXPUNGE response reports that the specified message sequence
  573.       number has been permanently removed from the mailbox.  The message
  574.       sequence number for each successive message in the mailbox is
  575.       immediately decremented by 1, and this decrement is reflected in
  576.       message sequence numbers in subsequent responses (including other
  577.       untagged EXPUNGE responses).
  578.       As a result of the immediate decrement rule, message sequence
  579.       numbers that appear in a set of successive EXPUNGE responses
  580.       depend upon whether the messages are removed starting from lower
  581. Crispin                     Standards Track                    [Page 57]
  582. RFC 2060                       IMAP4rev1                   December 1996
  583.       numbers to higher numbers, or from higher numbers to lower
  584.       numbers.  For example, if the last 5 messages in a 9-message
  585.       mailbox are expunged; a "lower to higher" server will send five
  586.       untagged EXPUNGE responses for message sequence number 5, whereas
  587.       a "higher to lower server" will send successive untagged EXPUNGE
  588.       responses for message sequence numbers 9, 8, 7, 6, and 5.
  589.       An EXPUNGE response MUST NOT be sent when no command is in
  590.       progress; nor while responding to a FETCH, STORE, or SEARCH
  591.       command.  This rule is necessary to prevent a loss of
  592.       synchronization of message sequence numbers between client and
  593.       server.
  594.       The update from the EXPUNGE response MUST be recorded by the
  595.       client.
  596.    Example:    S: * 44 EXPUNGE
  597. 7.4.2.  FETCH Response
  598.    Contents:   message data
  599.       The FETCH response returns data about a message to the client.
  600.       The data are pairs of data item names and their values in
  601.       parentheses.  This response occurs as the result of a FETCH or
  602.       STORE command, as well as by unilateral server decision (e.g. flag
  603.       updates).
  604.       The current data items are:
  605.       BODY           A form of BODYSTRUCTURE without extension data.
  606.       BODY[<section>]<<origin_octet>>
  607.                      A string expressing the body contents of the
  608.                      specified section.  The string SHOULD be
  609.                      interpreted by the client according to the content
  610.                      transfer encoding, body type, and subtype.
  611.                      If the origin octet is specified, this string is a
  612.                      substring of the entire body contents, starting at
  613.                      that origin octet.  This means that BODY[]<0> MAY
  614.                      be truncated, but BODY[] is NEVER truncated.
  615.                      8-bit textual data is permitted if a [CHARSET]
  616.                      identifier is part of the body parameter
  617.                      parenthesized list for this section.  Note that
  618.                      headers (part specifiers HEADER or MIME, or the
  619.                      header portion of a MESSAGE/RFC822 part), MUST be
  620. Crispin                     Standards Track                    [Page 58]
  621. RFC 2060                       IMAP4rev1                   December 1996
  622.                      7-bit; 8-bit characters are not permitted in
  623.                      headers.  Note also that the blank line at the end
  624.                      of the header is always included in header data.
  625.                      Non-textual data such as binary data MUST be
  626.                      transfer encoded into a textual form such as BASE64
  627.                      prior to being sent to the client.  To derive the
  628.                      original binary data, the client MUST decode the
  629.                      transfer encoded string.
  630.       BODYSTRUCTURE  A parenthesized list that describes the [MIME-IMB]
  631.                      body structure of a message.  This is computed by
  632.                      the server by parsing the [MIME-IMB] header fields,
  633.                      defaulting various fields as necessary.
  634.                      For example, a simple text message of 48 lines and
  635.                      2279 octets can have a body structure of: ("TEXT"
  636.                      "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 2279
  637.                      48)
  638.                      Multiple parts are indicated by parenthesis
  639.                      nesting.  Instead of a body type as the first
  640.                      element of the parenthesized list there is a nested
  641.                      body.  The second element of the parenthesized list
  642.                      is the multipart subtype (mixed, digest, parallel,
  643.                      alternative, etc.).
  644.                      For example, a two part message consisting of a
  645.                      text and a BASE645-encoded text attachment can have
  646.                      a body structure of: (("TEXT" "PLAIN" ("CHARSET"
  647.                      "US-ASCII") NIL NIL "7BIT" 1152 23)("TEXT" "PLAIN"
  648.                      ("CHARSET" "US-ASCII" "NAME" "cc.diff")
  649.                      "<960723163407.20117h@cac.washington.edu>"
  650.                      "Compiler diff" "BASE64" 4554 73) "MIXED"))
  651.                      Extension data follows the multipart subtype.
  652.                      Extension data is never returned with the BODY
  653.                      fetch, but can be returned with a BODYSTRUCTURE
  654.                      fetch.  Extension data, if present, MUST be in the
  655.                      defined order.
  656.                      The extension data of a multipart body part are in
  657.                      the following order:
  658.                      body parameter parenthesized list
  659.                         A parenthesized list of attribute/value pairs
  660.                         [e.g. ("foo" "bar" "baz" "rag") where "bar" is
  661.                         the value of "foo" and "rag" is the value of
  662. Crispin                     Standards Track                    [Page 59]
  663. RFC 2060                       IMAP4rev1                   December 1996
  664.                         "baz"] as defined in [MIME-IMB].
  665.                      body disposition
  666.                         A parenthesized list, consisting of a
  667.                         disposition type string followed by a
  668.                         parenthesized list of disposition
  669.                         attribute/value pairs.  The disposition type and
  670.                         attribute names will be defined in a future
  671.                         standards-track revision to [DISPOSITION].
  672.                      body language
  673.                         A string or parenthesized list giving the body
  674.                         language value as defined in [LANGUAGE-TAGS].
  675.                      Any following extension data are not yet defined in
  676.                      this version of the protocol.  Such extension data
  677.                      can consist of zero or more NILs, strings, numbers,
  678.                      or potentially nested parenthesized lists of such
  679.                      data.  Client implementations that do a
  680.                      BODYSTRUCTURE fetch MUST be prepared to accept such
  681.                      extension data.  Server implementations MUST NOT
  682.                      send such extension data until it has been defined
  683.                      by a revision of this protocol.
  684.                      The basic fields of a non-multipart body part are
  685.                      in the following order:
  686.                      body type
  687.                         A string giving the content media type name as
  688.                         defined in [MIME-IMB].
  689.                      body subtype
  690.                         A string giving the content subtype name as
  691.                         defined in [MIME-IMB].
  692.                      body parameter parenthesized list
  693.                         A parenthesized list of attribute/value pairs
  694.                         [e.g. ("foo" "bar" "baz" "rag") where "bar" is
  695.                         the value of "foo" and "rag" is the value of
  696.                         "baz"] as defined in [MIME-IMB].
  697.                      body id
  698.                         A string giving the content id as defined in
  699.                         [MIME-IMB].
  700.                      body description
  701.                         A string giving the content description as
  702.                         defined in [MIME-IMB].
  703. Crispin                     Standards Track                    [Page 60]
  704. RFC 2060                       IMAP4rev1                   December 1996
  705.                      body encoding
  706.                         A string giving the content transfer encoding as
  707.                         defined in [MIME-IMB].
  708.                      body size
  709.                         A number giving the size of the body in octets.
  710.                         Note that this size is the size in its transfer
  711.                         encoding and not the resulting size after any
  712.                         decoding.
  713.                      A body type of type MESSAGE and subtype RFC822
  714.                      contains, immediately after the basic fields, the
  715.                      envelope structure, body structure, and size in
  716.                      text lines of the encapsulated message.
  717.                      A body type of type TEXT contains, immediately
  718.                      after the basic fields, the size of the body in
  719.                      text lines.  Note that this size is the size in its
  720.                      content transfer encoding and not the resulting
  721.                      size after any decoding.
  722.                      Extension data follows the basic fields and the
  723.                      type-specific fields listed above.  Extension data
  724.                      is never returned with the BODY fetch, but can be
  725.                      returned with a BODYSTRUCTURE fetch.  Extension
  726.                      data, if present, MUST be in the defined order.
  727.                      The extension data of a non-multipart body part are
  728.                      in the following order:
  729.                      body MD5
  730.                         A string giving the body MD5 value as defined in
  731.                         [MD5].
  732.                      body disposition
  733.                         A parenthesized list with the same content and
  734.                         function as the body disposition for a multipart
  735.                         body part.
  736.                      body language
  737.                         A string or parenthesized list giving the body
  738.                         language value as defined in [LANGUAGE-TAGS].
  739.                      Any following extension data are not yet defined in
  740.                      this version of the protocol, and would be as
  741.                      described above under multipart extension data.
  742. Crispin                     Standards Track                    [Page 61]
  743. RFC 2060                       IMAP4rev1                   December 1996
  744.       ENVELOPE       A parenthesized list that describes the envelope
  745.                      structure of a message.  This is computed by the
  746.                      server by parsing the [RFC-822] header into the
  747.                      component parts, defaulting various fields as
  748.                      necessary.
  749.                      The fields of the envelope structure are in the
  750.                      following order: date, subject, from, sender,
  751.                      reply-to, to, cc, bcc, in-reply-to, and message-id.
  752.                      The date, subject, in-reply-to, and message-id
  753.                      fields are strings.  The from, sender, reply-to,
  754.                      to, cc, and bcc fields are parenthesized lists of
  755.                      address structures.
  756.                      An address structure is a parenthesized list that
  757.                      describes an electronic mail address.  The fields
  758.                      of an address structure are in the following order:
  759.                      personal name, [SMTP] at-domain-list (source
  760.                      route), mailbox name, and host name.
  761.                      [RFC-822] group syntax is indicated by a special
  762.                      form of address structure in which the host name
  763.                      field is NIL.  If the mailbox name field is also
  764.                      NIL, this is an end of group marker (semi-colon in
  765.                      RFC 822 syntax).  If the mailbox name field is
  766.                      non-NIL, this is a start of group marker, and the
  767.                      mailbox name field holds the group name phrase.
  768.                      Any field of an envelope or address structure that
  769.                      is not applicable is presented as NIL.  Note that
  770.                      the server MUST default the reply-to and sender
  771.                      fields from the from field; a client is not
  772.                      expected to know to do this.
  773.       FLAGS          A parenthesized list of flags that are set for this
  774.                      message.
  775.       INTERNALDATE   A string representing the internal date of the
  776.                      message.
  777.       RFC822         Equivalent to BODY[].
  778.       RFC822.HEADER  Equivalent to BODY.PEEK[HEADER].
  779.       RFC822.SIZE    A number expressing the [RFC-822] size of the
  780.                      message.
  781.       RFC822.TEXT    Equivalent to BODY[TEXT].
  782. Crispin                     Standards Track                    [Page 62]
  783. RFC 2060                       IMAP4rev1                   December 1996
  784.       UID            A number expressing the unique identifier of the
  785.                      message.
  786.    Example:    S: * 23 FETCH (FLAGS (Seen) RFC822.SIZE 44827)
  787. 7.5.    Server Responses - Command Continuation Request
  788.    The command continuation request response is indicated by a "+" token
  789.    instead of a tag.  This form of response indicates that the server is
  790.    ready to accept the continuation of a command from the client.  The
  791.    remainder of this response is a line of text.
  792.    This response is used in the AUTHORIZATION command to transmit server
  793.    data to the client, and request additional client data.  This
  794.    response is also used if an argument to any command is a literal.
  795.    The client is not permitted to send the octets of the literal unless
  796.    the server indicates that it expects it.  This permits the server to
  797.    process commands and reject errors on a line-by-line basis.  The
  798.    remainder of the command, including the CRLF that terminates a
  799.    command, follows the octets of the literal.  If there are any
  800.    additional command arguments the literal octets are followed by a
  801.    space and those arguments.
  802.    Example:    C: A001 LOGIN {11}
  803.                S: + Ready for additional command text
  804.                C: FRED FOOBAR {7}
  805.                S: + Ready for additional command text
  806.                C: fat man
  807.                S: A001 OK LOGIN completed
  808.                C: A044 BLURDYBLOOP {102856}
  809.                S: A044 BAD No such command as "BLURDYBLOOP"
  810. 8.      Sample IMAP4rev1 connection
  811.    The following is a transcript of an IMAP4rev1 connection.  A long
  812.    line in this sample is broken for editorial clarity.
  813. S:   * OK IMAP4rev1 Service Ready
  814. C:   a001 login mrc secret
  815. S:   a001 OK LOGIN completed
  816. C:   a002 select inbox
  817. S:   * 18 EXISTS
  818. S:   * FLAGS (Answered Flagged Deleted Seen Draft)
  819. S:   * 2 RECENT
  820. S:   * OK [UNSEEN 17] Message 17 is the first unseen message
  821. S:   * OK [UIDVALIDITY 3857529045] UIDs valid
  822. Crispin                     Standards Track                    [Page 63]
  823. RFC 2060                       IMAP4rev1                   December 1996
  824. S:   a002 OK [READ-WRITE] SELECT completed
  825. C:   a003 fetch 12 full
  826. S:   * 12 FETCH (FLAGS (Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700"
  827.       RFC822.SIZE 4286 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)"
  828.       "IMAP4rev1 WG mtg summary and minutes"
  829.       (("Terry Gray" NIL "gray" "cac.washington.edu"))
  830.       (("Terry Gray" NIL "gray" "cac.washington.edu"))
  831.       (("Terry Gray" NIL "gray" "cac.washington.edu"))
  832.       ((NIL NIL "imap" "cac.washington.edu"))
  833.       ((NIL NIL "minutes" "CNRI.Reston.VA.US")
  834.       ("John Klensin" NIL "KLENSIN" "INFOODS.MIT.EDU")) NIL NIL
  835.       "<B27397-0100000@cac.washington.edu>")
  836.        BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92))
  837. S:    a003 OK FETCH completed
  838. C:    a004 fetch 12 body[header]
  839. S:    * 12 FETCH (BODY[HEADER] {350}
  840. S:    Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)
  841. S:    From: Terry Gray <gray@cac.washington.edu>
  842. S:    Subject: IMAP4rev1 WG mtg summary and minutes
  843. S:    To: imap@cac.washington.edu
  844. S:    cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@INFOODS.MIT.EDU>
  845. S:    Message-Id: <B27397-0100000@cac.washington.edu>
  846. S:    MIME-Version: 1.0
  847. S:    Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
  848. S:
  849. S:    )
  850. S:    a004 OK FETCH completed
  851. C:    a005 store 12 +flags deleted
  852. S:    * 12 FETCH (FLAGS (Seen Deleted))
  853. S:    a005 OK +FLAGS completed
  854. C:    a006 logout
  855. S:    * BYE IMAP4rev1 server terminating connection
  856. S:    a006 OK LOGOUT completed
  857. 9.      Formal Syntax
  858.    The following syntax specification uses the augmented Backus-Naur
  859.    Form (BNF) notation as specified in [RFC-822] with one exception; the
  860.    delimiter used with the "#" construct is a single space (SPACE) and
  861.    not one or more commas.
  862.    In the case of alternative or optional rules in which a later rule
  863.    overlaps an earlier rule, the rule which is listed earlier MUST take
  864.    priority.  For example, "Seen" when parsed as a flag is the Seen
  865.    flag name and not a flag_extension, even though "Seen" could be
  866.    parsed as a flag_extension.  Some, but not all, instances of this
  867.    rule are noted below.
  868. Crispin                     Standards Track                    [Page 64]
  869. RFC 2060                       IMAP4rev1                   December 1996
  870.    Except as noted otherwise, all alphabetic characters are case-
  871.    insensitive.  The use of upper or lower case characters to define
  872.    token strings is for editorial clarity only.  Implementations MUST
  873.    accept these strings in a case-insensitive fashion.
  874. address         ::= "(" addr_name SPACE addr_adl SPACE addr_mailbox
  875.                     SPACE addr_host ")"
  876. addr_adl        ::= nstring
  877.                     ;; Holds route from [RFC-822] route-addr if
  878.                     ;; non-NIL
  879. addr_host       ::= nstring
  880.                     ;; NIL indicates [RFC-822] group syntax.
  881.                     ;; Otherwise, holds [RFC-822] domain name
  882. addr_mailbox    ::= nstring
  883.                     ;; NIL indicates end of [RFC-822] group; if
  884.                     ;; non-NIL and addr_host is NIL, holds
  885.                     ;; [RFC-822] group name.
  886.                     ;; Otherwise, holds [RFC-822] local-part
  887. addr_name       ::= nstring
  888.                     ;; Holds phrase from [RFC-822] mailbox if
  889.                     ;; non-NIL
  890. alpha           ::= "A" / "B" / "C" / "D" / "E" / "F" / "G" / "H" /
  891.                     "I" / "J" / "K" / "L" / "M" / "N" / "O" / "P" /
  892.                     "Q" / "R" / "S" / "T" / "U" / "V" / "W" / "X" /
  893.                     "Y" / "Z" /
  894.                     "a" / "b" / "c" / "d" / "e" / "f" / "g" / "h" /
  895.                     "i" / "j" / "k" / "l" / "m" / "n" / "o" / "p" /
  896.                     "q" / "r" / "s" / "t" / "u" / "v" / "w" / "x" /
  897.                     "y" / "z"
  898.                     ;; Case-sensitive
  899. append          ::= "APPEND" SPACE mailbox [SPACE flag_list]
  900.                     [SPACE date_time] SPACE literal
  901. astring         ::= atom / string
  902. atom            ::= 1*ATOM_CHAR
  903. ATOM_CHAR       ::= <any CHAR except atom_specials>
  904. atom_specials   ::= "(" / ")" / "{" / SPACE / CTL / list_wildcards /
  905.                     quoted_specials
  906. Crispin                     Standards Track                    [Page 65]
  907. RFC 2060                       IMAP4rev1                   December 1996
  908. authenticate    ::= "AUTHENTICATE" SPACE auth_type *(CRLF base64)
  909. auth_type       ::= atom
  910.                     ;; Defined by [IMAP-AUTH]
  911. base64          ::= *(4base64_char) [base64_terminal]
  912. base64_char     ::= alpha / digit / "+" / "/"
  913. base64_terminal ::= (2base64_char "==") / (3base64_char "=")
  914. body            ::= "(" body_type_1part / body_type_mpart ")"
  915. body_extension  ::= nstring / number / "(" 1#body_extension ")"
  916.                     ;; Future expansion.  Client implementations
  917.                     ;; MUST accept body_extension fields.  Server
  918.                     ;; implementations MUST NOT generate
  919.                     ;; body_extension fields except as defined by
  920.                     ;; future standard or standards-track
  921.                     ;; revisions of this specification.
  922. body_ext_1part  ::= body_fld_md5 [SPACE body_fld_dsp
  923.                     [SPACE body_fld_lang
  924.                     [SPACE 1#body_extension]]]
  925.                     ;; MUST NOT be returned on non-extensible
  926.                     ;; "BODY" fetch
  927. body_ext_mpart  ::= body_fld_param
  928.                     [SPACE body_fld_dsp SPACE body_fld_lang
  929.                     [SPACE 1#body_extension]]
  930.                     ;; MUST NOT be returned on non-extensible
  931.                     ;; "BODY" fetch
  932. body_fields     ::= body_fld_param SPACE body_fld_id SPACE
  933.                     body_fld_desc SPACE body_fld_enc SPACE
  934.                     body_fld_octets
  935. body_fld_desc   ::= nstring
  936. body_fld_dsp    ::= "(" string SPACE body_fld_param ")" / nil
  937. body_fld_enc    ::= (<"> ("7BIT" / "8BIT" / "BINARY" / "BASE64"/
  938.                     "QUOTED-PRINTABLE") <">) / string
  939. body_fld_id     ::= nstring
  940. body_fld_lang   ::= nstring / "(" 1#string ")"
  941. Crispin                     Standards Track                    [Page 66]
  942. RFC 2060                       IMAP4rev1                   December 1996
  943. body_fld_lines  ::= number
  944. body_fld_md5    ::= nstring
  945. body_fld_octets ::= number
  946. body_fld_param  ::= "(" 1#(string SPACE string) ")" / nil
  947. body_type_1part ::= (body_type_basic / body_type_msg / body_type_text)
  948.                     [SPACE body_ext_1part]
  949. body_type_basic ::= media_basic SPACE body_fields
  950.                     ;; MESSAGE subtype MUST NOT be "RFC822"
  951. body_type_mpart ::= 1*body SPACE media_subtype
  952.                     [SPACE body_ext_mpart]
  953. body_type_msg   ::= media_message SPACE body_fields SPACE envelope
  954.                     SPACE body SPACE body_fld_lines
  955. body_type_text  ::= media_text SPACE body_fields SPACE body_fld_lines
  956. capability      ::= "AUTH=" auth_type / atom
  957.                     ;; New capabilities MUST begin with "X" or be
  958.                     ;; registered with IANA as standard or
  959.                     ;; standards-track
  960. capability_data ::= "CAPABILITY" SPACE [1#capability SPACE] "IMAP4rev1"
  961.                     [SPACE 1#capability]
  962.                     ;; IMAP4rev1 servers which offer RFC 1730
  963.                     ;; compatibility MUST list "IMAP4" as the first
  964.                     ;; capability.
  965. CHAR            ::= <any 7-bit US-ASCII character except NUL,
  966.                      0x01 - 0x7f>
  967. CHAR8           ::= <any 8-bit octet except NUL, 0x01 - 0xff>
  968. command         ::= tag SPACE (command_any / command_auth /
  969.                     command_nonauth / command_select) CRLF
  970.                     ;; Modal based on state
  971. command_any     ::= "CAPABILITY" / "LOGOUT" / "NOOP" / x_command
  972.                     ;; Valid in all states
  973. command_auth    ::= append / create / delete / examine / list / lsub /
  974.                     rename / select / status / subscribe / unsubscribe
  975.                     ;; Valid only in Authenticated or Selected state
  976. Crispin                     Standards Track                    [Page 67]
  977. RFC 2060                       IMAP4rev1                   December 1996
  978. command_nonauth ::= login / authenticate
  979.                     ;; Valid only when in Non-Authenticated state
  980. command_select  ::= "CHECK" / "CLOSE" / "EXPUNGE" /
  981.                      copy / fetch / store / uid / search
  982.                     ;; Valid only when in Selected state
  983. continue_req    ::= "+" SPACE (resp_text / base64)
  984. copy            ::= "COPY" SPACE set SPACE mailbox
  985. CR              ::= <ASCII CR, carriage return, 0x0D>
  986. create          ::= "CREATE" SPACE mailbox
  987.                     ;; Use of INBOX gives a NO error
  988. CRLF            ::= CR LF
  989. CTL             ::= <any ASCII control character and DEL,
  990.                         0x00 - 0x1f, 0x7f>
  991. date            ::= date_text / <"> date_text <">
  992. date_day        ::= 1*2digit
  993.                     ;; Day of month
  994. date_day_fixed  ::= (SPACE digit) / 2digit
  995.                     ;; Fixed-format version of date_day
  996. date_month      ::= "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" /
  997.                     "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
  998. date_text       ::= date_day "-" date_month "-" date_year
  999. date_year       ::= 4digit
  1000. date_time       ::= <"> date_day_fixed "-" date_month "-" date_year
  1001.                     SPACE time SPACE zone <">
  1002. delete          ::= "DELETE" SPACE mailbox
  1003.                     ;; Use of INBOX gives a NO error
  1004. digit           ::= "0" / digit_nz
  1005. digit_nz        ::= "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" /
  1006.                     "9"
  1007. Crispin                     Standards Track                    [Page 68]
  1008. RFC 2060                       IMAP4rev1                   December 1996
  1009. envelope        ::= "(" env_date SPACE env_subject SPACE env_from
  1010.                     SPACE env_sender SPACE env_reply_to SPACE env_to
  1011.                     SPACE env_cc SPACE env_bcc SPACE env_in_reply_to
  1012.                     SPACE env_message_id ")"
  1013. env_bcc         ::= "(" 1*address ")" / nil
  1014. env_cc          ::= "(" 1*address ")" / nil
  1015. env_date        ::= nstring
  1016. env_from        ::= "(" 1*address ")" / nil
  1017. env_in_reply_to ::= nstring
  1018. env_message_id  ::= nstring
  1019. env_reply_to    ::= "(" 1*address ")" / nil
  1020. env_sender      ::= "(" 1*address ")" / nil
  1021. env_subject     ::= nstring
  1022. env_to          ::= "(" 1*address ")" / nil
  1023. examine         ::= "EXAMINE" SPACE mailbox
  1024. fetch           ::= "FETCH" SPACE set SPACE ("ALL" / "FULL" /
  1025.                     "FAST" / fetch_att / "(" 1#fetch_att ")")
  1026. fetch_att       ::= "ENVELOPE" / "FLAGS" / "INTERNALDATE" /
  1027.                     "RFC822" [".HEADER" / ".SIZE" / ".TEXT"] /
  1028.                     "BODY" ["STRUCTURE"] / "UID" /
  1029.                     "BODY" [".PEEK"] section
  1030.                     ["<" number "." nz_number ">"]
  1031. flag            ::= "Answered" / "Flagged" / "Deleted" /
  1032.                     "Seen" / "Draft" / flag_keyword / flag_extension
  1033. flag_extension  ::= "" atom
  1034.                     ;; Future expansion.  Client implementations
  1035.                     ;; MUST accept flag_extension flags.  Server
  1036.                     ;; implementations MUST NOT generate
  1037.                     ;; flag_extension flags except as defined by
  1038.                     ;; future standard or standards-track
  1039.                     ;; revisions of this specification.
  1040. flag_keyword    ::= atom
  1041. Crispin                     Standards Track                    [Page 69]
  1042. RFC 2060                       IMAP4rev1                   December 1996
  1043. flag_list       ::= "(" #flag ")"
  1044. greeting        ::= "*" SPACE (resp_cond_auth / resp_cond_bye) CRLF
  1045. header_fld_name ::= astring
  1046. header_list     ::= "(" 1#header_fld_name ")"
  1047. LF              ::= <ASCII LF, line feed, 0x0A>
  1048. list            ::= "LIST" SPACE mailbox SPACE list_mailbox
  1049. list_mailbox    ::= 1*(ATOM_CHAR / list_wildcards) / string
  1050. list_wildcards  ::= "%" / "*"
  1051. literal         ::= "{" number "}" CRLF *CHAR8
  1052.                     ;; Number represents the number of CHAR8 octets
  1053. login           ::= "LOGIN" SPACE userid SPACE password
  1054. lsub            ::= "LSUB" SPACE mailbox SPACE list_mailbox
  1055. mailbox         ::= "INBOX" / astring
  1056.                     ;; INBOX is case-insensitive.  All case variants of
  1057.                     ;; INBOX (e.g. "iNbOx") MUST be interpreted as INBOX
  1058.                     ;; not as an astring.  Refer to section 5.1 for
  1059.                     ;; further semantic details of mailbox names.
  1060. mailbox_data    ::=  "FLAGS" SPACE flag_list /
  1061.                      "LIST" SPACE mailbox_list /
  1062.                      "LSUB" SPACE mailbox_list /
  1063.                      "MAILBOX" SPACE text /
  1064.                      "SEARCH" [SPACE 1#nz_number] /
  1065.                      "STATUS" SPACE mailbox SPACE
  1066.                      "(" #<status_att number ")" /
  1067.                      number SPACE "EXISTS" / number SPACE "RECENT"
  1068. mailbox_list    ::= "(" #("Marked" / "Noinferiors" /
  1069.                     "Noselect" / "Unmarked" / flag_extension) ")"
  1070.                     SPACE (<"> QUOTED_CHAR <"> / nil) SPACE mailbox
  1071. media_basic     ::= (<"> ("APPLICATION" / "AUDIO" / "IMAGE" /
  1072.                     "MESSAGE" / "VIDEO") <">) / string)
  1073.                     SPACE media_subtype
  1074.                     ;; Defined in [MIME-IMT]
  1075. media_message   ::= <"> "MESSAGE" <"> SPACE <"> "RFC822" <">
  1076. Crispin                     Standards Track                    [Page 70]
  1077. RFC 2060                       IMAP4rev1                   December 1996
  1078.                     ;; Defined in [MIME-IMT]
  1079. media_subtype   ::= string
  1080.                     ;; Defined in [MIME-IMT]
  1081. media_text      ::= <"> "TEXT" <"> SPACE media_subtype
  1082.                     ;; Defined in [MIME-IMT]
  1083. message_data    ::= nz_number SPACE ("EXPUNGE" /
  1084.                                     ("FETCH" SPACE msg_att))
  1085. msg_att         ::= "(" 1#("ENVELOPE" SPACE envelope /
  1086.                     "FLAGS" SPACE "(" #(flag / "Recent") ")" /
  1087.                     "INTERNALDATE" SPACE date_time /
  1088.                     "RFC822" [".HEADER" / ".TEXT"] SPACE nstring /
  1089.                     "RFC822.SIZE" SPACE number /
  1090.                     "BODY" ["STRUCTURE"] SPACE body /
  1091.                     "BODY" section ["<" number ">"] SPACE nstring /
  1092.                     "UID" SPACE uniqueid) ")"
  1093. nil             ::= "NIL"
  1094. nstring         ::= string / nil
  1095. number          ::= 1*digit
  1096.                     ;; Unsigned 32-bit integer
  1097.                     ;; (0 <= n < 4,294,967,296)
  1098. nz_number       ::= digit_nz *digit
  1099.                     ;; Non-zero unsigned 32-bit integer
  1100.                     ;; (0 < n < 4,294,967,296)
  1101. password        ::= astring
  1102. quoted          ::= <"> *QUOTED_CHAR <">
  1103. QUOTED_CHAR     ::= <any TEXT_CHAR except quoted_specials> /
  1104.                     "" quoted_specials
  1105. quoted_specials ::= <"> / ""
  1106. rename          ::= "RENAME" SPACE mailbox SPACE mailbox
  1107.                     ;; Use of INBOX as a destination gives a NO error
  1108. response        ::= *(continue_req / response_data) response_done
  1109. response_data   ::= "*" SPACE (resp_cond_state / resp_cond_bye /
  1110.                     mailbox_data / message_data / capability_data)
  1111. Crispin                     Standards Track                    [Page 71]
  1112. RFC 2060                       IMAP4rev1                   December 1996
  1113.                     CRLF
  1114. response_done   ::= response_tagged / response_fatal
  1115. response_fatal  ::= "*" SPACE resp_cond_bye CRLF
  1116.                     ;; Server closes connection immediately
  1117. response_tagged ::= tag SPACE resp_cond_state CRLF
  1118. resp_cond_auth  ::= ("OK" / "PREAUTH") SPACE resp_text
  1119.                     ;; Authentication condition
  1120. resp_cond_bye   ::= "BYE" SPACE resp_text
  1121. resp_cond_state ::= ("OK" / "NO" / "BAD") SPACE resp_text
  1122.                     ;; Status condition
  1123. resp_text       ::= ["[" resp_text_code "]" SPACE] (text_mime2 / text)
  1124.                     ;; text SHOULD NOT begin with "[" or "="
  1125. resp_text_code  ::= "ALERT" / "PARSE" /
  1126.                     "PERMANENTFLAGS" SPACE "(" #(flag / "*") ")" /
  1127.                     "READ-ONLY" / "READ-WRITE" / "TRYCREATE" /
  1128.                     "UIDVALIDITY" SPACE nz_number /
  1129.                     "UNSEEN" SPACE nz_number /
  1130.                     atom [SPACE 1*<any TEXT_CHAR except "]">]
  1131. search          ::= "SEARCH" SPACE ["CHARSET" SPACE astring SPACE]
  1132.                     1#search_key
  1133.                     ;; [CHARSET] MUST be registered with IANA
  1134. search_key      ::= "ALL" / "ANSWERED" / "BCC" SPACE astring /
  1135.                     "BEFORE" SPACE date / "BODY" SPACE astring /
  1136.                     "CC" SPACE astring / "DELETED" / "FLAGGED" /
  1137.                     "FROM" SPACE astring /
  1138.                     "KEYWORD" SPACE flag_keyword / "NEW" / "OLD" /
  1139.                     "ON" SPACE date / "RECENT" / "SEEN" /
  1140.                     "SINCE" SPACE date / "SUBJECT" SPACE astring /
  1141.                     "TEXT" SPACE astring / "TO" SPACE astring /
  1142.                     "UNANSWERED" / "UNDELETED" / "UNFLAGGED" /
  1143.                     "UNKEYWORD" SPACE flag_keyword / "UNSEEN" /
  1144.                     ;; Above this line were in [IMAP2]
  1145.                     "DRAFT" /
  1146.                     "HEADER" SPACE header_fld_name SPACE astring /
  1147.                     "LARGER" SPACE number / "NOT" SPACE search_key /
  1148.                     "OR" SPACE search_key SPACE search_key /
  1149.                     "SENTBEFORE" SPACE date / "SENTON" SPACE date /
  1150.                     "SENTSINCE" SPACE date / "SMALLER" SPACE number /
  1151. Crispin                     Standards Track                    [Page 72]
  1152. RFC 2060                       IMAP4rev1                   December 1996
  1153.                     "UID" SPACE set / "UNDRAFT" / set /
  1154.                     "(" 1#search_key ")"
  1155. section         ::= "[" [section_text / (nz_number *["." nz_number]
  1156.                     ["." (section_text / "MIME")])] "]"
  1157. section_text    ::= "HEADER" / "HEADER.FIELDS" [".NOT"]
  1158.                     SPACE header_list / "TEXT"
  1159. select          ::= "SELECT" SPACE mailbox
  1160. sequence_num    ::= nz_number / "*"
  1161.                     ;; * is the largest number in use.  For message
  1162.                     ;; sequence numbers, it is the number of messages
  1163.                     ;; in the mailbox.  For unique identifiers, it is
  1164.                     ;; the unique identifier of the last message in
  1165.                     ;; the mailbox.
  1166. set             ::= sequence_num / (sequence_num ":" sequence_num) /
  1167.                     (set "," set)
  1168.                     ;; Identifies a set of messages.  For message
  1169.                     ;; sequence numbers, these are consecutive
  1170.                     ;; numbers from 1 to the number of messages in
  1171.                     ;; the mailbox
  1172.                     ;; Comma delimits individual numbers, colon
  1173.                     ;; delimits between two numbers inclusive.
  1174.                     ;; Example: 2,4:7,9,12:* is 2,4,5,6,7,9,12,13,
  1175.                     ;; 14,15 for a mailbox with 15 messages.
  1176. SPACE           ::= <ASCII SP, space, 0x20>
  1177. status          ::= "STATUS" SPACE mailbox SPACE "(" 1#status_att ")"
  1178. status_att      ::= "MESSAGES" / "RECENT" / "UIDNEXT" / "UIDVALIDITY" /
  1179.                     "UNSEEN"
  1180. store           ::= "STORE" SPACE set SPACE store_att_flags
  1181. store_att_flags ::= (["+" / "-"] "FLAGS" [".SILENT"]) SPACE
  1182.                     (flag_list / #flag)
  1183. string          ::= quoted / literal
  1184. subscribe       ::= "SUBSCRIBE" SPACE mailbox
  1185. tag             ::= 1*<any ATOM_CHAR except "+">
  1186. text            ::= 1*TEXT_CHAR
  1187. Crispin                     Standards Track                    [Page 73]
  1188. RFC 2060                       IMAP4rev1                   December 1996
  1189. text_mime2       ::= "=?" <charset> "?" <encoding> "?"
  1190.                      <encoded-text> "?="
  1191.                      ;; Syntax defined in [MIME-HDRS]
  1192. TEXT_CHAR       ::= <any CHAR except CR and LF>
  1193. time            ::= 2digit ":" 2digit ":" 2digit
  1194.                     ;; Hours minutes seconds
  1195. uid             ::= "UID" SPACE (copy / fetch / search / store)
  1196.                     ;; Unique identifiers used instead of message
  1197.                     ;; sequence numbers
  1198. uniqueid        ::= nz_number
  1199.                     ;; Strictly ascending
  1200. unsubscribe     ::= "UNSUBSCRIBE" SPACE mailbox
  1201. userid          ::= astring
  1202. x_command       ::= "X" atom <experimental command arguments>
  1203. zone            ::= ("+" / "-") 4digit
  1204.                     ;; Signed four-digit value of hhmm representing
  1205.                     ;; hours and minutes west of Greenwich (that is,
  1206.                     ;; (the amount that the given time differs from
  1207.                     ;; Universal Time).  Subtracting the timezone
  1208.                     ;; from the given time will give the UT form.
  1209.                     ;; The Universal Time zone is "+0000".
  1210. 10.     Author's Note
  1211.    This document is a revision or rewrite of earlier documents, and
  1212.    supercedes the protocol specification in those documents: RFC 1730,
  1213.    unpublished IMAP2bis.TXT document, RFC 1176, and RFC 1064.
  1214. 11.     Security Considerations
  1215.    IMAP4rev1 protocol transactions, including electronic mail data, are
  1216.    sent in the clear over the network unless privacy protection is
  1217.    negotiated in the AUTHENTICATE command.
  1218.    A server error message for an AUTHENTICATE command which fails due to
  1219.    invalid credentials SHOULD NOT detail why the credentials are
  1220.    invalid.
  1221.    Use of the LOGIN command sends passwords in the clear.  This can be
  1222.    avoided by using the AUTHENTICATE command instead.
  1223. Crispin                     Standards Track                    [Page 74]
  1224. RFC 2060                       IMAP4rev1                   December 1996
  1225.    A server error message for a failing LOGIN command SHOULD NOT specify
  1226.    that the user name, as opposed to the password, is invalid.
  1227.    Additional security considerations are discussed in the section
  1228.    discussing the AUTHENTICATE and LOGIN commands.
  1229. 12.     Author's Address
  1230.    Mark R. Crispin
  1231.    Networks and Distributed Computing
  1232.    University of Washington
  1233.    4545 15th Aveneue NE
  1234.    Seattle, WA  98105-4527
  1235.    Phone: (206) 543-5762
  1236.    EMail: MRC@CAC.Washington.EDU
  1237. Crispin                     Standards Track                    [Page 75]
  1238. RFC 2060                       IMAP4rev1                   December 1996
  1239. Appendices
  1240. A.      References
  1241. [ACAP] Myers, J. "ACAP -- Application Configuration Access Protocol",
  1242. Work in Progress.
  1243. [CHARSET] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2,
  1244. RFC 1700, USC/Information Sciences Institute, October 1994.
  1245. [DISPOSITION] Troost, R., and Dorner, S., "Communicating Presentation
  1246. Information in Internet Messages: The Content-Disposition Header",
  1247. RFC 1806, June 1995.
  1248. [IMAP-AUTH] Myers, J., "IMAP4 Authentication Mechanism", RFC 1731.
  1249. Carnegie-Mellon University, December 1994.
  1250. [IMAP-COMPAT] Crispin, M., "IMAP4 Compatibility with IMAP2bis", RFC
  1251. 2061, University of Washington, November 1996.
  1252. [IMAP-DISC] Austein, R., "Synchronization Operations for Disconnected
  1253. IMAP4 Clients", Work in Progress.
  1254. [IMAP-HISTORICAL] Crispin, M. "IMAP4 Compatibility with IMAP2 and
  1255. IMAP2bis", RFC 1732, University of Washington, December 1994.
  1256. [IMAP-MODEL] Crispin, M., "Distributed Electronic Mail Models in
  1257. IMAP4", RFC 1733, University of Washington, December 1994.
  1258. [IMAP-OBSOLETE] Crispin, M., "Internet Message Access Protocol -
  1259. Obsolete Syntax", RFC 2062, University of Washington, November 1996.
  1260. [IMAP2] Crispin, M., "Interactive Mail Access Protocol - Version 2",
  1261. RFC 1176, University of Washington, August 1990.
  1262. [LANGUAGE-TAGS] Alvestrand, H., "Tags for the Identification of
  1263. Languages", RFC 1766, March 1995.
  1264. [MD5] Myers, J., and M. Rose, "The Content-MD5 Header Field", RFC
  1265. 1864, October 1995.
  1266. [MIME-IMB] Freed, N., and N. Borenstein, "MIME (Multipurpose Internet
  1267. Mail Extensions) Part One: Format of Internet Message Bodies", RFC
  1268. 2045, November 1996.
  1269. [MIME-IMT] Freed, N., and N. Borenstein, "MIME (Multipurpose
  1270. Internet Mail Extensions) Part Two: Media Types", RFC 2046,
  1271. November 1996.
  1272. Crispin                     Standards Track                    [Page 76]
  1273. RFC 2060                       IMAP4rev1                   December 1996
  1274. [MIME-HDRS] Moore, K., "MIME (Multipurpose Internet Mail Extensions)
  1275. Part Three: Message Header Extensions for Non-ASCII Text", RFC
  1276. 2047, November 1996.
  1277. [RFC-822] Crocker, D., "Standard for the Format of ARPA Internet Text
  1278. Messages", STD 11, RFC 822, University of Delaware, August 1982.
  1279. [SMTP] Postel, J., "Simple Mail Transfer Protocol", STD 10,
  1280. RFC 821, USC/Information Sciences Institute, August 1982.
  1281. [UTF-7] Goldsmith, D., and Davis, M., "UTF-7: A Mail-Safe
  1282. Transformation Format of Unicode", RFC 1642, July 1994.
  1283. B.      Changes from RFC 1730
  1284. 1) The STATUS command has been added.
  1285. 2) Clarify in the formal syntax that the "#" construct can never
  1286. refer to multiple spaces.
  1287. 3) Obsolete syntax has been moved to a separate document.
  1288. 4) The PARTIAL command has been obsoleted.
  1289. 5) The RFC822.HEADER.LINES, RFC822.HEADER.LINES.NOT, RFC822.PEEK, and
  1290. RFC822.TEXT.PEEK fetch attributes have been obsoleted.
  1291. 6) The "<" origin "." size ">" suffix for BODY text attributes has
  1292. been added.
  1293. 7) The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and TEXT part
  1294. specifiers have been added.
  1295. 8) Support for Content-Disposition and Content-Language has been
  1296. added.
  1297. 9) The restriction on fetching nested MULTIPART parts has been
  1298. removed.
  1299. 10) Body part number 0 has been obsoleted.
  1300. 11) Server-supported authenticators are now identified by
  1301. capabilities.
  1302. Crispin                     Standards Track                    [Page 77]
  1303. RFC 2060                       IMAP4rev1                   December 1996
  1304. 12) The capability that identifies this protocol is now called
  1305. "IMAP4rev1".  A server that provides backwards support for RFC 1730
  1306. SHOULD emit the "IMAP4" capability in addition to "IMAP4rev1" in its
  1307. CAPABILITY response.  Because RFC-1730 required "IMAP4" to appear as
  1308. the first capability, it MUST listed first in the response.
  1309. 13) A description of the mailbox name namespace convention has been
  1310. added.
  1311. 14) A description of the international mailbox name convention has
  1312. been added.
  1313. 15) The UID-NEXT and UID-VALIDITY status items are now called UIDNEXT
  1314. and UIDVALIDITY.  This is a change from the IMAP STATUS
  1315. Work in Progress and not from RFC-1730
  1316. 16) Add a clarification that a null mailbox name argument to the LIST
  1317. command returns an untagged LIST response with the hierarchy
  1318. delimiter and root of the reference argument.
  1319. 17) Define terms such as "MUST", "SHOULD", and "MUST NOT".
  1320. 18) Add a section which defines message attributes and more
  1321. thoroughly details the semantics of message sequence numbers, UIDs,
  1322. and flags.
  1323. 19) Add a clarification detailing the circumstances when a client may
  1324. send multiple commands without waiting for a response, and the
  1325. circumstances in which ambiguities may result.
  1326. 20) Add a recommendation on server behavior for DELETE and RENAME
  1327. when inferior hierarchical names of the given name exist.
  1328. 21) Add a clarification that a mailbox name may not be unilaterally
  1329. unsubscribed by the server, even if that mailbox name no longer
  1330. exists.
  1331. 22) Add a clarification that LIST should return its results quickly
  1332. without undue delay.
  1333. 23) Add a clarification that the date_time argument to APPEND sets
  1334. the internal date of the message.
  1335. 24) Add a clarification on APPEND behavior when the target mailbox is
  1336. the currently selected mailbox.
  1337. Crispin                     Standards Track                    [Page 78]
  1338. RFC 2060                       IMAP4rev1                   December 1996
  1339. 25) Add a clarification that external changes to flags should be
  1340. always announced via an untagged FETCH even if the current command is
  1341. a STORE with the ".SILENT" suffix.
  1342. 26) Add a clarification that COPY appends to the target mailbox.
  1343. 27) Add the NEWNAME response code.
  1344. 28) Rewrite the description of the untagged BYE response to clarify
  1345. its semantics.
  1346. 29) Change the reference for the body MD5 to refer to the proper RFC.
  1347. 30) Clarify that the formal syntax contains rules which may overlap,
  1348. and that in the event of such an overlap the rule which occurs first
  1349. takes precedence.
  1350. 31) Correct the definition of body_fld_param.
  1351. 32) More formal syntax for capability_data.
  1352. 33) Clarify that any case variant of "INBOX" must be interpreted as
  1353. INBOX.
  1354. 34) Clarify that the human-readable text in resp_text should not
  1355. begin with "[" or "=".
  1356. 35) Change MIME references to Draft Standard documents.
  1357. 36) Clarify Recent semantics.
  1358. 37) Additional examples.
  1359. C.      Key Word Index
  1360.        +FLAGS <flag list> (store command data item) ...............   45
  1361.        +FLAGS.SILENT <flag list> (store command data item) ........   46
  1362.        -FLAGS <flag list> (store command data item) ...............   46
  1363.        -FLAGS.SILENT <flag list> (store command data item) ........   46
  1364.        ALERT (response code) ......................................   50
  1365.        ALL (fetch item) ...........................................   41
  1366.        ALL (search key) ...........................................   38
  1367.        ANSWERED (search key) ......................................   38
  1368.        APPEND (command) ...........................................   34
  1369.        AUTHENTICATE (command) .....................................   20
  1370.        BAD (response) .............................................   52
  1371.        BCC <string> (search key) ..................................   38
  1372.        BEFORE <date> (search key) .................................   39
  1373. Crispin                     Standards Track                    [Page 79]
  1374. RFC 2060                       IMAP4rev1                   December 1996
  1375.        BODY (fetch item) ..........................................   41
  1376.        BODY (fetch result) ........................................   58
  1377.        BODY <string> (search key) .................................   39
  1378.        BODY.PEEK[<section>]<<partial>> (fetch item) ...............   44
  1379.        BODYSTRUCTURE (fetch item) .................................   44
  1380.        BODYSTRUCTURE (fetch result) ...............................   59
  1381.        BODY[<section>]<<origin_octet>> (fetch result) .............   58
  1382.        BODY[<section>]<<partial>> (fetch item) ....................   41
  1383.        BYE (response) .............................................   52
  1384.        Body Structure (message attribute) .........................   11
  1385.        CAPABILITY (command) .......................................   18
  1386.        CAPABILITY (response) ......................................   53
  1387.        CC <string> (search key) ...................................   39
  1388.        CHECK (command) ............................................   36
  1389.        CLOSE (command) ............................................   36
  1390.        COPY (command) .............................................   46
  1391.        CREATE (command) ...........................................   25
  1392.        DELETE (command) ...........................................   26
  1393.        DELETED (search key) .......................................   39
  1394.        DRAFT (search key) .........................................   39
  1395.        ENVELOPE (fetch item) ......................................   44
  1396.        ENVELOPE (fetch result) ....................................   62
  1397.        EXAMINE (command) ..........................................   24
  1398.        EXISTS (response) ..........................................   56
  1399.        EXPUNGE (command) ..........................................   37
  1400.        EXPUNGE (response) .........................................   57
  1401.        Envelope Structure (message attribute) .....................   11
  1402.        FAST (fetch item) ..........................................   44
  1403.        FETCH (command) ............................................   41
  1404.        FETCH (response) ...........................................   58
  1405.        FLAGGED (search key) .......................................   39
  1406.        FLAGS (fetch item) .........................................   44
  1407.        FLAGS (fetch result) .......................................   62
  1408.        FLAGS (response) ...........................................   56
  1409.        FLAGS <flag list> (store command data item) ................   45
  1410.        FLAGS.SILENT <flag list> (store command data item) .........   45
  1411.        FROM <string> (search key) .................................   39
  1412.        FULL (fetch item) ..........................................   44
  1413.        Flags (message attribute) ..................................    9
  1414.        HEADER (part specifier) ....................................   41
  1415.        HEADER <field-name> <string> (search key) ..................   39
  1416.        HEADER.FIELDS <header_list> (part specifier) ...............   41
  1417.        HEADER.FIELDS.NOT <header_list> (part specifier) ...........   41
  1418.        INTERNALDATE (fetch item) ..................................   44
  1419.        INTERNALDATE (fetch result) ................................   62
  1420.        Internal Date (message attribute) ..........................   10
  1421.        KEYWORD <flag> (search key) ................................   39
  1422.        Keyword (type of flag) .....................................   10
  1423. Crispin                     Standards Track                    [Page 80]
  1424. RFC 2060                       IMAP4rev1                   December 1996
  1425.        LARGER <n> (search key) ....................................   39
  1426.        LIST (command) .............................................   30
  1427.        LIST (response) ............................................   54
  1428.        LOGIN (command) ............................................   22
  1429.        LOGOUT (command) ...........................................   20
  1430.        LSUB (command) .............................................   32
  1431.        LSUB (response) ............................................   55
  1432.        MAY (specification requirement term) .......................    5
  1433.        MESSAGES (status item) .....................................   33
  1434.        MIME (part specifier) ......................................   42
  1435.        MUST (specification requirement term) ......................    4
  1436.        MUST NOT (specification requirement term) ..................    4
  1437.        Message Sequence Number (message attribute) ................    9
  1438.        NEW (search key) ...........................................   39
  1439.        NEWNAME (response code) ....................................   50
  1440.        NO (response) ..............................................   51
  1441.        NOOP (command) .............................................   19
  1442.        NOT <search-key> (search key) ..............................   39
  1443.        OK (response) ..............................................   51
  1444.        OLD (search key) ...........................................   39
  1445.        ON <date> (search key) .....................................   39
  1446.        OPTIONAL (specification requirement term) ..................    5
  1447.        OR <search-key1> <search-key2> (search key) ................   39
  1448.        PARSE (response code) ......................................   50
  1449.        PERMANENTFLAGS (response code) .............................   50
  1450.        PREAUTH (response) .........................................   52
  1451.        Permanent Flag (class of flag) .............................   10
  1452.        READ-ONLY (response code) ..................................   50
  1453.        READ-WRITE (response code) .................................   50
  1454.        RECENT (response) ..........................................   57
  1455.        RECENT (search key) ........................................   39
  1456.        RECENT (status item) .......................................   33
  1457.        RENAME (command) ...........................................   27
  1458.        REQUIRED (specification requirement term) ..................    4
  1459.        RFC822 (fetch item) ........................................   44
  1460.        RFC822 (fetch result) ......................................   63
  1461.        RFC822.HEADER (fetch item) .................................   44
  1462.        RFC822.HEADER (fetch result) ...............................   62
  1463.        RFC822.SIZE (fetch item) ...................................   44
  1464.        RFC822.SIZE (fetch result) .................................   62
  1465.        RFC822.TEXT (fetch item) ...................................   44
  1466.        RFC822.TEXT (fetch result) .................................   62
  1467.        SEARCH (command) ...........................................   37
  1468.        SEARCH (response) ..........................................   55
  1469.        SEEN (search key) ..........................................   40
  1470.        SELECT (command) ...........................................   23
  1471.        SENTBEFORE <date> (search key) .............................   40
  1472.        SENTON <date> (search key) .................................   40
  1473. Crispin                     Standards Track                    [Page 81]
  1474. RFC 2060                       IMAP4rev1                   December 1996
  1475.        SENTSINCE <date> (search key) ..............................   40
  1476.        SHOULD (specification requirement term) ....................    5
  1477.        SHOULD NOT (specification requirement term) ................    5
  1478.        SINCE <date> (search key) ..................................   40
  1479.        SMALLER <n> (search key) ...................................   40
  1480.        STATUS (command) ...........................................   33
  1481.        STATUS (response) ..........................................   55
  1482.        STORE (command) ............................................   45
  1483.        SUBJECT <string> (search key) ..............................   40
  1484.        SUBSCRIBE (command) ........................................   29
  1485.        Session Flag (class of flag) ...............................   10
  1486.        System Flag (type of flag) .................................    9
  1487.        TEXT (part specifier) ......................................   42
  1488.        TEXT <string> (search key) .................................   40
  1489.        TO <string> (search key) ...................................   40
  1490.        TRYCREATE (response code) ..................................   51
  1491.        UID (command) ..............................................   47
  1492.        UID (fetch item) ...........................................   44
  1493.        UID (fetch result) .........................................   63
  1494.        UID <message set> (search key) .............................   40
  1495.        UIDNEXT (status item) ......................................   33
  1496.        UIDVALIDITY (response code) ................................   51
  1497.        UIDVALIDITY (status item) ..................................   34
  1498.        UNANSWERED (search key) ....................................   40
  1499.        UNDELETED (search key) .....................................   40
  1500.        UNDRAFT (search key) .......................................   40
  1501.        UNFLAGGED (search key) .....................................   40
  1502.        UNKEYWORD <flag> (search key) ..............................   40
  1503.        UNSEEN (response code) .....................................   51
  1504.        UNSEEN (search key) ........................................   40
  1505.        UNSEEN (status item) .......................................   34
  1506.        UNSUBSCRIBE (command) ......................................   30
  1507.        Unique Identifier (UID) (message attribute) ................    7
  1508.        X<atom> (command) ..........................................   48
  1509.        [RFC-822] Size (message attribute) .........................   11
  1510.        Answered (system flag) ....................................    9
  1511.        Deleted (system flag) .....................................    9
  1512.        Draft (system flag) .......................................    9
  1513.        Flagged (system flag) .....................................    9
  1514.        Marked (mailbox name attribute) ...........................   54
  1515.        Noinferiors (mailbox name attribute) ......................   54
  1516.        Noselect (mailbox name attribute) .........................   54
  1517.        Recent (system flag) ......................................   10
  1518.        Seen (system flag) ........................................    9
  1519.        Unmarked (mailbox name attribute) .........................   54
  1520. Crispin                     Standards Track                    [Page 82]