home *** CD-ROM | disk | FTP | other *** search
- *DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*
-
-
-
-
-
- Network Working Group M. Crispin
- Request for Comments: ???? Washington
- Extends: RFC 1176 December 1992
-
-
- IMAP2BIS -- EXTENSIONS TO THE IMAP2 PROTOCOL
-
-
- Status of this Memo
-
- This RFC defines optional extensions to the IMAP2 procotol for
- multi-part textual and non-textual Internet messages as per the
- Internet DRAFT "MIME (Multipurpose Internet Mail Extensions):
- Mechanisms for Specifying and Describing the Format of Internet
- Message Bodies" by Borenstein and Freed.
-
- This document also defines several additional optional functional
- enhancements to IMAP2.
-
- [ ** Delete this note upon publication as an RFC **
- The extensions discussed in this document are experimental and
- subject to change. It documents the state of these extensions
- as of December 1992. It is distributed for informational purposes
- only.
- In particular, additions may be made to IMAP2bis in subsequent
- versions of this draft of the IMAP2bis document. Persons planning
- on implementing these extensions are STRONGLY URGED to get in touch
- with the author before embarking on such a project.]
-
- The name of the resulting protocol is IMAP2bis. IMAP2bis extends
- but does not obsolete the base protocol described in RFC-1176. A
- few changes are made to the base protocol described in RFC-1176.
- It is believed that no existing implementations are affected by
- these changes; however, implementors may wish to verify that their
- IMAP2 implementations are IMAP2bis compatible.
-
- Although the IMAP2bis functional extensions are separable from each
- other based upon function, an RFC-1176 implementation is NOT IMAP2bis
- compliant (as opposed to IMAP2bis compatible) unless it implements
- ALL of the functional extensions and changes described here.
-
- Discussion and suggestions for improvement are requested. Please
- refer to the current edition of the "IAB Official Protocol Standard"
- for the standardization state and status of this protocol.
- Distribution of this memo is unlimited.
-
- This specification does not purport to apply to the IMAP3 protocol
- described in RFC-1203.
-
- Conventions
-
- Please refer to RFC-1176 for all conventions used in this document.
-
-
- I.a. MIME Command Extensions
-
- tag FETCH sequence data
-
- The FETCH command is extended as follows:
-
- FULL Macro equivalent to:
- (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY)
-
- BODY The body of the message. The body is computed
- by the server by parsing the RFC 822 header and
- body into the component parts, defaulting various
- fields as necessary.
-
- BODY[section] The text of a particular body section. The
- section specification is a set of one or more
- part numbers delimited by periods.
-
- Single-part messages only have a part 1.
-
- Multi-part messages as assigned consecutive
- part numbers, as they occur in the message.
- If a particular part is itself multi-part, its
- parts must be indicated by a period followed by
- that part number within that nested multi-part
- part. It is not permitted to fetch the text of
- a nested multi-part part.
-
- A part of type MESSAGE also has nested parts,
- which are the parts of the MESSAGE part's body.
-
- Every message has at least one part.
-
- EXAMPLE: Here is a very complex message with its
- associated section specifications.
- 1 TEXT
- 2 BINARY
- 3 MESSAGE
- 3.1 TEXT
- 3.2 BINARY
- MULTIPART
- 4.1 IMAGE
- 4.2 MESSAGE
- 4.2.1 TEXT
- Note that there is no section specification for
- the Multi-part part itself.
-
-
- I.b. MIME Response Extensions
-
- * number message_data
-
- FETCH data
- Data fetching is extended to add the following properties:
-
- BODY An S-expression format list that describes the
- body of a message. The body is computed by the
- server by parsing the RFC 822 header and body into
- the component parts, defaulting various fields
- as necessary.
-
- Multiple parts are indicated by S-expression
- nesting. In this case, instead of a body type
- as the first element of the list there is a nested
- body. The last element of the list is the multipart
- subtype (mixed, digest, parallel, alternative, etc.).
-
- The basic fields of a non-multipart body are in the
- following order:
- body type - an atom giving the content type name
- as defined in MIME
- body subtype - a string giving the content subtype
- name as defined in MIME
- body parameter list - an s-expression 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.
- body id - a string giving the content id as
- defined in MIME.
- body description - a string giving the content
- description as defined in MIME.
- body encoding - a string giving the content
- transfer encoding as defined in MIME.
- body size - a number giving the size of that
- body in bytes. Note that this size is the
- size in its transfer encoding and not the
- resulting size.
-
- A body type of type MESSAGE and subtype RFC822
- contains, immediately after the basic fields,
- the envelope of the encapsulated message, its
- body structure, and its size in text lines.
-
- A body type of type TEXT contains, immediately
- after the basic fields, the size of the body
- in text lines.
-
- BODY[section] A string expressing the body contents of the
- specified section. This string is transmitted
- as 7-bit US-ASCII, encoded as according to MIME
- content transfer encoding. The string is
- interpreted according to the content transfer
- encoding and the body type and subtype.
-
- Note that 7-bit US-ASCII is the transport format
- and NOT necessarily the byte size or character
- set of the result. The resulting data may be
- 8-bit of some other character set or even binary!
-
-
- II.a. Mailbox Management Command Extensions
-
- The following extensions are in the area of mailbox management. They
- are intended to provide basic mailbox management services in a simple
- (single server) configuration. Mailbox management in more complex
- environments is dealt with by a separate distributed management
- protocol.
-
- tag FIND MAILBOXES pattern
-
- The FIND MAILBOXES command as described in RFC-1176 is hereby
- more thoroughly defined. This command returns the mailboxes
- that the user has declared as being "active" or "subscribed."
-
- The restriction that FIND MAILBOXES does not return the name
- INBOX is removed. The name INBOX is returned by FIND MAILBOXES
- if that name has been subscribed (see SUBSCRIBE MAILBOX below).
-
- The functionality is otherwise unchanged.
-
- The exact meaning of this is implementation-dependent, since
- the concept of a set of `active' or `subscribed' mailboxes that
- is preserved across sessions may not be meaningful for a
- particular server or server implementation. If the SUBSCRIBE
- MAILBOX and UNSUBSCRIBE MAILBOX commands are implemented then
- this command returns the list manipulated by those commands.
-
- tag FIND ALL.MAILBOXES pattern
-
- The FIND ALL.MAILBOXES command is similar to FIND MAILBOXES;
- however, it should return a complete list of all mailboxes
- available to the user. Data is returned as in FIND MAILBOXES.
-
- The special name INBOX is included in the output from
- FIND ALL.MAILBOXES unless INBOX is not supported by this server
- or for this user. The criteria for omitting INBOX is whether
- or not SELECT INBOX will return failure; it is not relevant
- whether or not the user's actual INBOX resides on this or some
- other server (see FIND MAILBOXES and SUBSCRIBE MAILBOX for a
- mechanism for the user to identify that this is the real INBOX).
-
- If FIND ALL.MAILBOXES is implemented FIND MAILBOXES must also
- be implemented, even if it returns the same information. Also,
- FIND ALL.MAILBOXES must, at least, return all the mailbox names
- that are returned by FIND MAILBOXES.
-
- The exact meaning of this is implementation-dependent, since
- the concept of a bounded or deterministic set of `mailboxes
- available to the user' may not be meaningful for a particular
- server or server implementation.
-
- tag FIND BBOARDS pattern
-
- The FIND BBOARDS command as described in RFC-1176 is hereby
- more thoroughly defined. This command returns the bboards
- that the user has declared as being "active" or "subscribed."
- The functionality is otherwise unchanged.
-
- The exact meaning of this is implementation-dependent, since
- the concept of a set of `active' or `subscribed' bboards that
- is preserved across sessions may not be meaningful for a
- particular server or server implementation. If the SUBSCRIBE
- BBOARD and UNSUBSCRIBE BBOARD commands are implemented then
- this command returns the list manipulated by those commands.
-
- tag FIND ALL.BBOARDS pattern
-
- The FIND ALL.BBOARDS command is similar to FIND BBOARDS;
- however, it should return a complete list of all bulletin
- boards available to the user. Data is returned as in
- FIND BBOARDS.
-
- If FIND ALL.BBOARDS is implemented FIND BBOARDS must also
- be implemented, even if it returns the same information. Also,
- FIND ALL.BBOARDS must, at least, return all the bboard names
- that are returned by FIND BBOARDS.
-
- The exact meaning of this is implementation-dependent, since
- the concept of a bounded or deterministic set of `bboards
- available to the user' may not be meaningful for a particular
- server or server implementation.
-
- tag CREATE mailbox
-
- The CREATE command creates a mailbox with the given name. This
- command returns an OK response only if a new mailbox with that
- name has been created. It is an error to attempt to create a
- mailbox with a name that refers to an extant mailbox. Any error
- in creation will return a NO response.
-
- Creating INBOX is not permitted. If there is a primary or default
- mailbox for this user, it MUST exist and be called INBOX; hence it
- may not be created. Otherwise, the name INBOX can not be used; see
- section VI, "INBOX Requirement Loosened", for more details.
-
- tag DELETE mailbox
-
- The DELETE command deletes a mailbox with the given name. This
- command returns an OK response only if a mailbox with that name
- has been deleted. It is an error to attempt to delete a mailbox
- name that does not exist. Any error in deletion will return a
- NO response.
-
- A server SHOULD NOT attempt to test that a mailbox is empty prior
- to permitting deletion; this would prevent the deletion of a mailbox
- which for some reason can not be opened or expunged, leaving to
- possible denial of service problems. Any such checking should be
- left to the discretion of the client.
-
- Deleting INBOX is not permitted.
-
- tag RENAME oldmailbox newmailbox
-
- The RENAME command changes the name of a mailbox. This command
- returns an OK response only if a mailbox with the old name exists
- and has been successfully renamed to the new name. It is an error
- to attempt to rename with an old mailbox name that does not exist
- or a new mailbox name which already exists. Any error in renaming
- will return a NO response.
-
- Renaming INBOX is permitted. A new, empty INBOX is created in its
- place.
-
- tag SUBSCRIBE MAILBOX mailbox
-
- The SUBSCRIBE MAILBOX command adds the specified mailbox name to
- the list of "active" or "subscribed" mailboxes as returned by
- the FIND MAILBOXES command. This command returns an OK response
- only if the subscription is successful.
-
- If SUBSCRIBE MAILBOX is implemented then FIND MAILBOXES must also
- be implemented, and FIND ALL.MAILBOXES should be implemented.
-
- Subscriptions should be preserved between sessions.
-
- tag UNSUBSCRIBE MAILBOX mailbox
-
- The UNSUBSCRIBE MAILBOX command removes the specified mailbox name
- from the list of "active" or "subscribed" mailboxes as returned by
- the FIND MAILBOXES command. This command returns an OK response
- only if the unsubscription is successful.
-
- If UNSUBSCRIBE MAILBOX is implemented then SUBSCRIBE MAILBOXES and
- FIND MAILBOXES must also be implemented, and FIND ALL.MAILBOXES
- should be implemented.
-
- Unsubscriptions should be preserved between sessions.
-
- tag SUBSCRIBE BBOARD bboard
-
- The SUBSCRIBE BBOARD command adds the specified mailbox name to
- the list of "active" or "subscribed" bulletin boards as returned
- by the FIND BBOARDS command. This command returns an OK response
- only if the subscription is successful.
-
- If SUBSCRIBE BBOARD is implemented then FIND BBOARDS must also
- be implemented, and FIND ALL.BBOARDS should be implemented.
-
- Subscriptions should be preserved between sessions.
-
- tag UNSUBSCRIBE BBOARD bboard
-
- The UNSUBSCRIBE BBOARD command removes the specified mailbox name
- from the list of "active" or "subscribed" bulletin boards as
- returned by the FIND BBOARDS command. This command returns an OK
- response only if the unsubscription is successful.
-
- If UNSUBSCRIBE BBOARD is implemented then SUBSCRIBE BBOARDS and
- FIND BBOARDS must also be implemented, and FIND ALL.BBOARDS
- should be implemented.
-
- Unsubscriptions should be preserved between sessions.
-
-
- II.b. Mailbox Management Response Extensions
-
- No response extensions are made in the area of mailbox management.
-
-
- III.a. Cache Management Command Extensions
-
- RFC-1176 specifies that a server is not obligated to transmit data
- in response to a FETCH command that it has already transmitted
- earlier in the session. This can place an unreasonable burden on
- clients which lack the resources to maintain a local copy of the
- state transmitted by the server during this session. To address
- this problem, the PURGE command has been defined.
-
- The previous exemption of texts made to this rule is hereby revoked
- and replaced with this new mechanism.
-
- Servers which refrain from sending data previously sent MUST implement
- the PURGE command. Clients which do not cache all data sent from the
- server MUST implement the PURGE command. It can be assumed that any
- server which returns BAD to any PURGE command does not exploit any
- caching at the client.
-
- As of this writing, the only exploitation of client caching by known
- server implementation is that some servers do not send EXISTS or
- RECENT updates in response to a CHECK command under certain
- circumstances. The requirement that a client cache this information
- is unaffected by the new PURGE functionality.
-
- PURGE STATUS sequence
-
- The PURGE STATUS command informs the server that the client has
- deleted all information about the status (flags, internal date,
- and RFC-822 size) of the specified messages from its cache.
-
- PURGE STRUCTURE sequence
-
- The PURGE STRUCTURE command informs the server that the client has
- deleted all information about the structure (envelope and body)
- of the specified messages from its cache.
-
- PURGE TEXTS sequence
-
- The PURGE TEXTS command informs the server that the client has
- deleted all information about the texts (header, text, or body
- parts) of the specified messages from its cache.
-
- PURGE ALWAYS
-
- The PURGE ALWAYS command informs the server that the client has
- no capability to cache any data. The server must re-send data
- whenever requested by the client.
-
- Note: PURGE ALWAYS does not affect information returned by the
- EXISTS and RECENT unsolicited responses. Such information MUST
- be remembered by even a non-caching client, since there is NO
- guarantee that ANY command will return EXISTS or RECENT information
- on demand.
-
- PURGE token sequence
-
- Any unknown subcommand of PURGE should be rejected with a NO
- response instead of a BAD response.
-
- III.b. Cache Management Response Extensions
-
- No response extensions are made in the area of cache management.
-
-
- IV.a. Mailbox Append Command Extensions
-
- tag APPEND mailbox string
-
- The APPEND command appends the string, which is in the format
- of an RFC-822 message, to the specified mailbox. If the append
- is unsuccessful for any reason the mailbox must be restored to
- its state prior to the append; no partial appending is permitted.
-
- Note that this functionality is unsuitable for message delivery,
- because it does not provide a mechanism to transfer RFC 821 (SMTP).
- envelope information. Its primary purpose is to provide for a
- `saved outgoing mail' mailbox which resides on the remote server.
-
-
- IV.b. Mailbox Append Response Extensions
-
- If the specified mailbox is open by a SELECT or BBOARD command, the
- normal new mail action should be taken.
-
-
- V.a. Partial Text Fetching Command Extensions
-
- tag PARTIAL msgno RFC822 start_byte byte_count
- tag PARTIAL msgno RFC822.HEADER start_byte byte_count
- tag PARTIAL msgno RFC822.TEXT start_byte byte_count
- tag PARTIAL msgno BODY[section] start_byte byte_count
-
- The PARTIAL command is equivalent to the associated FETCH command,
- with the added functionality that only the specified number of
- bytes, beginning at the specified starting byte, are returned.
- Note as well that only a single message can be fetched at a time.
- The first byte of a message, and hence the minimum for the
- starting byte, is byte 1.
-
- Any partial fetch which attempts to read beyond the end of the
- text is truncated as appropriate. If the starting byte is beyond
- the end of the text, an empty string is returned.
-
- The data is returned with the FETCH response. There is no
- indication of the range of the partial data in this response; thus
- it is not possible to assume caching with PARTIAL data. Any
- knowledge of caching from a FETCH command of that data is
- invalidated as with a PURGE command. It is also not possible
- to stream multiple PARTIAL commands of the same data item without
- processing and synchronizing at each step, since each PARTIAL
- fetch of data replaces any prior (PARTIAL) FETCH of that data.
-
- Note that when partial fetching it is possible to break in the
- middle of a a line or a criticial sequence such as a BASE64
- quadruple or QUOTED-PRINTABLE shift. Implementations using
- partial fetching should keep this in mind. There is no requirement
- that partial fetches follow any sequence; so if it turns out that
- a partial fetch of bytes 1 through 10000 breaks in an awkward place,
- it is permitted to continue with a partial fetch of 9987 through
- 19987, etc.
-
- V.b. Partial Text Fetching Response Extensions
-
- No response extensions are made in the area of partial text fetching.
-
-
- VI. INBOX Requirement Loosened
-
- RFC-1176 required all server implementations to make available a
- mailbox named "INBOX" on the server to be that user's primary mailbox
- on that server. Examples have come up of shared mailbox or bulletin
- board only servers on which this requirement is unreasonable.
-
- The requirement is hereby modified as follows: SELECT's argument is
- implementation-dependent; however the word "INBOX" is reserved to
- mean a primary or default mailbox for this user, independent of any
- other server semantics. It is permitted for a server not to have an
- INBOX if there is no concept of a primary or default mailbox for this
- user. The name "INBOX" MUST NOT be used for any other purpose.
-
-
- VII. Authentication Clarification
-
- RFC-1176 specifies that "until identity and access authorization have
- been established, no operations other than LOGIN or LOGOUT are
- permitted." RFC-1176 specifies that authentication may be established
- through the LOGIN command, or may have "already been accomplished
- through other means, e.g. Kerberos." RFC-1176 does not specify these
- "other means" or how they are done.
-
- Pre-authentication is only possible when the connection to the IMAP2
- service is made through some protocol other than a TCP connection to
- port 143 and this protocol provides its own authentication mechanism.
-
- Although RFC-1176 gives Kerberos as an example of an alternate means
- of authentication, it is not a good example of pre-authentication as
- Kerberos does not provide a connection service. A better example of
- such a protocol is the BSD "RSH" protocol which provides authentication
- through a "trusted host" facility. Another example would be of a
- manual invocation of an IMAP server from a logged-in timesharing job.
-
- A pre-authenticated IMAP server should recognize that authentication
- has already happened, and enter the post-login state. In its greeting
- message, it should use the heretofore undocumented unsolicited reply
- "PREAUTH" instead of "OK" to indicate that external authentication has
- taken place. For example, here is a pre-authentication scenario:
-
- S: * PREAUTH IMAP Server pre-authenticated as user `Smith'
- U: A001 SELECT INBOX
- S: * FLAGS (\Answered \Flagged \Deleted \Seen)
- S: * 19 EXISTS
- S: * 2 RECENT
- S: A001 OK SELECT complete
-
- While a connection that is not pre-authenticated is currently
- constrained to using the LOGIN command for establishing
- authentication, that does not mean that authentication systems such as
- Kerberos cannot be used. While the examples show the "password"
- argument to the LOGIN as being a short string typed in by the user,
- this need not be the case. If a server supports authentication via
- Kerberos version 4, it may accept the string "@KERBEROS:" followed by
- the hexadecimal representation of a Kerberos authenticator.
-
- For example, the following is a Kerberos login scenario (note that the
- line breaks in the sample authenticator are for editorial clarity and
- are not in a real authenticator):
-
- S: * OK Kerberos IMAP2 Server
- U: a001 LOGIN smith @KERBEROS:040700414e445245572e434d552e4544550
- 038202c868f3890b377fc8266acc1bedb96b80d3fa76489898e74cd1c952dc
- 4003ea3428f29f1c470016cf5adc22f939e6deff2747254c1815d5b0b90d4c
- 5a2cba21eb0abe32f9acbf568d751bf4cc13f5ba4e6d82c638a8b5421
- S: a001 OK [df84a4cb8323454f] Login OK via Kerberos
-
- The token in the brackets in the OK response is the Kerberos
- authentication response, encrypted with the session key in network
- byte order and an incremented checksum as in the usual Kerberos
- procedure.
-
-
- VIII. Change to the Syntax of Dates
-
- With the impending end of the century and the necessity of having a
- more general syntax for timezones than presently exists, the format
- of IMAP2 internal dates has become inadequate.
-
- The BNF for the date syntax is hereby amended to be:
-
- date ::= date_new / date_old
-
- date_new ::= string in form "dd-mmm-yyyy hh:mm:ss -zzzz"
-
- date_old ::= string in form "dd-mmm-yy hh:mm:ss-zzz"
-
- In date_new, the year is now a 4-digit year, and the timezone is a
- 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.
-
- Universal Time is expressed as "+0000".
-
- date_old is hereby declared obsolete, and its usage in new software
- is STRONGLY discouraged. However, client implementations MUST
- recognize and properly parse it.
-
- RFC-1176 documents the argument to the SEARCH criteria BEFORE, ON, and
- SINCE as being either "date" in the text and "string" in the BNF.
- These SEARCH criteria arguments are hereby amended to be "day", with
- the following syntax:
-
- day ::= day_new / day_old
-
- day_new ::= string in form "dd-mmm-yyyy"
-
- day_old ::= string in form "dd-mmm-yy"
-
- day_old is hereby declared obsolete, and its usage in new software
- is STRONGLY discouraged. However, server implementations MUST
- recognize and properly parse it.
-
-
- IX. COPY Command and the Unsolicited COPY Response
-
- RFC-1176 specifies that if the destination mailbox specified by a COPY
- command does not exist, the server should create it. With the advent
- of the CREATE command, it is intended that this functionality will
- eventually be deprecated. Server implementations SHOULD continue to
- create new mailboxes as needed with a COPY command, but SHOULD also
- note to the user at the client, via an unsolicited OK response, that a
- new mailbox was created.
-
- An unsolicited COPY response is mentioned in RFC-1176's documentation
- of the COPY command, and in the BNF, but is not otherwise documented.
- This response was intended to provide status of a COPY command, and
- indicate how much of the COPY was done in the event of a COPY which
- failed midway.
-
- This response was not implemented by many servers. The definition of
- the COPY command is hereby amended to REQUIRE that a COPY fully
- complete the requested operation. If this is not possible, then COPY
- should do NONE of the requested operation, and back out of any partial
- COPY as necessary. This eliminates the ambiguity.
-
- The unsolicited COPY response is hereby declared obsolete. It MUST
- NOT be used in new server implementations. Clients should ignore any
- unsolicited COPY responses seen.
-
-
- X. Reiteration on the Unsolicited STORE Response
-
- Some server implementations return an unsolicted STORE response as a
- result of a change caused by a STORE. This was referenced in passing in
- RFC-1064, but had already become obsolete. The correct behavior is to
- return an unsolicited FETCH response for both a FETCH and a STORE.
-
- As stated in RFC-1176, the unsolicited STORE response is obsolete. It
- MUST NOT be used in new server implementations. Clients SHOULD treat any
- unsolicited STORE responses as equivalent to unsolicited FETCH.
-
-
- XI. Anonymous Convention Established
-
- Some servers may wish to allow non-authenticated access to certain
- mailboxes or bulletin boards. The means by which this is accomplished
- is with a LOGIN command using a userid of "anonymous". A password is
- still required; it is implementation-dependent what requirements, if
- any, are placed upon the password. It is also implementation-dependent
- what access restrictions are placed on anonymous users.
-
- Since this is a convention, and not strictly a protocol extension or
- change, implementations are NOT required to support the anonymous
- convention in order to be considered IMAP2bis compliant.
-
-
- XII. Clarification of RFC822.HEADER
-
- RFC-1176 states that the concatenation of the strings returned by
- fetching RFC822.HEADER and RFC822.TEXT is equivalent to the string
- returned by fetching RFC822. It was implicit that the delimiting
- blank line would be included in RFC822.HEADER, because otherwise
- there would be a leading blank line in RFC822.TEXT, but never
- explicitly stated.
-
- The string returned by RFC822.HEADER includes the empty line that
- delimits the header from the text in RFC-822. In other words, all
- non-null RFC822.HEADER strings end with a sequence of four ASCII
- bytes: CR LF CR LF (0C 0A 0C 0A).
-
-
- XIII. SEARCH string extension
-
- The BODY and TEXT qualifiers in the SEARCH are hereby extended to
- permit an RFC-1342 format multinational character string. Due to
- compatibility constraints, RFC-1432 format strings must be quoted.
- For example:
- SEARCH TEXT "=?US-ASCII?Q?leaping lizards?="
- and
- SEARCH TEXT "leaping lizards"
- are equivalent.
-
-
- Formal Syntax
-
- The syntax of RFC-1176 is extended with the following rules. Where
- a rule is already defined in RFC-1176, this rule replaces it.
-
- 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 (SP) and not
- a comma.
-
- append ::= "APPEND" SP mailbox SP string
-
- body ::= "(" body_structure ")"
-
- body_basic ::= body_type SP body_subtype SP body_parameter SP
- body_id SP body_description SP body_encoding SP
- body_size_byte
-
- body_description::= nil / string
-
- body_encoding ::= "7BIT" / "8BIT" / "BINARY" / "BASE64"/
- "QUOTEDPRINTABLE" / "X-UNKNOWN"
-
- body_id ::= nil / string
-
- body_msg ::= body_basic SP envelope SP body
-
- body_parameter ::= nil / string
-
- body_section ::= NUMBER / NUMBER "." body_section
-
- body_size_byte ::= NUMBER
-
- body_size_line ::= NUMBER
-
- body_structure ::= body_basic / body_msg / body_text /
- 1#body_structure SP body_subtype
-
- body_subtype ::= nil / string
-
- body_text ::= body_basic SP body_size_line
-
- body_type ::= "TEXT" / "MULTIPART" / "MESSAGE" / "APPLICATION" /
- "AUDIO" / "IMAGE" / "VIDEO" / "X-UNKNOWN"
-
- create ::= "CREATE" SP mailbox
-
- date ::= date_new / date_old
-
- date_new ::= string in form "dd-mmm-yyyy hh:mm:ss -zzzz"
-
- date_old ::= string in form "dd-mmm-yy hh:mm:ss-zzz" ;; obsolete
-
- day ::= day_new / day_old
-
- day_new ::= string in form "dd-mmm-yyyy"
-
- day_old ::= string in form "dd-mmm-yy" ;; obsolete
-
- delete ::= "DELETE" SP mailbox
-
- fetch ::= "FETCH" SP sequence SP ("ALL" / "FULL" /
- "FAST" / fetch_att / "(" 1#fetch_att ")")
-
- fetch_att ::= fetch_att_other / fetch_att_text
-
- fetch_att_other ::= "BODY" / "ENVELOPE" / "FLAGS" / "INTERNALDATE" /
- "RFC822.SIZE"
-
- fetch_att_text ::= "BODY[" body_section "]" / "RFC822" /
- "RFC822.HEADER" / "RFC822.TEXT"
-
- find_option ::= "MAILBOXES" / "BBOARDS" / "ALL.MAILBOXES" /
- "ALL.BBOARDS"
-
- istring ::= string / RFC-1342 format multinational string
-
- msg_copy ::= "COPY" ;; obsolete
-
- msg_data ::= msg_exists / msg_recent / msg_expunge /
- msg_fetch / msg_copy / msg_store
-
- msg_fetch ::= "FETCH" SP "(" 1#("BODY" SP body /
- "BODY[" body_section "]" string / "ENVELOPE" SP
- envelope / "FLAGS" SP "(" 1#(recent_flag
- flag_list) ")" / "INTERNALDATE" SP date /
- "RFC822" SP string / "RFC822.HEADER" SP string /
- "RFC822.SIZE" SP NUMBER / "RFC822.TEXT" SP
- string) ")"
-
- msg_store ::= "STORE" SP "(" 1#("FLAGS" SP "(" 1#(recent_flag
- flag_list) ")" ) ")" ;; obsolete
-
- partial ::= "PARTIAL" SP NUMBER SP fetch_att_text SP NUMBER SP
- NUMBER
-
- purge ::= "PURGE" SP ("ALWAYS" / purge_option SP sequence)
-
- purge_option ::= "STATUS" / "STRUCTURE" / "TEXTS" / token
-
- rename ::= "RENAME" SP mailbox SP string
-
- search ::= "SEARCH" SP 1#("ALL" / "ANSWERED" /
- "BCC" SP string / "BEFORE" SP day /
- "BODY" SP istring / "CC" SP string / "DELETED" /
- "FLAGGED" / "KEYWORD" SP atom / "NEW" / "OLD" /
- "ON" SP day / "RECENT" / "SEEN" /
- "SINCE" SP day / "TEXT" SP istring /
- "TO" SP string / "UNANSWERED" / "UNDELETED" /
- "UNFLAGGED" / "UNKEYWORD" / "UNSEEN")
-
- subscribe ::= "SUBSCRIBE" SP subscribe_opt SP string
-
- subscribe_opt ::= "MAILBOX" / "BBOARD"
-
- unsubscribe ::= "UNSUBSCRIBE" SP subscribe_opt SP string
-
- userid ::= string / "anonymous"
-
-
- Implementation Status
-
- The University of Washington IMAP2bis distribution supports this
- specification. It can be obtained as mail/imap.tar.Z via anonymous
- FTP from host ftp.cac.washington.edu; this is a compressed UNIX `tar'
- format file.
-
- The University of Washington IMAP2bis distribution includes external
- authentication using the Unix r-protocols. Sites can enable or
- disable rimap at their discretion; users can control rimap behavior
- (provided the site has enabled it) by use of the standard .rhosts
- and hosts.equiv files. The anonymous convention is also included
- for anonymous access to newsgroups is can also be enabled or disabled
- on a site basis.
-
- A Kerberized IMAP2bis is in test at a few organizations, but is not yet
- available for public release.
-
-
- Design Discussion
-
- IMAP2 as specified in RFC-1176 is a 7-bit protocol. These extensions
- make it possible to support 8-bit textual and binary mail through the
- IMAP mode.
-
- Some thought was made on whether or not the body contents fetch should
- return the decoded version of BASE64 and QUOTED-PRINTABLE sections, or
- if there should be an option to get either the encoded or the decoded
- form. It was rejected on these grounds:
- 1) It makes the extensions unimplementable in any environment where
- an 8-bit data stream is not possible.
- 2) It creates multiple ways of doing the same thing and hence
- exponentially multiplies the possiblity of non-interoperable
- implementations.
- 3) It introduces binary in the same data stream as commands, and
- hence makes the protocol more vulnerable to synchronization
- problems.
-
- If server-based decoding of BASE64 and QUOTED-PRINTABLE turns out
- to be important, it should be transmitted out of band from the IMAP2
- command stream. This would have the necessary but unfortunate effect
- of making the protcol more complicated.
-
-
- Unresolved issues
-
- The following issues are unresolved by IMAP2bis. It is anticipated that
- these will be dealt with in future specifications.
-
- The management capabilities of IMAP2bis are inadequate for complex
- distributed mail configurations. A separate specification, under
- development at CMU, addresses this.
-
- The SEARCH command lacks MIME awareness, regular expressions, complex
- logical qualifiers, etc. This should be addressed in future versions of
- the IMAP2 specification.
-
- It isn't clear that the RFC-1342 extensions to SEARCH are adequate for
- the task.
-
- Message posting is orthogonal to the scope of a mail access protocol, and
- it is undesirable for a number of reasons to shoehorn the two into a
- single protocol. However, issues of authentication and what to do with a
- uni-channel link (e.g. IMAP over a dialup line) have come up. The
- IETF-REMMAIL working group is wrestling with these issues at this writing.
-
- Envelopes do not carry information such as resend data, newsgroups,
- etc. Newsgroups can probably be encoded within the existing address list
- syntax.
-
- The question has come up as to whether or not there should be a way for
- the server to build client browser lines.
-
-
- Acknowledgements
-
- Special thanks go to John Gardiner Myers, Chris Newman, Karl Jacob, Hisao
- Nojima, Terry Gray, Adam Treister, Laurence Lundblade, and Mike Seibel for
- their hard work in reviewing the present status of IMAP2, and for reaching
- concensus and closure on a number of issues in record time.
-
- My thanks to everyone in the IETF-822 group for their hard work in
- getting the Internet Message Bodies draft out the door, and
- especially to Nathaniel Borenstein and Ned Freed for putting together
- something we could all live with.
-
- Any mistakes, flaws, or sins of omission in this IMAP2bis protocol
- extension are, however, strictly my own; and no endorsement on the
- part of anyone is implied.
-
-
- Security Considerations
-
- Security issues are discussed in this memo only as far as authentication
- for the purpose of accessing an IMAP2bis server are concerned.
-
-
- Author's Address
-
- Mark R. Crispin
- Networks and Distributed Computing
- University of Washington
- Seattle, WA 98105
-
- Phone: (206) 842-2385
-
- EMail: MRC@CAC.Washington.EDU
-