tech-invite   World Map     

IETF     RFCs     Groups     SIP     ABNFs    |    3GPP     Specs     Glossaries     Architecture     IMS     UICC    |    search

RFC 1730

 
 
 

Internet Message Access Protocol - Version 4

Part 3 of 3, p. 56 to 77
Prev RFC Part

 


prevText      Top      Up      ToC       Page 56 
8.      Sample IMAP4 session

   The following is a transcript of an IMAP4 session.  A long line in
   this sample is broken for editorial clarity.

   S:   * OK IMAP4 Service Ready
   C:   a001 login mrc secret
   S:   a001 OK LOGIN completed
   C:   a002 select inbox
   S:   * 18 EXISTS
   S:   * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
   S:   * 2 RECENT
   S:   * OK [UNSEEN 17] Message 17 is the first unseen message
   S:   * OK [UIDVALIDITY 3857529045] UIDs valid
   S:   a002 OK [READ-WRITE] SELECT completed
   C:   a003 fetch 12 full
   S:   * 12 FETCH (FLAGS (\Seen) INTERNALDATE "14-Jul-1993 02:44:25 -0700"
         RFC822.SIZE 4282 ENVELOPE ("Wed, 14 Jul 1993 02:23:25 -0700 (PDT)"
         "IMAP4 WG mtg summary and minutes"
         (("Terry Gray" NIL "gray" "cac.washington.edu"))
         (("Terry Gray" NIL "gray" "cac.washington.edu"))
         (("Terry Gray" NIL "gray" "cac.washington.edu"))
         ((NIL NIL "imap" "cac.washington.edu"))
         ((NIL NIL "minutes" "CNRI.Reston.VA.US")
         ("John Klensin" NIL "KLENSIN" "INFOODS.MIT.EDU")) NIL NIL
         "<B27397-0100000@cac.washington.edu>")
          BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92))
   S:    a003 OK FETCH completed
   C:    a004 fetch 12 rfc822.header
   S:    * 12 FETCH (RFC822.HEADER {346}
   S:    Date: Wed, 14 Jul 1993 02:23:25 -0700 (PDT)
   S:    From: Terry Gray <gray@cac.washington.edu>
   S:    Subject: IMAP4 WG mtg summary and minutes
   S:    To: imap@cac.washington.edu
   S:    cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@INFOODS.MIT.EDU>
   S:    Message-Id: <B27397-0100000@cac.washington.edu>
   S:    MIME-Version: 1.0
   S:    Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
   S:
   S:    )
   S:    a004 OK FETCH completed
   C:    a005 store 12 +flags \deleted
   S:    * 12 FETCH (FLAGS (\Seen \Deleted))
   S:    a005 OK +FLAGS completed
   C:    a006 logout
   S:    * BYE IMAP4 server terminating connection
   S:    a006 OK LOGOUT completed

Top      Up      ToC       Page 57 
9.      Formal Syntax

   The following syntax specification uses the augmented Backus-Naur
   Form (BNF) notation as specified in [RFC-822] with one exception; the
   delimiter used with the "#" construct is a single space (SPACE) and
   not a comma.

   Except as noted otherwise, all alphabetic characters are
   case-insensitive.  The use of upper or lower case characters to
   define token strings is for editorial clarity only.  Implementations
   MUST accept these strings in a case-insensitive fashion.

   Syntax marked as obsolete may be encountered with implementations
   written for an earlier version of this protocol (e.g. IMAP2).  New
   implementations SHOULD accept obsolete syntax as input, but MUST NOT
   otherwise use such syntax.

   address         ::= "(" addr_name SPACE addr_adl SPACE addr_mailbox
                       SPACE addr_host ")"

   addr_adl        ::= nstring

   addr_host       ::= nstring
                       ;; NIL indicates [RFC-822] group syntax

   addr_mailbox    ::= nstring
                       ;; NIL indicates end of [RFC-822] group; if
                       ;; non-NIL and addr_host is NIL, holds
                       ;; [RFC-822] group name

   addr_name       ::= nstring

   alpha           ::= "A" / "B" / "C" / "D" / "E" / "F" / "G" / "H" /
                       "I" / "J" / "K" / "L" / "M" / "N" / "O" / "P" /
                       "Q" / "R" / "S" / "T" / "U" / "V" / "W" / "X" /
                       "Y" / "Z" /
                       "a" / "b" / "c" / "d" / "e" / "f" / "g" / "h" /
                       "i" / "j" / "k" / "l" / "m" / "n" / "o" / "p" /
                       "q" / "r" / "s" / "t" / "u" / "v" / "w" / "x" /
                       "y" / "z" /
                       ;; Case-sensitive

   append          ::= "APPEND" SPACE mailbox [SPACE flag_list]
                       [SPACE date_time] SPACE literal

   astring         ::= atom / string

Top      Up      ToC       Page 58 
   atom            ::= 1*ATOM_CHAR

   ATOM_CHAR       ::= <any CHAR except atom_specials>

   atom_specials   ::= "(" / ")" / "{" / SPACE / CTLs / list_wildcards /
                       quoted_specials

   authenticate    ::= "AUTHENTICATE" SPACE auth_type *(CRLF base64)

   auth_type       ::= atom

   base64          ::= *(4base64_char) [base64_terminal]

   base64_char     ::= alpha / digit / "+" / "/"

   base64_terminal ::= (2base64_char "==") / (3base64_char "=")

   body            ::= "(" body_type_1part / body_type_mpart ")"

   body_extension  ::= nstring / number / "(" 1#body_extension ")"
                       ;; Future expansion.  Client implementations
                       ;; MUST accept body_extension fields.  Server
                       ;; implementations MUST NOT generate
                       ;; body_extension fields except as defined by
                       ;; future standard or standards-track
                       ;; revisions of this specification.

   body_ext_1part  ::= body_fld_md5 [SPACE 1#body_extension]
                       ;; MUST NOT be returned on non-extensible
                       ;; "BODY" fetch

   body_ext_mpart  ::= body_fld_param [SPACE 1#body_extension]]
                       ;; MUST NOT be returned on non-extensible
                       ;; "BODY" fetch

   body_fields     ::= body_fld_param SPACE body_fld_id SPACE
                       body_fld_desc SPACE body_fld_enc SPACE
                       body_fld_octets

   body_fld_desc   ::= nstring

   body_fld_enc    ::= (<"> ("7BIT" / "8BIT" / "BINARY" / "BASE64"/
                       "QUOTED-PRINTABLE") <">) / string

   body_fld_id     ::= nstring

   body_fld_lines  ::= number

Top      Up      ToC       Page 59 
   body_fld_md5    ::= nstring

   body_fld_octets ::= number

   body_fld_param  ::= "(" 1#(string string) ")" / nil

   body_fld_subtyp ::= string

   body_type_1part ::= (body_type_basic / body_type_msg / body_type_text)
                       [SPACE body_ext_1part]

   body_type_basic ::= (<"> ("APPLICATION" / "AUDIO" / "IMAGE" /
                       "MESSAGE" / "VIDEO") <">) / string) SPACE
                       body_fld_subtyp SPACE body_fields
                       ;; MESSAGE subtype MUST NOT be "RFC822"

   body_type_mpart ::= 1*body SPACE body_fld_subtyp
                       [SPACE body_ext_mpart]

   body_type_msg   ::= <"> "MESSAGE" <"> SPACE <"> "RFC822" <"> SPACE
                       body_fields SPACE envelope SPACE body SPACE
                       body_fld_lines

   body_type_text  ::= <"> "TEXT" <"> SPACE body_fld_subtyp SPACE
                        body_fields SPACE body_fld_lines

   capability      ::= atom
                       ;; Must begin with "X" or be registered with
                       ;; IANA as standard or standards-track

   capability_data ::= "CAPABILITY" SPACE "IMAP4" [SPACE 1#capability]

   CHAR            ::= <any 7-bit US-ASCII character except NUL,
                        0x01 - 0x7f>

   CHAR8           ::= <any 8-bit octet except NUL, 0x01 - 0xff>

   command         ::= tag SPACE (command_any / command_auth /
                       command_nonauth / command_select) CRLF
                       ;; Modal based on state

   command_any     ::= "CAPABILITY" / "LOGOUT" / "NOOP" / x_command
                       ;; Valid in all states

   command_auth    ::= append / create / delete / examine / find / list /
                       lsub / rename / select / subscribe / unsubscribe /
                       ;; Valid only in Authenticated or Selected state

Top      Up      ToC       Page 60 
   command_nonauth ::= login / authenticate
                       ;; Valid only when in Non-Authenticated state

   command_select  ::= "CHECK" / "CLOSE" / "EXPUNGE" /
                        copy / fetch / partial / store / uid / search
                       ;; Valid only when in Selected state

   continue_req    ::= "+" SPACE (resp_text / base64)

   copy            ::= "COPY" SPACE set SPACE mailbox

   CR              ::= <ASCII CR, carriage return, 0x0C>

   create          ::= "CREATE" SPACE mailbox
                       ;; Use of INBOX gives a NO error

   CRLF            ::= CR LF

   CTL             ::= <any ASCII control character and DEL,
                        0x00 - 0x1f, 0x7f>

   date            ::= date_text / <"> date_text <">

   date_day        ::= 1*2digit
                       ;; Day of month

   date_day_fixed  ::= (SPACE digit) / 2digit
                       ;; Fixed-format version of date_day

   date_month      ::= "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" /
                       "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"

   date_text       ::= date_day "-" date_month "-" (date_year /
                       date_year_old)

   date_year       ::= 4digit

   date_year_old   ::= 2digit
                       ;; OBSOLETE, (year - 1900)

   date_time       ::= <"> (date_time_new / date_time_old) <">

   date_time_new   ::= date_day_fixed "-" date_month "-" date_year
                       SPACE time SPACE zone

   date_time_old   ::= date_day_fixed "-" date_month "-" date_year_old
                       SPACE time "-" zone_old
                       ;; OBSOLETE

Top      Up      ToC       Page 61 
   delete          ::= "DELETE" SPACE mailbox
                       ;; Use of INBOX gives a NO error

   digit           ::= "0" / digit_nz

   digit_nz        ::= "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" /
                       "9"

   envelope        ::= "(" env_date SPACE env_subject SPACE env_from
                       SPACE env_sender SPACE env_reply-to SPACE env_to
                       SPACE env_cc SPACE env_bcc SPACE env_in-reply-to
                       SPACE env_message-id ")"

   env_bcc         ::= "(" 1*address ")" / nil

   env_cc          ::= "(" 1*address ")" / nil

   env_date        ::= nstring

   env_from        ::= "(" 1*address ")" / nil

   env_in-reply-to ::= nstring

   env_message-id  ::= nstring

   env_reply-to    ::= "(" 1*address ")" / nil

   env_sender      ::= "(" 1*address ")" / nil

   env_subject     ::= nstring

   env_to          ::= "(" 1*address ")" / nil

   examine         ::= "EXAMINE" SPACE mailbox

   fetch           ::= "FETCH" SPACE set SPACE ("ALL" / "FULL" /
                       "FAST" / fetch_att / "(" 1#fetch_att ")")

   fetch_att       ::= "BODY" / "BODYSTRUCTURE" /
                       "BODY" [".PEEK"] "[" section "]" / "ENVELOPE" /
                       "FLAGS" / "INTERNALDATE" / "UID" /
                       "RFC822" (([".TEXT"] [".PEEK"]) / ".SIZE" /
                       (".HEADER" [".LINES" [".NOT"] SPACE header_list])

   find            ::= "FIND" SPACE ["ALL."] "MAILBOXES" SPACE
                       list_mailbox
                       ;; OBSOLETE

Top      Up      ToC       Page 62 
   flag            ::= "\Answered" / "\Flagged" / "\Deleted" /
                       "\Seen" / "\Draft" / flag_keyword  /
                       flag_extension

   flag_extension  ::= "\" atom
                       ;; Future expansion.  Client implementations
                       ;; MUST accept flag_extension flags.  Server
                       ;; implementations MUST NOT generate
                       ;; flag_extension flags except as defined by
                       ;; future standard or standards-track
                       ;; revisions of this specification.

   flag_keyword    ::= atom

   flag_list       ::= "(" #flag ")"

   greeting        ::= "*" SPACE (resp_cond_auth / resp_cond_bye) CRLF

   header_line     ::= astring

   header_list     ::= "(" 1#header_line ")"

   LF              ::= <ASCII LF, line feed, 0x0A>

   list            ::= "LIST" SPACE mailbox SPACE list_mailbox

   list_mailbox    ::= 1*(ATOM_CHAR / list_wildcards) / string

   list_wildcards  ::= "%" / "*"

   literal         ::= "{" number "}" CRLF *CHAR8
                       ;; Number represents the number of CHAR8 octets

   login           ::= "LOGIN" SPACE userid SPACE password

   lsub            ::= "LSUB" SPACE mailbox SPACE list_mailbox

   mailbox         ::= "INBOX" / astring
                       ;; INBOX is case-insensitive; other names may be
                       ;; case-sensitive depending on implementation.

   mailbox_data    ::=  "FLAGS" SPACE flag_list /
                        "LIST" SPACE mailbox_list /
                        "LSUB" SPACE mailbox_list /
                        "MAILBOX" SPACE text /
                        "SEARCH" [SPACE 1#nz_number] /
                        number SPACE "EXISTS" / number SPACE "RECENT"

Top      Up      ToC       Page 63 
   mailbox_list    ::= "(" #("\Marked" / "\Noinferiors" /
                       "\Noselect" / "\Unmarked" / flag_extension) ")"
                       SPACE (<"> QUOTED_CHAR <"> / nil) SPACE mailbox

   message_data    ::= nz_number SPACE ("EXPUNGE" /
                       ("FETCH" SPACE msg_fetch) / msg_obsolete)

   msg_fetch       ::= "(" 1#("BODY" SPACE body /
                       "BODYSTRUCTURE" SPACE body /
                       "BODY[" section "]" SPACE nstring /
                       "ENVELOPE" SPACE envelope /
                       "FLAGS" SPACE "(" #(flag / "\Recent") ")" /
                       "INTERNALDATE" SPACE date_time /
                       "RFC822" [".HEADER" / ".TEXT"] SPACE nstring /
                       "RFC822.SIZE" SPACE number /
                       "UID" SPACE uniqueid) ")"

   msg_obsolete    ::= "COPY" / ("STORE" SPACE msg_fetch)
                       ;; OBSOLETE untagged data responses

   nil             ::= "NIL"

   nstring         ::= string / nil

   number          ::= 1*digit
                       ;; Unsigned 32-bit integer
                       ;; (0 <= n < 4,294,967,296)

   nz_number       ::= digit_nz *digit
                       ;; Non-zero unsigned 32-bit integer
                       ;; (0 < n < 4,294,967,296)

   partial         ::= "PARTIAL" SPACE nz_number SPACE
                       ("BODY" [".PEEK"] "[" section "]" /
                       "RFC822" (([".TEXT"] [".PEEK"]) / ".HEADER")
                       SPACE number SPACE number

   password        ::= astring

   quoted          ::= <"> *QUOTED_CHAR <">

   QUOTED_CHAR     ::= <any TEXT_CHAR except quoted_specials> /
                       "\" quoted_specials

   quoted_specials ::= <"> / "\"

   rename          ::= "RENAME" SPACE mailbox SPACE mailbox
                       ;; Use of INBOX as a destination gives a NO error

Top      Up      ToC       Page 64 
   response        ::= *response_data response_done

   response_data   ::= "*" SPACE (resp_cond_state / resp_cond_bye /
                       mailbox_data / message_data / capability_data)
                       CRLF

   response_done   ::= response_tagged / response_fatal

   response_fatal  ::= "*" SPACE resp_cond_bye CRLF

   response_tagged ::= tag SPACE resp_cond_state CRLF

   resp_cond_auth  ::= ("OK" / "PREAUTH") SPACE resp_text
                       ;; Authentication condition

   resp_cond_bye   ::= "BYE" SPACE resp_text
                       ;; Server will disconnect condition

   resp_cond_state ::= ("OK" / "NO" / "BAD") SPACE resp_text
                       ;; Status condition

   resp_text       ::= ["[" resp_text_code "]" SPACE] (text_mime2 / text)

   resp_text_code  ::= "ALERT" / "PARSE" /
                       "PERMANENTFLAGS" SPACE "(" #(flag / "\*") ")" /
                       "READ-ONLY" / "READ-WRITE" / "TRYCREATE" /
                       "UIDVALIDITY" SPACE nz_number /
                       "UNSEEN" SPACE nz_number /
                       atom [SPACE 1*<any TEXT_CHAR except "]">]

   search          ::= "SEARCH" SPACE ["CHARSET" SPACE astring SPACE]
                       search_criteria
                       ;; Character set must be registered with IANA
                       ;; as a MIME character set

   search_criteria ::= 1#search_key

   search_key      ::= search_new / search_old

   search_new      ::= "DRAFT" /
                       "HEADER" SPACE header_line SPACE astring /
                       "LARGER" SPACE number / "NOT" SPACE search_key /
                       "OR" SPACE search_key SPACE search_key /
                       "SENTBEFORE" SPACE date / "SENTON" SPACE date /
                       "SENTSINCE" SPACE date / "SMALLER" SPACE number /
                       "UID" SPACE set / "UNDRAFT" / set /
                       "(" search_criteria ")"
                       ;; New in IMAP4

Top      Up      ToC       Page 65 
   search_old      ::= "ALL" / "ANSWERED" / "BCC" SPACE astring /
                       "BEFORE" SPACE date / "BODY" SPACE astring /
                       "CC" SPACE astring / "DELETED" / "FLAGGED" /
                       "FROM" SPACE astring /
                       "KEYWORD" SPACE flag_keyword / "NEW" / "OLD" /
                       "ON" SPACE date / "RECENT" / "SEEN" /
                       "SINCE" SPACE date / "SUBJECT" SPACE astring /
                       "TEXT" SPACE astring / "TO" SPACE astring /
                       "UNANSWERED" / "UNDELETED" / "UNFLAGGED" /
                       "UNKEYWORD" SPACE flag_keyword / "UNSEEN"
                       ;; Defined in [IMAP2]

   section         ::= "0" / nz_number ["." section]

   select          ::= "SELECT" SPACE mailbox

   sequence_num    ::= nz_number / "*"
                       ;; * is the largest number in use.  For message
                       ;; sequence numbers, it is the number of messages
                       ;; in the mailbox.  For unique identifiers, it is
                       ;; the unique identifier of the last message in
                       ;; the mailbox.

   set             ::= sequence_num / (sequence_num ":" sequence_num) /
                       (set "," set)
                       ;; Identifies a set of messages.  For message
                       ;; sequence numbers, these are consecutive
                       ;; numbers from 1 to the number of messages in
                       ;; the mailbox
                       ;; Comma delimits individual numbers, colon
                       ;; delimits between two numbers inclusive.
                       ;; Example: 2,4:7,9,12:* is 2,4,5,6,7,9,12,13,
                       ;; 14,15 for a mailbox with 15 messages.

   SPACE           ::= <ASCII SP, space, 0x20>

   store           ::= "STORE" SPACE set SPACE store_att_flags

   store_att_flags ::= (["+" / "-"] "FLAGS" [".SILENT"]) SPACE
                       (flag_list / #flag)

   string          ::= quoted / literal

   subscribe       ::= ("SUBSCRIBE" SPACE mailbox) / subscribe_obs

   subscribe_obs   ::= "SUBSCRIBE" SPACE "MAILBOX" SPACE mailbox
                       ;;OBSOLETE

Top      Up      ToC       Page 66 
   tag             ::= 1*<any ATOM_CHAR except "+">

   text            ::= 1*TEXT_CHAR

   text_mime2       ::= "=?" <charset> "?" <encoding> "?"
                        <encoded-text> "?="
                        ;; Syntax defined in [MIME-2]

   TEXT_CHAR       ::= <any CHAR except CR and LF>

   time            ::= 2digit ":" 2digit ":" 2digit
                       ;; Hours minutes seconds

   uid             ::= "UID" SPACE (copy / fetch / search / store)
                       ;; Unique identifiers used instead of message
                       ;; sequence numbers

   uniqueid        ::= nz_number
                       ;; Strictly ascending

   unsubscribe     ::= ("UNSUBSCRIBE" SPACE mailbox) / unsubscribe_obs

   unsubscribe_obs ::= "UNSUBSCRIBE" SPACE "MAILBOX" SPACE mailbox
                       ;;OBSOLETE

   userid          ::= astring

   x_command       ::= "X" atom <experimental command arguments>

   zone            ::= ("+" / "-") 4digit
                       ;; Signed four-digit value of hhmm representing
                       ;; hours and minutes west of Greenwich (that is,
                       ;; (the amount that the given time differs from
                       ;; Universal Time).  Subtracting the timezone
                       ;; from the given time will give the UT form.
                       ;; The Universal Time zone is "+0000".

Top      Up      ToC       Page 67 
   zone_old        ::= "UT" / "GMT" / "Z" /                ;; +0000
                       "AST" / "EDT" /                     ;; -0400
                       "EST" / "CDT" /                     ;; -0500
                       "CST" / "MDT" /                     ;; -0600
                       "MST" / "PDT" /                     ;; -0700
                       "PST" / "YDT" /                     ;; -0800
                       "YST" / "HDT" /                     ;; -0900
                       "HST" / "BDT" /                     ;; -1000
                       "BST" /                             ;; -1100
                       "A" / "B" / "C" / "D" / "E" / "F" / ;; +1 to +6
                       "G" / "H" / "I" / "K" / "L" / "M" / ;; +7 to +12
                       "N" / "O" / "P" / "Q" / "R" / "S" / ;; -1 to -6
                       "T" / "U" / "V" / "W" / "X" / "Y"   ;; -7 to -12
                       ;; OBSOLETE

Top      Up      ToC       Page 68 
10.     Author's Note

   This document is a revision or rewrite of earlier documents, and
   supercedes the protocol specification in those documents: IMAP4
   Internet drafts, the IMAP2bis Internet drafts, unpublished
   IMAP2bis.TXT document, RFC 1176, and RFC 1064.


11.     Security Considerations

   IMAP4 protocol transactions, including electronic mail data, are sent
   in the clear over the network unless the optional privacy protection
   is negotiated in the AUTHENTICATE command.

   A server error message for an AUTHENTICATE command which fails due to
   invalid credentials should not detail why the credentials are
   invalid.

   Use of the LOGIN command sends passwords in the clear.  This can be
   avoided by using the AUTHENTICATE command instead.

   A server error message for a failing LOGIN command should not specify
   that the user name, as opposed to the password, is invalid.

   Additional security considerations are discussed in the section
   discussing the AUTHENTICATE and LOGIN commands.


12.     Author's Address

   Mark R. Crispin
   Networks and Distributed Computing, JE-30
   University of Washington
   Seattle, WA  98195

   Phone: (206) 543-5762

   EMail: MRC@CAC.Washington.EDU

Top      Up      ToC       Page 69 
Appendices

A.      Obsolete Commands

   The following commands are OBSOLETE.  It is NOT required to support
   any of these commands in new server implementations.  These commands
   are documented here for the benefit of implementors who may wish to
   support them for compatibility with old client implementations.

   The section headings of these commands are intended to correspond
   with where they would be located in the main document if they were
   not obsoleted.


A.6.3.OBS.1.    FIND ALL.MAILBOXES Command

   Arguments:  mailbox name with possible wildcards

   Data:       untagged responses: MAILBOX

   Result:     OK - find completed
               NO - find failure: can't list that name
               BAD - command unknown or arguments invalid

      The FIND ALL.MAILBOXES command returns a subset of names from the
      complete set of all names available to the user.  It returns zero
      or more untagged MAILBOX replies.  The mailbox argument to FIND
      ALL.MAILBOXES is similar to that for LIST with an empty reference,
      except that the characters "%" and "?" match a single character.

   Example:    C: A002 FIND ALL.MAILBOXES *
               S: * MAILBOX blurdybloop
               S: * MAILBOX INBOX
               S: A002 OK FIND ALL.MAILBOXES completed


A.6.3.OBS.2.    FIND MAILBOXES Command

   Arguments:  mailbox name with possible wildcards

   Data:       untagged responses: MAILBOX

   Result:     OK - find completed
               NO - find failure: can't list that name
               BAD - command unknown or arguments invalid

      The FIND MAILBOXES command returns a subset of names from the set
      of names that the user has declared as being "active" or

Top      Up      ToC       Page 70 
      "subscribed".  It returns zero or more untagged MAILBOX replies.
      The mailbox argument to FIND MAILBOXES is similar to that for LSUB
      with an empty reference, except that the characters "%" and "?"
      match a single character.

   Example:    C: A002 FIND MAILBOXES *
               S: * MAILBOX blurdybloop
               S: * MAILBOX INBOX
               S: A002 OK FIND MAILBOXES completed


A.6.3.OBS.3.    SUBSCRIBE MAILBOX Command

   Arguments:  mailbox name

   Data:       no specific data for this command

   Result:     OK - subscribe completed
               NO - subscribe failure: can't subscribe to that name
               BAD - command unknown or arguments invalid

      The SUBSCRIBE MAILBOX command is identical in effect to the
      SUBSCRIBE command.  A server which implements this command must be
      able to distinguish between a SUBSCRIBE MAILBOX command and a
      SUBSCRIBE command with a mailbox name argument of "MAILBOX".

   Example:    C: A002 SUBSCRIBE MAILBOX #news.comp.mail.mime
               S: A002 OK SUBSCRIBE MAILBOX to #news.comp.mail.mime
               completed
               C: A003 SUBSCRIBE MAILBOX
               S: A003 OK SUBSCRIBE to MAILBOX completed


A.6.3.OBS.4.    UNSUBSCRIBE MAILBOX Command

   Arguments:  mailbox name

   Data:       no specific data for this command

   Result:     OK - unsubscribe completed
               NO - unsubscribe failure: can't unsubscribe that name
               BAD - command unknown or arguments invalid

      The UNSUBSCRIBE MAILBOX command is identical in effect to the
      UNSUBSCRIBE command.  A server which implements this command must
      be able to distinguish between a UNSUBSCRIBE MAILBOX command and
      an UNSUBSCRIBE command with a mailbox name argument of "MAILBOX".

Top      Up      ToC       Page 71 
   Example:    C: A002 UNSUBSCRIBE MAILBOX #news.comp.mail.mime
               S: A002 OK UNSUBSCRIBE MAILBOX from #news.comp.mail.mime
               completed
               C: A003 UNSUBSCRIBE MAILBOX
               S: A003 OK UNSUBSCRIBE from MAILBOX completed

Top      Up      ToC       Page 72 
B.      Obsolete Responses

   The following responses are OBSOLETE.  Except as noted below, these
   responses MUST NOT be transmitted by new server implementations.

   The section headings of these responses are intended to correspond
   with where they would be located in the main document if they were
   not obsoleted.


B.7.2.OBS.1.    MAILBOX Response

   Data:       name

      The MAILBOX response MUST NOT be transmitted by server
      implementations except in response to the obsolete FIND MAILBOXES
      and FIND ALL.MAILBOXES commands.  Client implementations that do
      not use these commands MAY ignore this response.  It is documented
      here for the benefit of implementors who may wish to support it
      for compatibility with old client implementations.

      This response occurs as a result of the FIND MAILBOXES and FIND
      ALL.MAILBOXES commands.  It returns a single name that matches the
      FIND specification.  There are no attributes or hierarchy
      delimiter.

   Example:    S: * MAILBOX blurdybloop


B.7.3.OBS.1.    COPY Response

   Data:       none

      The COPY response MUST NOT be transmitted by new server
      implementations.  Client implementations MUST ignore the COPY
      response.  It is documented here for the benefit of client
      implementors who may encounter this response from old server
      implementations.

      In some experimental versions of this protocol, this response was
      returned in response to a COPY command to indicate on a
      per-message basis that the message was copied successfully.

   Example:    S: * 44 COPY

Top      Up      ToC       Page 73 
B.7.3.OBS.2.    STORE Response

   Data:       message data

      The STORE response MUST NOT be transmitted by new server
      implementations.  Client implementations MUST treat the STORE
      response as equivalent to the FETCH response.  It is documented
      here for the benefit of client implementors who may encounter this
      response from old server implementations.

      In some experimental versions of this protocol, this response was
      returned instead of FETCH in response to a STORE command to report
      the new value of the flags.

   Example:    S: * 69 STORE (FLAGS (\Deleted))

Top      Up      ToC       Page 74 
C.      References


   [IMAP-AUTH] Myers, J., "IMAP4 Authentication Mechanism", RFC 1731.
   Carnegie-Mellon University, December 1994.

   [IMAP-COMPAT] Crispin, M. "IMAP4 Compatibility with IMAP2 and
   IMAP2bis", RFC 1732, University of Washington, December 1994.

   [IMAP-DISC] Austein, R. "Synchronization Operations for Disconnected
   IMAP4 Clients", Work in Progress.

   [IMAP-MODEL] Crispin, M. "Distributed Electronic Mail Models in
   IMAP4", RFC 1733, University of Washington, December 1994.

   [IMAP-NAMING] Crispin, M. "Mailbox Naming Convention in IMAP4", Work
   in Progress.

   [IMAP2] Crispin, M., "Interactive Mail Access Protocol - Version 2",
   RFC 1176, University of Washington, August 1990.

   [IMSP] Myers, J. "IMSP -- Internet Message Support Protocol", Work in
   Progress.

   [MIME-1] Borenstein, N., and Freed, N., "MIME (Multipurpose Internet
   Mail Extensions) Part One: Mechanisms for Specifying and Describing
   the Format of Internet Message Bodies", RFC 1521, Bellcore, Innosoft,
   September 1993.

   [MIME-2] Moore, K., "MIME (Multipurpose Internet Mail Extensions)
   Part Two: Message Header Extensions for Non-ASCII Text", RFC 1522,
   University of Tennessee, September 1993.

   [RFC-822] Crocker, D., "Standard for the Format of ARPA Internet Text
   Messages", STD 11, RFC 822, University of Delaware, August 1982.

   [SMTP] Postel, Jonathan B. "Simple Mail Transfer Protocol", STD 10,
   RFC 821, USC/Information Sciences Institute, August 1982.

Top      Up      ToC       Page 75 
E.      IMAP4 Keyword Index


       +FLAGS <flag list> (store command data item) ...............   34
       +FLAGS.SILENT <flag list> (store command data item) ........   34
       -FLAGS <flag list> (store command data item) ...............   34
       -FLAGS.SILENT <flag list> (store command data item) ........   34
       ALERT (response code) ......................................   39
       ALL (fetch item) ...........................................   29
       ALL (search key) ...........................................   27
       ANSWERED (search key) ......................................   27
       APPEND (command) ...........................................   22
       AUTHENTICATE (command) .....................................   12
       BAD (response) .............................................   41
       BCC <string> (search key) ..................................   27
       BEFORE <date> (search key) .................................   27
       BODY (fetch item) ..........................................   29
       BODY (fetch result) ........................................   46
       BODY <string> (search key) .................................   27
       BODY.PEEK[<section>] (fetch item) ..........................   30
       BODYSTRUCTURE (fetch item) .................................   31
       BODYSTRUCTURE (fetch result) ...............................   47
       BODY[<section>] (fetch item) ...............................   29
       BODY[section] (fetch result) ...............................   46
       BYE (response) .............................................   41
       CAPABILITY (command) .......................................   10
       CAPABILITY (response) ......................................   42
       CC <string> (search key) ...................................   27
       CHECK (command) ............................................   23
       CLOSE (command) ............................................   24
       COPY (command) .............................................   34
       COPY (response) ............................................   68
       CREATE (command) ...........................................   17
       DELETE (command) ...........................................   18
       DELETED (search key) .......................................   27
       DRAFT (search key) .........................................   27
       ENVELOPE (fetch item) ......................................   31
       ENVELOPE (fetch result) ....................................   49
       EXAMINE (command) ..........................................   16
       EXISTS (response) ..........................................   45
       EXPUNGE (command) ..........................................   25
       EXPUNGE (response) .........................................   45
       FAST (fetch item) ..........................................   31
       FETCH (command) ............................................   29
       FETCH (response) ...........................................   46
       FIND ALL.MAILBOXES (command) ...............................   65
       FIND MAILBOXES (command) ...................................   65
       FLAGGED (search key) .......................................   27
       FLAGS (fetch item) .........................................   31

Top      Up      ToC       Page 76 
       FLAGS (fetch result) .......................................   50
       FLAGS (response) ...........................................   44
       FLAGS <flag list> (store command data item) ................   34
       FLAGS.SILENT <flag list> (store command data item) .........   34
       FROM <string> (search key) .................................   27
       FULL (fetch item) ..........................................   31
       HEADER <field-name> <string> (search key) ..................   27
       INTERNALDATE (fetch item) ..................................   31
       INTERNALDATE (fetch result) ................................   50
       KEYWORD <flag> (search key) ................................   27
       LARGER <n> (search key) ....................................   27
       LIST (command) .............................................   20
       LIST (response) ............................................   43
       LOGIN (command) ............................................   14
       LOGOUT (command) ...........................................   11
       LSUB (command) .............................................   22
       LSUB (response) ............................................   44
       MAILBOX (response) .........................................   68
       NEW (search key) ...........................................   27
       NO (response) ..............................................   40
       NOOP (command) .............................................   11
       NOT <search-key> (search key) ..............................   28
       OK (response) ..............................................   40
       OLD (search key) ...........................................   28
       ON <date> (search key) .....................................   28
       OR <search-key1> <search-key2> (search key) ................   28
       PARSE (response code) ......................................   39
       PARTIAL (command) ..........................................   32
       PERMANENTFLAGS (response code) .............................   39
       PREAUTH (response) .........................................   41
       READ-ONLY (response code) ..................................   39
       READ-WRITE (response code) .................................   39
       RECENT (response) ..........................................   45
       RECENT (search key) ........................................   28
       RENAME (command) ...........................................   18
       RFC822 (fetch item) ........................................   31
       RFC822 (fetch result) ......................................   50
       RFC822.HEADER (fetch item) .................................   31
       RFC822.HEADER (fetch result) ...............................   50
       RFC822.HEADER.LINES <header_list> (fetch item) .............   31
       RFC822.HEADER.LINES.NOT <header_list> (fetch item) .........   32
       RFC822.PEEK (fetch item) ...................................   31
       RFC822.SIZE (fetch item) ...................................   32
       RFC822.SIZE (fetch result) .................................   50
       RFC822.TEXT (fetch item) ...................................   32
       RFC822.TEXT (fetch result) .................................   51
       RFC822.TEXT.PEEK (fetch item) ..............................   32
       SEARCH (command) ...........................................   25

Top      Up      ToC       Page 77 
       SEARCH (response) ..........................................   44
       SEEN (search key) ..........................................   28
       SELECT (command) ...........................................   15
       SENTBEFORE <date> (search key) .............................   28
       SENTON <date> (search key) .................................   28
       SENTSINCE <date> (search key) ..............................   28
       SINCE <date> (search key) ..................................   28
       SMALLER <n> (search key) ...................................   28
       STORE (command) ............................................   33
       STORE (response) ...........................................   69
       SUBJECT <string> (search key) ..............................   28
       SUBSCRIBE (command) ........................................   19
       SUBSCRIBE MAILBOX (command) ................................   66
       TEXT <string> (search key) .................................   28
       TO <string> (search key) ...................................   28
       TRYCREATE (response code) ..................................   39
       UID (command) ..............................................   35
       UID (fetch item) ...........................................   32
       UID (fetch result) .........................................   51
       UID <message set> (search key) .............................   28
       UIDVALIDITY (response code) ................................   40
       UNANSWERED (search key) ....................................   29
       UNDELETED (search key) .....................................   29
       UNDRAFT (search key) .......................................   29
       UNFLAGGED (search key) .....................................   29
       UNKEYWORD <flag> (search key) ..............................   29
       UNSEEN (response code) .....................................   40
       UNSEEN (search key) ........................................   29
       UNSUBSCRIBE (command) ......................................   19
       UNSUBSCRIBE MAILBOX (command) ..............................   66
       X<atom> (command) ..........................................   37
       \Answered (system flag) ....................................   50
       \Deleted (system flag) .....................................   50
       \Draft (system flag) .......................................   50
       \Flagged (system flag) .....................................   50
       \Marked (mailbox name attribute) ...........................   43
       \Noinferiors (mailbox name attribute) ......................   43
       \Noselect (mailbox name attribute) .........................   43
       \Recent (system flag) ......................................   50
       \Seen (system flag) ........................................   50
       \Unmarked (mailbox name attribute) .........................   43