rfc2060.txt
上传用户:ycwykj01
上传日期:2007-01-04
资源大小:1819k
文件大小:178k
- RFC 2060 IMAP4rev1 December 1996
- A part of type MESSAGE/RFC822 also has nested part
- numbers, referring to parts of the MESSAGE part's
- body.
- The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, and
- TEXT part specifiers can be the sole part specifier
- or can be prefixed by one or more numeric part
- specifiers, provided that the numeric part
- specifier refers to a part of type MESSAGE/RFC822.
- The MIME part specifier MUST be prefixed by one or
- more numeric part specifiers.
- The HEADER, HEADER.FIELDS, and HEADER.FIELDS.NOT
- part specifiers refer to the [RFC-822] header of
- the message or of an encapsulated [MIME-IMT]
- MESSAGE/RFC822 message. HEADER.FIELDS and
- HEADER.FIELDS.NOT are followed by a list of
- field-name (as defined in [RFC-822]) names, and
- return a subset of the header. The subset returned
- by HEADER.FIELDS contains only those header fields
- with a field-name that matches one of the names in
- the list; similarly, the subset returned by
- HEADER.FIELDS.NOT contains only the header fields
- with a non-matching field-name. The field-matching
- is case-insensitive but otherwise exact. In all
- cases, the delimiting blank line between the header
- and the body is always included.
- The MIME part specifier refers to the [MIME-IMB]
- header for this part.
- The TEXT part specifier refers to the text body of
- the message, omitting the [RFC-822] header.
- Crispin Standards Track [Page 42]
- RFC 2060 IMAP4rev1 December 1996
- Here is an example of a complex message
- with some of its part specifiers:
- HEADER ([RFC-822] header of the message)
- TEXT MULTIPART/MIXED
- 1 TEXT/PLAIN
- 2 APPLICATION/OCTET-STREAM
- 3 MESSAGE/RFC822
- 3.HEADER ([RFC-822] header of the message)
- 3.TEXT ([RFC-822] text body of the message)
- 3.1 TEXT/PLAIN
- 3.2 APPLICATION/OCTET-STREAM
- 4 MULTIPART/MIXED
- 4.1 IMAGE/GIF
- 4.1.MIME ([MIME-IMB] header for the IMAGE/GIF)
- 4.2 MESSAGE/RFC822
- 4.2.HEADER ([RFC-822] header of the message)
- 4.2.TEXT ([RFC-822] text body of the message)
- 4.2.1 TEXT/PLAIN
- 4.2.2 MULTIPART/ALTERNATIVE
- 4.2.2.1 TEXT/PLAIN
- 4.2.2.2 TEXT/RICHTEXT
- It is possible to fetch a substring of the
- designated text. This is done by appending an open
- angle bracket ("<"), the octet position of the
- first desired octet, a period, the maximum number
- of octets desired, and a close angle bracket (">")
- to the part specifier. If the starting octet is
- beyond the end of the text, an empty string is
- returned.
- Any partial fetch that attempts to read beyond the
- end of the text is truncated as appropriate. A
- partial fetch that starts at octet 0 is returned as
- a partial fetch, even if this truncation happened.
- Note: this means that BODY[]<0.2048> of a
- 1500-octet message will return BODY[]<0>
- with a literal of size 1500, not BODY[].
- Note: a substring fetch of a
- HEADER.FIELDS or HEADER.FIELDS.NOT part
- specifier is calculated after subsetting
- the header.
- Crispin Standards Track [Page 43]
- RFC 2060 IMAP4rev1 December 1996
- The Seen flag is implicitly set; if this causes
- the flags to change they SHOULD be included as part
- of the FETCH responses.
- BODY.PEEK[<section>]<<partial>>
- An alternate form of BODY[<section>] that does not
- implicitly set the Seen flag.
- BODYSTRUCTURE The [MIME-IMB] body structure of the message. This
- is computed by the server by parsing the [MIME-IMB]
- header fields in the [RFC-822] header and
- [MIME-IMB] headers.
- ENVELOPE The envelope structure of the message. This is
- computed by the server by parsing the [RFC-822]
- header into the component parts, defaulting various
- fields as necessary.
- FAST Macro equivalent to: (FLAGS INTERNALDATE
- RFC822.SIZE)
- FLAGS The flags that are set for this message.
- FULL Macro equivalent to: (FLAGS INTERNALDATE
- RFC822.SIZE ENVELOPE BODY)
- INTERNALDATE The internal date of the message.
- RFC822 Functionally equivalent to BODY[], differing in the
- syntax of the resulting untagged FETCH data (RFC822
- is returned).
- RFC822.HEADER Functionally equivalent to BODY.PEEK[HEADER],
- differing in the syntax of the resulting untagged
- FETCH data (RFC822.HEADER is returned).
- RFC822.SIZE The [RFC-822] size of the message.
- RFC822.TEXT Functionally equivalent to BODY[TEXT], differing in
- the syntax of the resulting untagged FETCH data
- (RFC822.TEXT is returned).
- UID The unique identifier for the message.
- Crispin Standards Track [Page 44]
- RFC 2060 IMAP4rev1 December 1996
- Example: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])
- S: * 2 FETCH ....
- S: * 3 FETCH ....
- S: * 4 FETCH ....
- S: A654 OK FETCH completed
- 6.4.6. STORE Command
- Arguments: message set
- message data item name
- value for message data item
- Responses: untagged responses: FETCH
- Result: OK - store completed
- NO - store error: can't store that data
- BAD - command unknown or arguments invalid
- The STORE command alters data associated with a message in the
- mailbox. Normally, STORE will return the updated value of the
- data with an untagged FETCH response. A suffix of ".SILENT" in
- the data item name prevents the untagged FETCH, and the server
- SHOULD assume that the client has determined the updated value
- itself or does not care about the updated value.
- Note: regardless of whether or not the ".SILENT" suffix was
- used, the server SHOULD send an untagged FETCH response if a
- change to a message's flags from an external source is
- observed. The intent is that the status of the flags is
- determinate without a race condition.
- The currently defined data items that can be stored are:
- FLAGS <flag list>
- Replace the flags for the message with the
- argument. The new value of the flags are returned
- as if a FETCH of those flags was done.
- FLAGS.SILENT <flag list>
- Equivalent to FLAGS, but without returning a new
- value.
- +FLAGS <flag list>
- Add the argument to the flags for the message. The
- new value of the flags are returned as if a FETCH
- of those flags was done.
- Crispin Standards Track [Page 45]
- RFC 2060 IMAP4rev1 December 1996
- +FLAGS.SILENT <flag list>
- Equivalent to +FLAGS, but without returning a new
- value.
- -FLAGS <flag list>
- Remove the argument from the flags for the message.
- The new value of the flags are returned as if a
- FETCH of those flags was done.
- -FLAGS.SILENT <flag list>
- Equivalent to -FLAGS, but without returning a new
- value.
- Example: C: A003 STORE 2:4 +FLAGS (Deleted)
- S: * 2 FETCH FLAGS (Deleted Seen)
- S: * 3 FETCH FLAGS (Deleted)
- S: * 4 FETCH FLAGS (Deleted Flagged Seen)
- S: A003 OK STORE completed
- 6.4.7. COPY Command
- Arguments: message set
- mailbox name
- Responses: no specific responses for this command
- Result: OK - copy completed
- NO - copy error: can't copy those messages or to that
- name
- BAD - command unknown or arguments invalid
- The COPY command copies the specified message(s) to the end of the
- specified destination mailbox. The flags and internal date of the
- message(s) SHOULD be preserved in the copy.
- If the destination mailbox does not exist, a server SHOULD return
- an error. It SHOULD NOT automatically create the mailbox. Unless
- it is certain that the destination mailbox can not be created, the
- server MUST send the response code "[TRYCREATE]" as the prefix of
- the text of the tagged NO response. This gives a hint to the
- client that it can attempt a CREATE command and retry the COPY if
- the CREATE is successful.
- Crispin Standards Track [Page 46]
- RFC 2060 IMAP4rev1 December 1996
- If the COPY command is unsuccessful for any reason, server
- implementations MUST restore the destination mailbox to its state
- before the COPY attempt.
- Example: C: A003 COPY 2:4 MEETING
- S: A003 OK COPY completed
- 6.4.8. UID Command
- Arguments: command name
- command arguments
- Responses: untagged responses: FETCH, SEARCH
- Result: OK - UID command completed
- NO - UID command error
- BAD - command unknown or arguments invalid
- The UID command has two forms. In the first form, it takes as its
- arguments a COPY, FETCH, or STORE command with arguments
- appropriate for the associated command. However, the numbers in
- the message set argument are unique identifiers instead of message
- sequence numbers.
- In the second form, the UID command takes a SEARCH command with
- SEARCH command arguments. The interpretation of the arguments is
- the same as with SEARCH; however, the numbers returned in a SEARCH
- response for a UID SEARCH command are unique identifiers instead
- of message sequence numbers. For example, the command UID SEARCH
- 1:100 UID 443:557 returns the unique identifiers corresponding to
- the intersection of the message sequence number set 1:100 and the
- UID set 443:557.
- Message set ranges are permitted; however, there is no guarantee
- that unique identifiers be contiguous. A non-existent unique
- identifier within a message set range is ignored without any error
- message generated.
- The number after the "*" in an untagged FETCH response is always a
- message sequence number, not a unique identifier, even for a UID
- command response. However, server implementations MUST implicitly
- include the UID message data item as part of any FETCH response
- caused by a UID command, regardless of whether a UID was specified
- as a message data item to the FETCH.
- Crispin Standards Track [Page 47]
- RFC 2060 IMAP4rev1 December 1996
- Example: C: A999 UID FETCH 4827313:4828442 FLAGS
- S: * 23 FETCH (FLAGS (Seen) UID 4827313)
- S: * 24 FETCH (FLAGS (Seen) UID 4827943)
- S: * 25 FETCH (FLAGS (Seen) UID 4828442)
- S: A999 UID FETCH completed
- 6.5. Client Commands - Experimental/Expansion
- 6.5.1. X<atom> Command
- Arguments: implementation defined
- Responses: implementation defined
- Result: OK - command completed
- NO - failure
- BAD - command unknown or arguments invalid
- Any command prefixed with an X is an experimental command.
- Commands which are not part of this specification, a standard or
- standards-track revision of this specification, or an IESG-
- approved experimental protocol, MUST use the X prefix.
- Any added untagged responses issued by an experimental command
- MUST also be prefixed with an X. Server implementations MUST NOT
- send any such untagged responses, unless the client requested it
- by issuing the associated experimental command.
- Example: C: a441 CAPABILITY
- S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN
- S: a441 OK CAPABILITY completed
- C: A442 XPIG-LATIN
- S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay
- S: A442 OK XPIG-LATIN ompleted-cay
- 7. Server Responses
- Server responses are in three forms: status responses, server data,
- and command continuation request. The information contained in a
- server response, identified by "Contents:" in the response
- descriptions below, is described by function, not by syntax. The
- precise syntax of server responses is described in the Formal Syntax
- section.
- The client MUST be prepared to accept any response at all times.
- Crispin Standards Track [Page 48]
- RFC 2060 IMAP4rev1 December 1996
- Status responses can be tagged or untagged. Tagged status responses
- indicate the completion result (OK, NO, or BAD status) of a client
- command, and have a tag matching the command.
- Some status responses, and all server data, are untagged. An
- untagged response is indicated by the token "*" instead of a tag.
- Untagged status responses indicate server greeting, or server status
- that does not indicate the completion of a command (for example, an
- impending system shutdown alert). For historical reasons, untagged
- server data responses are also called "unsolicited data", although
- strictly speaking only unilateral server data is truly "unsolicited".
- Certain server data MUST be recorded by the client when it is
- received; this is noted in the description of that data. Such data
- conveys critical information which affects the interpretation of all
- subsequent commands and responses (e.g. updates reflecting the
- creation or destruction of messages).
- Other server data SHOULD be recorded for later reference; if the
- client does not need to record the data, or if recording the data has
- no obvious purpose (e.g. a SEARCH response when no SEARCH command is
- in progress), the data SHOULD be ignored.
- An example of unilateral untagged server data occurs when the IMAP
- connection is in selected state. In selected state, the server
- checks the mailbox for new messages as part of command execution.
- Normally, this is part of the execution of every command; hence, a
- NOOP command suffices to check for new messages. If new messages are
- found, the server sends untagged EXISTS and RECENT responses
- reflecting the new size of the mailbox. Server implementations that
- offer multiple simultaneous access to the same mailbox SHOULD also
- send appropriate unilateral untagged FETCH and EXPUNGE responses if
- another agent changes the state of any message flags or expunges any
- messages.
- Command continuation request responses use the token "+" instead of a
- tag. These responses are sent by the server to indicate acceptance
- of an incomplete client command and readiness for the remainder of
- the command.
- 7.1. Server Responses - Status Responses
- Status responses are OK, NO, BAD, PREAUTH and BYE. OK, NO, and BAD
- may be tagged or untagged. PREAUTH and BYE are always untagged.
- Status responses MAY include an OPTIONAL "response code". A response
- code consists of data inside square brackets in the form of an atom,
- possibly followed by a space and arguments. The response code
- Crispin Standards Track [Page 49]
- RFC 2060 IMAP4rev1 December 1996
- contains additional information or status codes for client software
- beyond the OK/NO/BAD condition, and are defined when there is a
- specific action that a client can take based upon the additional
- information.
- The currently defined response codes are:
- ALERT The human-readable text contains a special alert
- that MUST be presented to the user in a fashion
- that calls the user's attention to the message.
- NEWNAME Followed by a mailbox name and a new mailbox name.
- A SELECT or EXAMINE is failing because the target
- mailbox name no longer exists because it was
- renamed to the new mailbox name. This is a hint to
- the client that the operation can succeed if the
- SELECT or EXAMINE is reissued with the new mailbox
- name.
- PARSE The human-readable text represents an error in
- parsing the [RFC-822] header or [MIME-IMB] headers
- of a message in the mailbox.
- PERMANENTFLAGS Followed by a parenthesized list of flags,
- indicates which of the known flags that the client
- can change permanently. Any flags that are in the
- FLAGS untagged response, but not the PERMANENTFLAGS
- list, can not be set permanently. If the client
- attempts to STORE a flag that is not in the
- PERMANENTFLAGS list, the server will either reject
- it with a NO reply or store the state for the
- remainder of the current session only. The
- PERMANENTFLAGS list can also include the special
- flag *, which indicates that it is possible to
- create new keywords by attempting to store those
- flags in the mailbox.
- READ-ONLY The mailbox is selected read-only, or its access
- while selected has changed from read-write to
- read-only.
- READ-WRITE The mailbox is selected read-write, or its access
- while selected has changed from read-only to
- read-write.
- Crispin Standards Track [Page 50]
- RFC 2060 IMAP4rev1 December 1996
- TRYCREATE An APPEND or COPY attempt is failing because the
- target mailbox does not exist (as opposed to some
- other reason). This is a hint to the client that
- the operation can succeed if the mailbox is first
- created by the CREATE command.
- UIDVALIDITY Followed by a decimal number, indicates the unique
- identifier validity value.
- UNSEEN Followed by a decimal number, indicates the number
- of the first message without the Seen flag set.
- Additional response codes defined by particular client or server
- implementations SHOULD be prefixed with an "X" until they are
- added to a revision of this protocol. Client implementations
- SHOULD ignore response codes that they do not recognize.
- 7.1.1. OK Response
- Contents: OPTIONAL response code
- human-readable text
- The OK response indicates an information message from the server.
- When tagged, it indicates successful completion of the associated
- command. The human-readable text MAY be presented to the user as
- an information message. The untagged form indicates an
- information-only message; the nature of the information MAY be
- indicated by a response code.
- The untagged form is also used as one of three possible greetings
- at connection startup. It indicates that the connection is not
- yet authenticated and that a LOGIN command is needed.
- Example: S: * OK IMAP4rev1 server ready
- C: A001 LOGIN fred blurdybloop
- S: * OK [ALERT] System shutdown in 10 minutes
- S: A001 OK LOGIN Completed
- 7.1.2. NO Response
- Contents: OPTIONAL response code
- human-readable text
- The NO response indicates an operational error message from the
- server. When tagged, it indicates unsuccessful completion of the
- associated command. The untagged form indicates a warning; the
- command can still complete successfully. The human-readable text
- describes the condition.
- Crispin Standards Track [Page 51]
- RFC 2060 IMAP4rev1 December 1996
- Example: C: A222 COPY 1:2 owatagusiam
- S: * NO Disk is 98% full, please delete unnecessary data
- S: A222 OK COPY completed
- C: A223 COPY 3:200 blurdybloop
- S: * NO Disk is 98% full, please delete unnecessary data
- S: * NO Disk is 99% full, please delete unnecessary data
- S: A223 NO COPY failed: disk is full
- 7.1.3. BAD Response
- Contents: OPTIONAL response code
- human-readable text
- The BAD response indicates an error message from the server. When
- tagged, it reports a protocol-level error in the client's command;
- the tag indicates the command that caused the error. The untagged
- form indicates a protocol-level error for which the associated
- command can not be determined; it can also indicate an internal
- server failure. The human-readable text describes the condition.
- Example: C: ...very long command line...
- S: * BAD Command line too long
- C: ...empty line...
- S: * BAD Empty command line
- C: A443 EXPUNGE
- S: * BAD Disk crash, attempting salvage to a new disk!
- S: * OK Salvage successful, no data lost
- S: A443 OK Expunge completed
- 7.1.4. PREAUTH Response
- Contents: OPTIONAL response code
- human-readable text
- The PREAUTH response is always untagged, and is one of three
- possible greetings at connection startup. It indicates that the
- connection has already been authenticated by external means and
- thus no LOGIN command is needed.
- Example: S: * PREAUTH IMAP4rev1 server logged in as Smith
- 7.1.5. BYE Response
- Contents: OPTIONAL response code
- human-readable text
- Crispin Standards Track [Page 52]
- RFC 2060 IMAP4rev1 December 1996
- The BYE response is always untagged, and indicates that the server
- is about to close the connection. The human-readable text MAY be
- displayed to the user in a status report by the client. The BYE
- response is sent under one of four conditions:
- 1) as part of a normal logout sequence. The server will close
- the connection after sending the tagged OK response to the
- LOGOUT command.
- 2) as a panic shutdown announcement. The server closes the
- connection immediately.
- 3) as an announcement of an inactivity autologout. The server
- closes the connection immediately.
- 4) as one of three possible greetings at connection startup,
- indicating that the server is not willing to accept a
- connection from this client. The server closes the
- connection immediately.
- The difference between a BYE that occurs as part of a normal
- LOGOUT sequence (the first case) and a BYE that occurs because of
- a failure (the other three cases) is that the connection closes
- immediately in the failure case.
- Example: S: * BYE Autologout; idle for too long
- 7.2. Server Responses - Server and Mailbox Status
- These responses are always untagged. This is how server and mailbox
- status data are transmitted from the server to the client. Many of
- these responses typically result from a command with the same name.
- 7.2.1. CAPABILITY Response
- Contents: capability listing
- The CAPABILITY response occurs as a result of a CAPABILITY
- command. The capability listing contains a space-separated
- listing of capability names that the server supports. The
- capability listing MUST include the atom "IMAP4rev1".
- A capability name which begins with "AUTH=" indicates that the
- server supports that particular authentication mechanism.
- Crispin Standards Track [Page 53]
- RFC 2060 IMAP4rev1 December 1996
- Other capability names indicate that the server supports an
- extension, revision, or amendment to the IMAP4rev1 protocol.
- Server responses MUST conform to this document until the client
- issues a command that uses the associated capability.
- Capability names MUST either begin with "X" or be standard or
- standards-track IMAP4rev1 extensions, revisions, or amendments
- registered with IANA. A server MUST NOT offer unregistered or
- non-standard capability names, unless such names are prefixed with
- an "X".
- Client implementations SHOULD NOT require any capability name
- other than "IMAP4rev1", and MUST ignore any unknown capability
- names.
- Example: S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN
- 7.2.2. LIST Response
- Contents: name attributes
- hierarchy delimiter
- name
- The LIST response occurs as a result of a LIST command. It
- returns a single name that matches the LIST specification. There
- can be multiple LIST responses for a single LIST command.
- Four name attributes are defined:
- Noinferiors It is not possible for any child levels of
- hierarchy to exist under this name; no child levels
- exist now and none can be created in the future.
- Noselect It is not possible to use this name as a selectable
- mailbox.
- Marked The mailbox has been marked "interesting" by the
- server; the mailbox probably contains messages that
- have been added since the last time the mailbox was
- selected.
- Unmarked The mailbox does not contain any additional
- messages since the last time the mailbox was
- selected.
- If it is not feasible for the server to determine whether the
- mailbox is "interesting" or not, or if the name is a Noselect
- name, the server SHOULD NOT send either Marked or Unmarked.
- Crispin Standards Track [Page 54]
- RFC 2060 IMAP4rev1 December 1996
- The hierarchy delimiter is a character used to delimit levels of
- hierarchy in a mailbox name. A client can use it to create child
- mailboxes, and to search higher or lower levels of naming
- hierarchy. All children of a top-level hierarchy node MUST use
- the same separator character. A NIL hierarchy delimiter means
- that no hierarchy exists; the name is a "flat" name.
- The name represents an unambiguous left-to-right hierarchy, and
- MUST be valid for use as a reference in LIST and LSUB commands.
- Unless Noselect is indicated, the name MUST also be valid as an
- argument for commands, such as SELECT, that accept mailbox
- names.
- Example: S: * LIST (Noselect) "/" ~/Mail/foo
- 7.2.3. LSUB Response
- Contents: name attributes
- hierarchy delimiter
- name
- The LSUB response occurs as a result of an LSUB command. It
- returns a single name that matches the LSUB specification. There
- can be multiple LSUB responses for a single LSUB command. The
- data is identical in format to the LIST response.
- Example: S: * LSUB () "." #news.comp.mail.misc
- 7.2.4 STATUS Response
- Contents: name
- status parenthesized list
- The STATUS response occurs as a result of an STATUS command. It
- returns the mailbox name that matches the STATUS specification and
- the requested mailbox status information.
- Example: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)
- 7.2.5. SEARCH Response
- Contents: zero or more numbers
- Crispin Standards Track [Page 55]
- RFC 2060 IMAP4rev1 December 1996
- The SEARCH response occurs as a result of a SEARCH or UID SEARCH
- command. The number(s) refer to those messages that match the
- search criteria. For SEARCH, these are message sequence numbers;
- for UID SEARCH, these are unique identifiers. Each number is
- delimited by a space.
- Example: S: * SEARCH 2 3 6
- 7.2.6. FLAGS Response
- Contents: flag parenthesized list
- The FLAGS response occurs as a result of a SELECT or EXAMINE
- command. The flag parenthesized list identifies the flags (at a
- minimum, the system-defined flags) that are applicable for this
- mailbox. Flags other than the system flags can also exist,
- depending on server implementation.
- The update from the FLAGS response MUST be recorded by the client.
- Example: S: * FLAGS (Answered Flagged Deleted Seen Draft)
- 7.3. Server Responses - Mailbox Size
- These responses are always untagged. This is how changes in the size
- of the mailbox are trasnmitted from the server to the client.
- Immediately following the "*" token is a number that represents a
- message count.
- 7.3.1. EXISTS Response
- Contents: none
- The EXISTS response reports the number of messages in the mailbox.
- This response occurs as a result of a SELECT or EXAMINE command,
- and if the size of the mailbox changes (e.g. new mail).
- The update from the EXISTS response MUST be recorded by the
- client.
- Example: S: * 23 EXISTS
- Crispin Standards Track [Page 56]
- RFC 2060 IMAP4rev1 December 1996
- 7.3.2. RECENT Response
- Contents: none
- The RECENT response reports the number of messages with the
- Recent flag set. This response occurs as a result of a SELECT or
- EXAMINE command, and if the size of the mailbox changes (e.g. new
- mail).
- Note: It is not guaranteed that the message sequence numbers of
- recent messages will be a contiguous range of the highest n
- messages in the mailbox (where n is the value reported by the
- RECENT response). Examples of situations in which this is not
- the case are: multiple clients having the same mailbox open
- (the first session to be notified will see it as recent, others
- will probably see it as non-recent), and when the mailbox is
- re-ordered by a non-IMAP agent.
- The only reliable way to identify recent messages is to look at
- message flags to see which have the Recent flag set, or to do
- a SEARCH RECENT.
- The update from the RECENT response MUST be recorded by the
- client.
- Example: S: * 5 RECENT
- 7.4. Server Responses - Message Status
- These responses are always untagged. This is how message data are
- transmitted from the server to the client, often as a result of a
- command with the same name. Immediately following the "*" token is a
- number that represents a message sequence number.
- 7.4.1. EXPUNGE Response
- Contents: none
- The EXPUNGE response reports that the specified message sequence
- number has been permanently removed from the mailbox. The message
- sequence number for each successive message in the mailbox is
- immediately decremented by 1, and this decrement is reflected in
- message sequence numbers in subsequent responses (including other
- untagged EXPUNGE responses).
- As a result of the immediate decrement rule, message sequence
- numbers that appear in a set of successive EXPUNGE responses
- depend upon whether the messages are removed starting from lower
- Crispin Standards Track [Page 57]
- RFC 2060 IMAP4rev1 December 1996
- numbers to higher numbers, or from higher numbers to lower
- numbers. For example, if the last 5 messages in a 9-message
- mailbox are expunged; a "lower to higher" server will send five
- untagged EXPUNGE responses for message sequence number 5, whereas
- a "higher to lower server" will send successive untagged EXPUNGE
- responses for message sequence numbers 9, 8, 7, 6, and 5.
- An EXPUNGE response MUST NOT be sent when no command is in
- progress; nor while responding to a FETCH, STORE, or SEARCH
- command. This rule is necessary to prevent a loss of
- synchronization of message sequence numbers between client and
- server.
- The update from the EXPUNGE response MUST be recorded by the
- client.
- Example: S: * 44 EXPUNGE
- 7.4.2. FETCH Response
- Contents: message data
- The FETCH response returns data about a message to the client.
- The data are pairs of data item names and their values in
- parentheses. This response occurs as the result of a FETCH or
- STORE command, as well as by unilateral server decision (e.g. flag
- updates).
- The current data items are:
- BODY A form of BODYSTRUCTURE without extension data.
- BODY[<section>]<<origin_octet>>
- A string expressing the body contents of the
- specified section. The string SHOULD be
- interpreted by the client according to the content
- transfer encoding, body type, and subtype.
- If the origin octet is specified, this string is a
- substring of the entire body contents, starting at
- that origin octet. This means that BODY[]<0> MAY
- be truncated, but BODY[] is NEVER truncated.
- 8-bit textual data is permitted if a [CHARSET]
- identifier is part of the body parameter
- parenthesized list for this section. Note that
- headers (part specifiers HEADER or MIME, or the
- header portion of a MESSAGE/RFC822 part), MUST be
- Crispin Standards Track [Page 58]
- RFC 2060 IMAP4rev1 December 1996
- 7-bit; 8-bit characters are not permitted in
- headers. Note also that the blank line at the end
- of the header is always included in header data.
- Non-textual data such as binary data MUST be
- transfer encoded into a textual form such as BASE64
- prior to being sent to the client. To derive the
- original binary data, the client MUST decode the
- transfer encoded string.
- BODYSTRUCTURE A parenthesized list that describes the [MIME-IMB]
- body structure of a message. This is computed by
- the server by parsing the [MIME-IMB] header fields,
- defaulting various fields as necessary.
- For example, a simple text message of 48 lines and
- 2279 octets can have a body structure of: ("TEXT"
- "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 2279
- 48)
- Multiple parts are indicated by parenthesis
- nesting. Instead of a body type as the first
- element of the parenthesized list there is a nested
- body. The second element of the parenthesized list
- is the multipart subtype (mixed, digest, parallel,
- alternative, etc.).
- For example, a two part message consisting of a
- text and a BASE645-encoded text attachment can have
- a body structure of: (("TEXT" "PLAIN" ("CHARSET"
- "US-ASCII") NIL NIL "7BIT" 1152 23)("TEXT" "PLAIN"
- ("CHARSET" "US-ASCII" "NAME" "cc.diff")
- "<960723163407.20117h@cac.washington.edu>"
- "Compiler diff" "BASE64" 4554 73) "MIXED"))
- Extension data follows the multipart subtype.
- Extension data is never returned with the BODY
- fetch, but can be returned with a BODYSTRUCTURE
- fetch. Extension data, if present, MUST be in the
- defined order.
- The extension data of a multipart body part are in
- the following order:
- body parameter parenthesized list
- A parenthesized list of attribute/value pairs
- [e.g. ("foo" "bar" "baz" "rag") where "bar" is
- the value of "foo" and "rag" is the value of
- Crispin Standards Track [Page 59]
- RFC 2060 IMAP4rev1 December 1996
- "baz"] as defined in [MIME-IMB].
- body disposition
- A parenthesized list, consisting of a
- disposition type string followed by a
- parenthesized list of disposition
- attribute/value pairs. The disposition type and
- attribute names will be defined in a future
- standards-track revision to [DISPOSITION].
- body language
- A string or parenthesized list giving the body
- language value as defined in [LANGUAGE-TAGS].
- Any following extension data are not yet defined in
- this version of the protocol. Such extension data
- can consist of zero or more NILs, strings, numbers,
- or potentially nested parenthesized lists of such
- data. Client implementations that do a
- BODYSTRUCTURE fetch MUST be prepared to accept such
- extension data. Server implementations MUST NOT
- send such extension data until it has been defined
- by a revision of this protocol.
- The basic fields of a non-multipart body part are
- in the following order:
- body type
- A string giving the content media type name as
- defined in [MIME-IMB].
- body subtype
- A string giving the content subtype name as
- defined in [MIME-IMB].
- body parameter parenthesized list
- A parenthesized list of attribute/value pairs
- [e.g. ("foo" "bar" "baz" "rag") where "bar" is
- the value of "foo" and "rag" is the value of
- "baz"] as defined in [MIME-IMB].
- body id
- A string giving the content id as defined in
- [MIME-IMB].
- body description
- A string giving the content description as
- defined in [MIME-IMB].
- Crispin Standards Track [Page 60]
- RFC 2060 IMAP4rev1 December 1996
- body encoding
- A string giving the content transfer encoding as
- defined in [MIME-IMB].
- body size
- A number giving the size of the body in octets.
- Note that this size is the size in its transfer
- encoding and not the resulting size after any
- decoding.
- A body type of type MESSAGE and subtype RFC822
- contains, immediately after the basic fields, the
- envelope structure, body structure, and size in
- text lines of the encapsulated message.
- A body type of type TEXT contains, immediately
- after the basic fields, the size of the body in
- text lines. Note that this size is the size in its
- content transfer encoding and not the resulting
- size after any decoding.
- Extension data follows the basic fields and the
- type-specific fields listed above. Extension data
- is never returned with the BODY fetch, but can be
- returned with a BODYSTRUCTURE fetch. Extension
- data, if present, MUST be in the defined order.
- The extension data of a non-multipart body part are
- in the following order:
- body MD5
- A string giving the body MD5 value as defined in
- [MD5].
- body disposition
- A parenthesized list with the same content and
- function as the body disposition for a multipart
- body part.
- body language
- A string or parenthesized list giving the body
- language value as defined in [LANGUAGE-TAGS].
- Any following extension data are not yet defined in
- this version of the protocol, and would be as
- described above under multipart extension data.
- Crispin Standards Track [Page 61]
- RFC 2060 IMAP4rev1 December 1996
- ENVELOPE A parenthesized list that describes the envelope
- structure of a message. This is computed by the
- server by parsing the [RFC-822] header into the
- component parts, defaulting various fields as
- necessary.
- The fields of the envelope structure are in the
- following order: date, subject, from, sender,
- reply-to, to, cc, bcc, in-reply-to, and message-id.
- The date, subject, in-reply-to, and message-id
- fields are strings. The from, sender, reply-to,
- to, cc, and bcc fields are parenthesized lists of
- address structures.
- An address structure is a parenthesized list that
- describes an electronic mail address. The fields
- of an address structure are in the following order:
- personal name, [SMTP] at-domain-list (source
- route), mailbox name, and host name.
- [RFC-822] group syntax is indicated by a special
- form of address structure in which the host name
- field is NIL. If the mailbox name field is also
- NIL, this is an end of group marker (semi-colon in
- RFC 822 syntax). If the mailbox name field is
- non-NIL, this is a start of group marker, and the
- mailbox name field holds the group name phrase.
- Any field of an envelope or address structure that
- is not applicable is presented as NIL. Note that
- the server MUST default the reply-to and sender
- fields from the from field; a client is not
- expected to know to do this.
- FLAGS A parenthesized list of flags that are set for this
- message.
- INTERNALDATE A string representing the internal date of the
- message.
- RFC822 Equivalent to BODY[].
- RFC822.HEADER Equivalent to BODY.PEEK[HEADER].
- RFC822.SIZE A number expressing the [RFC-822] size of the
- message.
- RFC822.TEXT Equivalent to BODY[TEXT].
- Crispin Standards Track [Page 62]
- RFC 2060 IMAP4rev1 December 1996
- UID A number expressing the unique identifier of the
- message.
- Example: S: * 23 FETCH (FLAGS (Seen) RFC822.SIZE 44827)
- 7.5. Server Responses - Command Continuation Request
- The command continuation request response is indicated by a "+" token
- instead of a tag. This form of response indicates that the server is
- ready to accept the continuation of a command from the client. The
- remainder of this response is a line of text.
- This response is used in the AUTHORIZATION command to transmit server
- data to the client, and request additional client data. This
- response is also used if an argument to any command is a literal.
- The client is not permitted to send the octets of the literal unless
- the server indicates that it expects it. This permits the server to
- process commands and reject errors on a line-by-line basis. The
- remainder of the command, including the CRLF that terminates a
- command, follows the octets of the literal. If there are any
- additional command arguments the literal octets are followed by a
- space and those arguments.
- Example: C: A001 LOGIN {11}
- S: + Ready for additional command text
- C: FRED FOOBAR {7}
- S: + Ready for additional command text
- C: fat man
- S: A001 OK LOGIN completed
- C: A044 BLURDYBLOOP {102856}
- S: A044 BAD No such command as "BLURDYBLOOP"
- 8. Sample IMAP4rev1 connection
- The following is a transcript of an IMAP4rev1 connection. A long
- line in this sample is broken for editorial clarity.
- S: * OK IMAP4rev1 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
- Crispin Standards Track [Page 63]
- RFC 2060 IMAP4rev1 December 1996
- S: a002 OK [READ-WRITE] SELECT completed
- C: a003 fetch 12 full
- S: * 12 FETCH (FLAGS (Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700"
- RFC822.SIZE 4286 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)"
- "IMAP4rev1 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 body[header]
- S: * 12 FETCH (BODY[HEADER] {350}
- S: Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)
- S: From: Terry Gray <gray@cac.washington.edu>
- S: Subject: IMAP4rev1 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 IMAP4rev1 server terminating connection
- S: a006 OK LOGOUT completed
- 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 one or more commas.
- In the case of alternative or optional rules in which a later rule
- overlaps an earlier rule, the rule which is listed earlier MUST take
- priority. For example, "Seen" when parsed as a flag is the Seen
- flag name and not a flag_extension, even though "Seen" could be
- parsed as a flag_extension. Some, but not all, instances of this
- rule are noted below.
- Crispin Standards Track [Page 64]
- RFC 2060 IMAP4rev1 December 1996
- 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.
- address ::= "(" addr_name SPACE addr_adl SPACE addr_mailbox
- SPACE addr_host ")"
- addr_adl ::= nstring
- ;; Holds route from [RFC-822] route-addr if
- ;; non-NIL
- addr_host ::= nstring
- ;; NIL indicates [RFC-822] group syntax.
- ;; Otherwise, holds [RFC-822] domain name
- addr_mailbox ::= nstring
- ;; NIL indicates end of [RFC-822] group; if
- ;; non-NIL and addr_host is NIL, holds
- ;; [RFC-822] group name.
- ;; Otherwise, holds [RFC-822] local-part
- addr_name ::= nstring
- ;; Holds phrase from [RFC-822] mailbox if
- ;; non-NIL
- 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
- atom ::= 1*ATOM_CHAR
- ATOM_CHAR ::= <any CHAR except atom_specials>
- atom_specials ::= "(" / ")" / "{" / SPACE / CTL / list_wildcards /
- quoted_specials
- Crispin Standards Track [Page 65]
- RFC 2060 IMAP4rev1 December 1996
- authenticate ::= "AUTHENTICATE" SPACE auth_type *(CRLF base64)
- auth_type ::= atom
- ;; Defined by [IMAP-AUTH]
- 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 body_fld_dsp
- [SPACE body_fld_lang
- [SPACE 1#body_extension]]]
- ;; MUST NOT be returned on non-extensible
- ;; "BODY" fetch
- body_ext_mpart ::= body_fld_param
- [SPACE body_fld_dsp SPACE body_fld_lang
- [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_dsp ::= "(" string SPACE body_fld_param ")" / nil
- body_fld_enc ::= (<"> ("7BIT" / "8BIT" / "BINARY" / "BASE64"/
- "QUOTED-PRINTABLE") <">) / string
- body_fld_id ::= nstring
- body_fld_lang ::= nstring / "(" 1#string ")"
- Crispin Standards Track [Page 66]
- RFC 2060 IMAP4rev1 December 1996
- body_fld_lines ::= number
- body_fld_md5 ::= nstring
- body_fld_octets ::= number
- body_fld_param ::= "(" 1#(string SPACE string) ")" / nil
- body_type_1part ::= (body_type_basic / body_type_msg / body_type_text)
- [SPACE body_ext_1part]
- body_type_basic ::= media_basic SPACE body_fields
- ;; MESSAGE subtype MUST NOT be "RFC822"
- body_type_mpart ::= 1*body SPACE media_subtype
- [SPACE body_ext_mpart]
- body_type_msg ::= media_message SPACE body_fields SPACE envelope
- SPACE body SPACE body_fld_lines
- body_type_text ::= media_text SPACE body_fields SPACE body_fld_lines
- capability ::= "AUTH=" auth_type / atom
- ;; New capabilities MUST begin with "X" or be
- ;; registered with IANA as standard or
- ;; standards-track
- capability_data ::= "CAPABILITY" SPACE [1#capability SPACE] "IMAP4rev1"
- [SPACE 1#capability]
- ;; IMAP4rev1 servers which offer RFC 1730
- ;; compatibility MUST list "IMAP4" as the first
- ;; 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 / list / lsub /
- rename / select / status / subscribe / unsubscribe
- ;; Valid only in Authenticated or Selected state
- Crispin Standards Track [Page 67]
- RFC 2060 IMAP4rev1 December 1996
- command_nonauth ::= login / authenticate
- ;; Valid only when in Non-Authenticated state
- command_select ::= "CHECK" / "CLOSE" / "EXPUNGE" /
- copy / fetch / 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, 0x0D>
- 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 ::= 4digit
- date_time ::= <"> date_day_fixed "-" date_month "-" date_year
- SPACE time SPACE zone <">
- 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"
- Crispin Standards Track [Page 68]
- RFC 2060 IMAP4rev1 December 1996
- 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 ::= "ENVELOPE" / "FLAGS" / "INTERNALDATE" /
- "RFC822" [".HEADER" / ".SIZE" / ".TEXT"] /
- "BODY" ["STRUCTURE"] / "UID" /
- "BODY" [".PEEK"] section
- ["<" number "." nz_number ">"]
- 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
- Crispin Standards Track [Page 69]
- RFC 2060 IMAP4rev1 December 1996
- flag_list ::= "(" #flag ")"
- greeting ::= "*" SPACE (resp_cond_auth / resp_cond_bye) CRLF
- header_fld_name ::= astring
- header_list ::= "(" 1#header_fld_name ")"
- 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. All case variants of
- ;; INBOX (e.g. "iNbOx") MUST be interpreted as INBOX
- ;; not as an astring. Refer to section 5.1 for
- ;; further semantic details of mailbox names.
- mailbox_data ::= "FLAGS" SPACE flag_list /
- "LIST" SPACE mailbox_list /
- "LSUB" SPACE mailbox_list /
- "MAILBOX" SPACE text /
- "SEARCH" [SPACE 1#nz_number] /
- "STATUS" SPACE mailbox SPACE
- "(" #<status_att number ")" /
- number SPACE "EXISTS" / number SPACE "RECENT"
- mailbox_list ::= "(" #("Marked" / "Noinferiors" /
- "Noselect" / "Unmarked" / flag_extension) ")"
- SPACE (<"> QUOTED_CHAR <"> / nil) SPACE mailbox
- media_basic ::= (<"> ("APPLICATION" / "AUDIO" / "IMAGE" /
- "MESSAGE" / "VIDEO") <">) / string)
- SPACE media_subtype
- ;; Defined in [MIME-IMT]
- media_message ::= <"> "MESSAGE" <"> SPACE <"> "RFC822" <">
- Crispin Standards Track [Page 70]
- RFC 2060 IMAP4rev1 December 1996
- ;; Defined in [MIME-IMT]
- media_subtype ::= string
- ;; Defined in [MIME-IMT]
- media_text ::= <"> "TEXT" <"> SPACE media_subtype
- ;; Defined in [MIME-IMT]
- message_data ::= nz_number SPACE ("EXPUNGE" /
- ("FETCH" SPACE msg_att))
- msg_att ::= "(" 1#("ENVELOPE" SPACE envelope /
- "FLAGS" SPACE "(" #(flag / "Recent") ")" /
- "INTERNALDATE" SPACE date_time /
- "RFC822" [".HEADER" / ".TEXT"] SPACE nstring /
- "RFC822.SIZE" SPACE number /
- "BODY" ["STRUCTURE"] SPACE body /
- "BODY" section ["<" number ">"] SPACE nstring /
- "UID" SPACE uniqueid) ")"
- 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)
- 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
- response ::= *(continue_req / response_data) response_done
- response_data ::= "*" SPACE (resp_cond_state / resp_cond_bye /
- mailbox_data / message_data / capability_data)
- Crispin Standards Track [Page 71]
- RFC 2060 IMAP4rev1 December 1996
- CRLF
- response_done ::= response_tagged / response_fatal
- response_fatal ::= "*" SPACE resp_cond_bye CRLF
- ;; Server closes connection immediately
- 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
- resp_cond_state ::= ("OK" / "NO" / "BAD") SPACE resp_text
- ;; Status condition
- resp_text ::= ["[" resp_text_code "]" SPACE] (text_mime2 / text)
- ;; text SHOULD NOT begin with "[" or "="
- 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]
- 1#search_key
- ;; [CHARSET] MUST be registered with IANA
- search_key ::= "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" /
- ;; Above this line were in [IMAP2]
- "DRAFT" /
- "HEADER" SPACE header_fld_name 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 /
- Crispin Standards Track [Page 72]
- RFC 2060 IMAP4rev1 December 1996
- "UID" SPACE set / "UNDRAFT" / set /
- "(" 1#search_key ")"
- section ::= "[" [section_text / (nz_number *["." nz_number]
- ["." (section_text / "MIME")])] "]"
- section_text ::= "HEADER" / "HEADER.FIELDS" [".NOT"]
- SPACE header_list / "TEXT"
- 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>
- status ::= "STATUS" SPACE mailbox SPACE "(" 1#status_att ")"
- status_att ::= "MESSAGES" / "RECENT" / "UIDNEXT" / "UIDVALIDITY" /
- "UNSEEN"
- store ::= "STORE" SPACE set SPACE store_att_flags
- store_att_flags ::= (["+" / "-"] "FLAGS" [".SILENT"]) SPACE
- (flag_list / #flag)
- string ::= quoted / literal
- subscribe ::= "SUBSCRIBE" SPACE mailbox
- tag ::= 1*<any ATOM_CHAR except "+">
- text ::= 1*TEXT_CHAR
- Crispin Standards Track [Page 73]
- RFC 2060 IMAP4rev1 December 1996
- text_mime2 ::= "=?" <charset> "?" <encoding> "?"
- <encoded-text> "?="
- ;; Syntax defined in [MIME-HDRS]
- 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
- 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".
- 10. Author's Note
- This document is a revision or rewrite of earlier documents, and
- supercedes the protocol specification in those documents: RFC 1730,
- unpublished IMAP2bis.TXT document, RFC 1176, and RFC 1064.
- 11. Security Considerations
- IMAP4rev1 protocol transactions, including electronic mail data, are
- sent in the clear over the network unless 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.
- Crispin Standards Track [Page 74]
- RFC 2060 IMAP4rev1 December 1996
- 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
- University of Washington
- 4545 15th Aveneue NE
- Seattle, WA 98105-4527
- Phone: (206) 543-5762
- EMail: MRC@CAC.Washington.EDU
- Crispin Standards Track [Page 75]
- RFC 2060 IMAP4rev1 December 1996
- Appendices
- A. References
- [ACAP] Myers, J. "ACAP -- Application Configuration Access Protocol",
- Work in Progress.
- [CHARSET] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2,
- RFC 1700, USC/Information Sciences Institute, October 1994.
- [DISPOSITION] Troost, R., and Dorner, S., "Communicating Presentation
- Information in Internet Messages: The Content-Disposition Header",
- RFC 1806, June 1995.
- [IMAP-AUTH] Myers, J., "IMAP4 Authentication Mechanism", RFC 1731.
- Carnegie-Mellon University, December 1994.
- [IMAP-COMPAT] Crispin, M., "IMAP4 Compatibility with IMAP2bis", RFC
- 2061, University of Washington, November 1996.
- [IMAP-DISC] Austein, R., "Synchronization Operations for Disconnected
- IMAP4 Clients", Work in Progress.
- [IMAP-HISTORICAL] Crispin, M. "IMAP4 Compatibility with IMAP2 and
- IMAP2bis", RFC 1732, University of Washington, December 1994.
- [IMAP-MODEL] Crispin, M., "Distributed Electronic Mail Models in
- IMAP4", RFC 1733, University of Washington, December 1994.
- [IMAP-OBSOLETE] Crispin, M., "Internet Message Access Protocol -
- Obsolete Syntax", RFC 2062, University of Washington, November 1996.
- [IMAP2] Crispin, M., "Interactive Mail Access Protocol - Version 2",
- RFC 1176, University of Washington, August 1990.
- [LANGUAGE-TAGS] Alvestrand, H., "Tags for the Identification of
- Languages", RFC 1766, March 1995.
- [MD5] Myers, J., and M. Rose, "The Content-MD5 Header Field", RFC
- 1864, October 1995.
- [MIME-IMB] Freed, N., and N. Borenstein, "MIME (Multipurpose Internet
- Mail Extensions) Part One: Format of Internet Message Bodies", RFC
- 2045, November 1996.
- [MIME-IMT] Freed, N., and N. Borenstein, "MIME (Multipurpose
- Internet Mail Extensions) Part Two: Media Types", RFC 2046,
- November 1996.
- Crispin Standards Track [Page 76]
- RFC 2060 IMAP4rev1 December 1996
- [MIME-HDRS] Moore, K., "MIME (Multipurpose Internet Mail Extensions)
- Part Three: Message Header Extensions for Non-ASCII Text", RFC
- 2047, November 1996.
- [RFC-822] Crocker, D., "Standard for the Format of ARPA Internet Text
- Messages", STD 11, RFC 822, University of Delaware, August 1982.
- [SMTP] Postel, J., "Simple Mail Transfer Protocol", STD 10,
- RFC 821, USC/Information Sciences Institute, August 1982.
- [UTF-7] Goldsmith, D., and Davis, M., "UTF-7: A Mail-Safe
- Transformation Format of Unicode", RFC 1642, July 1994.
- B. Changes from RFC 1730
- 1) The STATUS command has been added.
- 2) Clarify in the formal syntax that the "#" construct can never
- refer to multiple spaces.
- 3) Obsolete syntax has been moved to a separate document.
- 4) The PARTIAL command has been obsoleted.
- 5) The RFC822.HEADER.LINES, RFC822.HEADER.LINES.NOT, RFC822.PEEK, and
- RFC822.TEXT.PEEK fetch attributes have been obsoleted.
- 6) The "<" origin "." size ">" suffix for BODY text attributes has
- been added.
- 7) The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and TEXT part
- specifiers have been added.
- 8) Support for Content-Disposition and Content-Language has been
- added.
- 9) The restriction on fetching nested MULTIPART parts has been
- removed.
- 10) Body part number 0 has been obsoleted.
- 11) Server-supported authenticators are now identified by
- capabilities.
- Crispin Standards Track [Page 77]
- RFC 2060 IMAP4rev1 December 1996
- 12) The capability that identifies this protocol is now called
- "IMAP4rev1". A server that provides backwards support for RFC 1730
- SHOULD emit the "IMAP4" capability in addition to "IMAP4rev1" in its
- CAPABILITY response. Because RFC-1730 required "IMAP4" to appear as
- the first capability, it MUST listed first in the response.
- 13) A description of the mailbox name namespace convention has been
- added.
- 14) A description of the international mailbox name convention has
- been added.
- 15) The UID-NEXT and UID-VALIDITY status items are now called UIDNEXT
- and UIDVALIDITY. This is a change from the IMAP STATUS
- Work in Progress and not from RFC-1730
- 16) Add a clarification that a null mailbox name argument to the LIST
- command returns an untagged LIST response with the hierarchy
- delimiter and root of the reference argument.
- 17) Define terms such as "MUST", "SHOULD", and "MUST NOT".
- 18) Add a section which defines message attributes and more
- thoroughly details the semantics of message sequence numbers, UIDs,
- and flags.
- 19) Add a clarification detailing the circumstances when a client may
- send multiple commands without waiting for a response, and the
- circumstances in which ambiguities may result.
- 20) Add a recommendation on server behavior for DELETE and RENAME
- when inferior hierarchical names of the given name exist.
- 21) Add a clarification that a mailbox name may not be unilaterally
- unsubscribed by the server, even if that mailbox name no longer
- exists.
- 22) Add a clarification that LIST should return its results quickly
- without undue delay.
- 23) Add a clarification that the date_time argument to APPEND sets
- the internal date of the message.
- 24) Add a clarification on APPEND behavior when the target mailbox is
- the currently selected mailbox.
- Crispin Standards Track [Page 78]
- RFC 2060 IMAP4rev1 December 1996
- 25) Add a clarification that external changes to flags should be
- always announced via an untagged FETCH even if the current command is
- a STORE with the ".SILENT" suffix.
- 26) Add a clarification that COPY appends to the target mailbox.
- 27) Add the NEWNAME response code.
- 28) Rewrite the description of the untagged BYE response to clarify
- its semantics.
- 29) Change the reference for the body MD5 to refer to the proper RFC.
- 30) Clarify that the formal syntax contains rules which may overlap,
- and that in the event of such an overlap the rule which occurs first
- takes precedence.
- 31) Correct the definition of body_fld_param.
- 32) More formal syntax for capability_data.
- 33) Clarify that any case variant of "INBOX" must be interpreted as
- INBOX.
- 34) Clarify that the human-readable text in resp_text should not
- begin with "[" or "=".
- 35) Change MIME references to Draft Standard documents.
- 36) Clarify Recent semantics.
- 37) Additional examples.
- C. Key Word Index
- +FLAGS <flag list> (store command data item) ............... 45
- +FLAGS.SILENT <flag list> (store command data item) ........ 46
- -FLAGS <flag list> (store command data item) ............... 46
- -FLAGS.SILENT <flag list> (store command data item) ........ 46
- ALERT (response code) ...................................... 50
- ALL (fetch item) ........................................... 41
- ALL (search key) ........................................... 38
- ANSWERED (search key) ...................................... 38
- APPEND (command) ........................................... 34
- AUTHENTICATE (command) ..................................... 20
- BAD (response) ............................................. 52
- BCC <string> (search key) .................................. 38
- BEFORE <date> (search key) ................................. 39
- Crispin Standards Track [Page 79]
- RFC 2060 IMAP4rev1 December 1996
- BODY (fetch item) .......................................... 41
- BODY (fetch result) ........................................ 58
- BODY <string> (search key) ................................. 39
- BODY.PEEK[<section>]<<partial>> (fetch item) ............... 44
- BODYSTRUCTURE (fetch item) ................................. 44
- BODYSTRUCTURE (fetch result) ............................... 59
- BODY[<section>]<<origin_octet>> (fetch result) ............. 58
- BODY[<section>]<<partial>> (fetch item) .................... 41
- BYE (response) ............................................. 52
- Body Structure (message attribute) ......................... 11
- CAPABILITY (command) ....................................... 18
- CAPABILITY (response) ...................................... 53
- CC <string> (search key) ................................... 39
- CHECK (command) ............................................ 36
- CLOSE (command) ............................................ 36
- COPY (command) ............................................. 46
- CREATE (command) ........................................... 25
- DELETE (command) ........................................... 26
- DELETED (search key) ....................................... 39
- DRAFT (search key) ......................................... 39
- ENVELOPE (fetch item) ...................................... 44
- ENVELOPE (fetch result) .................................... 62
- EXAMINE (command) .......................................... 24
- EXISTS (response) .......................................... 56
- EXPUNGE (command) .......................................... 37
- EXPUNGE (response) ......................................... 57
- Envelope Structure (message attribute) ..................... 11
- FAST (fetch item) .......................................... 44
- FETCH (command) ............................................ 41
- FETCH (response) ........................................... 58
- FLAGGED (search key) ....................................... 39
- FLAGS (fetch item) ......................................... 44
- FLAGS (fetch result) ....................................... 62
- FLAGS (response) ........................................... 56
- FLAGS <flag list> (store command data item) ................ 45
- FLAGS.SILENT <flag list> (store command data item) ......... 45
- FROM <string> (search key) ................................. 39
- FULL (fetch item) .......................................... 44
- Flags (message attribute) .................................. 9
- HEADER (part specifier) .................................... 41
- HEADER <field-name> <string> (search key) .................. 39
- HEADER.FIELDS <header_list> (part specifier) ............... 41
- HEADER.FIELDS.NOT <header_list> (part specifier) ........... 41
- INTERNALDATE (fetch item) .................................. 44
- INTERNALDATE (fetch result) ................................ 62
- Internal Date (message attribute) .......................... 10
- KEYWORD <flag> (search key) ................................ 39
- Keyword (type of flag) ..................................... 10
- Crispin Standards Track [Page 80]
- RFC 2060 IMAP4rev1 December 1996
- LARGER <n> (search key) .................................... 39
- LIST (command) ............................................. 30
- LIST (response) ............................................ 54
- LOGIN (command) ............................................ 22
- LOGOUT (command) ........................................... 20
- LSUB (command) ............................................. 32
- LSUB (response) ............................................ 55
- MAY (specification requirement term) ....................... 5
- MESSAGES (status item) ..................................... 33
- MIME (part specifier) ...................................... 42
- MUST (specification requirement term) ...................... 4
- MUST NOT (specification requirement term) .................. 4
- Message Sequence Number (message attribute) ................ 9
- NEW (search key) ........................................... 39
- NEWNAME (response code) .................................... 50
- NO (response) .............................................. 51
- NOOP (command) ............................................. 19
- NOT <search-key> (search key) .............................. 39
- OK (response) .............................................. 51
- OLD (search key) ........................................... 39
- ON <date> (search key) ..................................... 39
- OPTIONAL (specification requirement term) .................. 5
- OR <search-key1> <search-key2> (search key) ................ 39
- PARSE (response code) ...................................... 50
- PERMANENTFLAGS (response code) ............................. 50
- PREAUTH (response) ......................................... 52
- Permanent Flag (class of flag) ............................. 10
- READ-ONLY (response code) .................................. 50
- READ-WRITE (response code) ................................. 50
- RECENT (response) .......................................... 57
- RECENT (search key) ........................................ 39
- RECENT (status item) ....................................... 33
- RENAME (command) ........................................... 27
- REQUIRED (specification requirement term) .................. 4
- RFC822 (fetch item) ........................................ 44
- RFC822 (fetch result) ...................................... 63
- RFC822.HEADER (fetch item) ................................. 44
- RFC822.HEADER (fetch result) ............................... 62
- RFC822.SIZE (fetch item) ................................... 44
- RFC822.SIZE (fetch result) ................................. 62
- RFC822.TEXT (fetch item) ................................... 44
- RFC822.TEXT (fetch result) ................................. 62
- SEARCH (command) ........................................... 37
- SEARCH (response) .......................................... 55
- SEEN (search key) .......................................... 40
- SELECT (command) ........................................... 23
- SENTBEFORE <date> (search key) ............................. 40
- SENTON <date> (search key) ................................. 40
- Crispin Standards Track [Page 81]
- RFC 2060 IMAP4rev1 December 1996
- SENTSINCE <date> (search key) .............................. 40
- SHOULD (specification requirement term) .................... 5
- SHOULD NOT (specification requirement term) ................ 5
- SINCE <date> (search key) .................................. 40
- SMALLER <n> (search key) ................................... 40
- STATUS (command) ........................................... 33
- STATUS (response) .......................................... 55
- STORE (command) ............................................ 45
- SUBJECT <string> (search key) .............................. 40
- SUBSCRIBE (command) ........................................ 29
- Session Flag (class of flag) ............................... 10
- System Flag (type of flag) ................................. 9
- TEXT (part specifier) ...................................... 42
- TEXT <string> (search key) ................................. 40
- TO <string> (search key) ................................... 40
- TRYCREATE (response code) .................................. 51
- UID (command) .............................................. 47
- UID (fetch item) ........................................... 44
- UID (fetch result) ......................................... 63
- UID <message set> (search key) ............................. 40
- UIDNEXT (status item) ...................................... 33
- UIDVALIDITY (response code) ................................ 51
- UIDVALIDITY (status item) .................................. 34
- UNANSWERED (search key) .................................... 40
- UNDELETED (search key) ..................................... 40
- UNDRAFT (search key) ....................................... 40
- UNFLAGGED (search key) ..................................... 40
- UNKEYWORD <flag> (search key) .............................. 40
- UNSEEN (response code) ..................................... 51
- UNSEEN (search key) ........................................ 40
- UNSEEN (status item) ....................................... 34
- UNSUBSCRIBE (command) ...................................... 30
- Unique Identifier (UID) (message attribute) ................ 7
- X<atom> (command) .......................................... 48
- [RFC-822] Size (message attribute) ......................... 11
- Answered (system flag) .................................... 9
- Deleted (system flag) ..................................... 9
- Draft (system flag) ....................................... 9
- Flagged (system flag) ..................................... 9
- Marked (mailbox name attribute) ........................... 54
- Noinferiors (mailbox name attribute) ...................... 54
- Noselect (mailbox name attribute) ......................... 54
- Recent (system flag) ...................................... 10
- Seen (system flag) ........................................ 9
- Unmarked (mailbox name attribute) ......................... 54
- Crispin Standards Track [Page 82]