123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787 |
- Network Working Group M. Gahrns
- Request for Comments: 2180 Microsoft
- Category: Informational July 1997
- IMAP4 Multi-Accessed Mailbox Practice
- Status of this Memo
- This memo provides information for the Internet community. This memo
- does not specify an Internet standard of any kind. Distribution of
- this memo is unlimited.
- 1. Abstract
- IMAP4[RFC-2060] is rich client/server protocol that allows a client
- to access and manipulate electronic mail messages on a server.
- Within the protocol framework, it is possible to have differing
- results for particular client/server interactions. If a protocol does
- not allow for this, it is often unduly restrictive.
- For example, when multiple clients are accessing a mailbox and one
- attempts to delete the mailbox, an IMAP4 server may choose to
- implement a solution based upon server architectural constraints or
- individual preference.
- With this flexibility comes greater client responsibility. It is not
- sufficient for a client to be written based upon the behavior of a
- particular IMAP server. Rather the client must be based upon the
- behavior allowed by the protocol.
- By documenting common IMAP4 server practice for the case of
- simultaneous client access to a mailbox, we hope to ensure the widest
- amount of inter-operation between IMAP4 clients and servers.
- The behavior described in this document reflects the practice of some
- existing servers or behavior that the consensus of the IMAP mailing
- list has deemed to be reasonable. The behavior described within this
- document is believed to be [RFC-2060] compliant. However, this
- document is not meant to define IMAP4 compliance, nor is it an
- exhaustive list of valid IMAP4 behavior. [RFC-2060] must always be
- consulted to determine IMAP4 compliance, especially for server
- behavior not described within this document.
- Gahrns Informational [Page 1]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- 2. Conventions used in this document
- In examples,"C1:", "C2:" and "C3:" indicate lines sent by 3 different
- clients (client #1, client #2 and client #3) that are connected to a
- server. "S1:", "S2:" and "S3:" indicated lines sent by the server to
- client #1, client #2 and client #3 respectively.
- A shared mailbox, is a mailbox that can be used by multiple users.
- A multi-accessed mailbox, is a mailbox that has multiple clients
- simultaneously accessing it.
- A client is said to have accessed a mailbox after a successful SELECT
- or EXAMINE command.
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in [RFC-2119].
- 3. Deletion/Renaming of a multi-accessed mailbox
- If an external agent or multiple clients are accessing a mailbox,
- care must be taken when handling the deletion or renaming of the
- mailbox. Following are some strategies an IMAP server may choose to
- use when dealing with this situation.
- 3.1. The server MAY fail the DELETE/RENAME command of a multi-accessed
- mailbox
- In some cases, this behavior may not be practical. For example, if a
- large number of clients are accessing a shared mailbox, the window in
- which no clients have the mailbox accessed may be small or non-
- existent, effectively rendering the mailbox undeletable or
- unrenamable.
- Example:
- <Client #1 and Client #2 have mailbox FOO accessed. Client #1 tries
- to DELETE the mailbox and is refused>
- C1: A001 DELETE FOO
- S1: A001 NO Mailbox FOO is in use by another user.
- Gahrns Informational [Page 2]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- 3.2. The server MAY allow the DELETE command of a multi-accessed
- mailbox, but keep the information in the mailbox available for
- those clients that currently have access to the mailbox.
- When all clients have finished accessing the mailbox, it is
- permanently removed. For clients that do not already have access to
- the mailbox, the 'ghosted' mailbox would not be available. For
- example, it would not be returned to these clients in a subsequent
- LIST or LSUB command and would not be a valid mailbox argument to any
- other IMAP command until the reference count of clients accessing the
- mailbox reached 0.
- In some cases, this behavior may not be desirable. For example if
- someone created a mailbox with offensive or sensitive information,
- one might prefer to have the mailbox deleted and all access to the
- information contained within removed immediately, rather than
- continuing to allow access until the client closes the mailbox.
- Furthermore, this behavior, may prevent 'recycling' of the same
- mailbox name until all clients have finished accessing the original
- mailbox.
- Example:
- <Client #1 and Client #2 have mailbox FOO selected. Client #1 DELETEs
- mailbox FOO>
- C1: A001 DELETE FOO
- S1: A001 OK Mailbox FOO is deleted.
- <Client #2 is still able to operate on the deleted mailbox>
- C2: B001 STORE 1 +FLAGS (\Seen)
- S2: * 1 FETCH FLAGS (\Seen)
- S2: B001 OK STORE completed
- <Client #3 which did not have access to the mailbox prior to the
- deletion by client #1 does not have access to the mailbox>
- C3: C001 STATUS FOO (MESSAGES)
- S3: C001 NO Mailbox does not exist
- <Nor is client #3 able to create a mailbox with the name FOO, while
- the reference count is non zero>
- C3: C002 CREATE FOO
- S3: C002 NO Mailbox FOO is still in use. Try again later.
- Gahrns Informational [Page 3]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- <Client #2 closes its access to the mailbox, no other clients have
- access to the mailbox FOO and reference count becomes 0>
- C2: B002 CLOSE
- S2: B002 OK CLOSE Completed
- <Now that the reference count on FOO has reached 0, the mailbox name
- can be recycled>
- C3: C003 CREATE FOO
- S3: C003 OK CREATE Completed
- 3.3. The server MAY allow the DELETE/RENAME of a multi-accessed
- mailbox, but disconnect all other clients who have the mailbox
- accessed by sending a untagged BYE response.
- A server may often choose to disconnect clients in the DELETE case,
- but may choose to implement a "friendlier" method for the RENAME
- case.
- Example:
- <Client #1 and Client #2 have mailbox FOO accessed. Client #1 DELETEs
- the mailbox FOO>
- C1: A002 DELETE FOO
- S1: A002 OK DELETE completed.
- <Server disconnects all other users of the mailbox>
- S2: * BYE Mailbox FOO has been deleted.
- 3.4. The server MAY allow the RENAME of a multi-accessed mailbox by
- simply changing the name attribute on the mailbox.
- Other clients that have access to the mailbox can continue issuing
- commands such as FETCH that do not reference the mailbox name.
- Clients would discover the renaming the next time they referred to
- the old mailbox name. Some servers MAY choose to include the
- [NEWNAME] response code in their tagged NO response to a command that
- contained the old mailbox name, as a hint to the client that the
- operation can succeed if the command is issued with the new mailbox
- name.
- Gahrns Informational [Page 4]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- Example:
- <Client #1 and Client #2 have mailbox FOO accessed. Client #1 RENAMEs
- the mailbox.>
- C1: A001 RENAME FOO BAR
- S1: A001 OK RENAME completed.
- <Client #2 is still able to do operations that do not reference the
- mailbox name>
- C2: B001 FETCH 2:4 (FLAGS)
- S2: * 2 FETCH . . .
- S2: * 3 FETCH . . .
- S2: * 4 FETCH . . .
- S2: B001 OK FETCH completed
- <Client #2 is not able to do operations that reference the mailbox
- name>
- C2: B002 APPEND FOO {300} C2: Date: Mon, 7 Feb 1994
- 21:52:25 0800 (PST) C2: . . . S2: B002 NO [NEWNAME FOO
- BAR] Mailbox has been renamed
- 4. Expunging of messages on a multi-accessed mailbox
- If an external agent or multiple clients are accessing a mailbox,
- care must be taken when handling the EXPUNGE of messages. Other
- clients accessing the mailbox may be in the midst of issuing a
- command that depends upon message sequence numbers. Because an
- EXPUNGE response can not be sent while responding to a FETCH, STORE
- or SEARCH command, it is not possible to immediately notify the
- client of the EXPUNGE. This can result in ambiguity if the client
- issues a FETCH, STORE or SEARCH operation on a message that has been
- EXPUNGED.
- 4.1. Fetching of expunged messages
- Following are some strategies an IMAP server may choose to use when
- dealing with a FETCH command on expunged messages.
- Gahrns Informational [Page 5]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- Consider the following scenario:
- - Client #1 and Client #2 have mailbox FOO selected.
- - There are 7 messages in the mailbox.
- - Messages 4:7 are marked for deletion.
- - Client #1 issues an EXPUNGE, to expunge messages 4:7
- 4.1.1. The server MAY allow the EXPUNGE of a multi-accessed mailbox but
- keep the messages available to satisfy subsequent FETCH commands
- until it is able to send an EXPUNGE response to each client.
- In some cases, the behavior of keeping "ghosted" messages may not be
- desirable. For example if a message contained offensive or sensitive
- information, one might prefer to instantaneously remove all access to
- the information, regardless of whether another client is in the midst
- of accessing it.
- Example: (Building upon the scenario outlined in 4.1.)
- <Client #2 is still able to access the expunged messages because the
- server has kept a 'ghosted' copy of the messages until it is able to
- notify client #2 of the EXPUNGE>
- C2: B001 FETCH 4:7 RFC822
- S2: * 4 FETCH RFC822 . . . (RFC822 info returned)
- S2: * 5 FETCH RFC822 . . . (RFC822 info returned)
- S2: * 6 FETCH RFC822 . . . (RFC822 info returned)
- S2: * 7 FETCH RFC822 . . . (RFC822 info returned)
- S2: B001 OK FETCH Completed
- <Client #2 issues a command where it can get notified of the EXPUNGE>
- C2: B002 NOOP
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 3 EXISTS
- S2: B002 OK NOOP Complete
- <Client #2 no longer has access to the expunged messages>
- C2: B003 FETCH 4:7 RFC822
- S2: B003 NO Messages 4:7 are no longer available.
- Gahrns Informational [Page 6]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- 4.1.2 The server MAY allow the EXPUNGE of a multi-accessed mailbox,
- and on subsequent FETCH commands return FETCH responses only for
- non-expunged messages and a tagged NO.
- After receiving a tagged NO FETCH response, the client SHOULD issue a
- NOOP command so that it will be informed of any pending EXPUNGE
- responses. The client may then either reissue the failed FETCH
- command, or by examining the EXPUNGE response from the NOOP and the
- FETCH response from the FETCH, determine that the FETCH failed
- because of pending expunges.
- Example: (Building upon the scenario outlined in 4.1.)
- <Client #2 attempts to FETCH a mix of expunged and non-expunged
- messages. A FETCH response is returned only for then non-expunged
- messages along with a tagged NO>
- C2: B001 FETCH 3:5 ENVELOPE
- S2: * 3 FETCH ENVELOPE . . . (ENVELOPE info returned)
- S2: B001 NO Some of the requested messages no longer exist
- <Upon receiving a tagged NO FETCH response, Client #2 issues a NOOP
- to be informed of any pending EXPUNGE responses>
- C2: B002 NOOP
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 3 EXISTS
- S2: B002 OK NOOP Completed.
- <By receiving a FETCH response for message 3, and an EXPUNGE response
- that indicates messages 4:7 have been expunged, the client does not
- need to re-issue the FETCH>
- Gahrns Informational [Page 7]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- 4.1.3 The server MAY allow the EXPUNGE of a multi-accessed mailbox, and
- on subsequent FETCH commands return the usual FETCH responses for
- non-expunged messages, "NIL FETCH Responses" for expunged
- messages, and a tagged OK response.
- If all of the messages in the subsequent FETCH command have been
- expunged, the server SHOULD return only a tagged NO. In this case,
- the client SHOULD issue a NOOP command so that it will be informed of
- any pending EXPUNGE responses. The client may then either reissue
- the failed FETCH command, or by examining the EXPUNGE response from
- the NOOP, determine that the FETCH failed because of pending
- expunges.
- "NIL FETCH responses" are a representation of empty data as
- appropriate for the FETCH argument specified.
- Example:
- * 1 FETCH (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL))
- * 1 FETCH (FLAGS ())
- * 1 FETCH (INTERNALDATE "00-Jan-0000 00:00:00 +0000")
- * 1 FETCH (RFC822 "")
- * 1 FETCH (RFC822.HEADER "")
- * 1 FETCH (RFC822.TEXT "")
- * 1 FETCH (RFC822.SIZE 0)
- * 1 FETCH (BODY ("TEXT" "PLAIN" NIL NIL NIL "7BIT" 0 0)
- * 1 FETCH (BODYSTRUCTURE ("TEXT" "PLAIN" NIL NIL NIL "7BIT" 0 0)
- * 1 FETCH (BODY[<section>] "")
- * 1 FETCH (BODY[<section>]<partial> "")
- In some cases, a client may not be able to distinguish between "NIL
- FETCH responses" received because a message was expunged and those
- received because the data actually was NIL. For example, a * 5
- FETCH (FLAGS ()) response could be received if no flags were set on
- message 5, or because message 5 was expunged. In a case of potential
- ambiguity, the client SHOULD issue a command such as NOOP to force
- the sending of the EXPUNGE responses to resolve any ambiguity.
- Example: (Building upon the scenario outlined in 4.1.)
- <Client #2 attempts to access a mix of expunged and non-expunged
- messages. Normal data is returned for non-expunged message, "NIL
- FETCH responses" are returned for expunged messages>
- Gahrns Informational [Page 8]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- C2: B002 FETCH 3:5 ENVELOPE
- S2: * 3 FETCH ENVELOPE . . . (ENVELOPE info returned)
- S2: * 4 FETCH ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL
- NIL NIL)
- S2: * 5 FETCH ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL
- NIL NIL)
- S2: B002 OK FETCH Completed
- <Client #2 attempts to FETCH only expunged messages and receives a
- tagged NO response>
- C2: B002 FETCH 4:7 ENVELOPE
- S2: B002 NO Messages 4:7 have been expunged.
- 4.1.4 To avoid the situation altogether, the server MAY fail the
- EXPUNGE of a multi-accessed mailbox
- In some cases, this behavior may not be practical. For example, if a
- large number of clients are accessing a shared mailbox, the window in
- which no clients have the mailbox accessed may be small or non-
- existent, effectively rendering the message unexpungeable.
- 4.2. Storing of expunged messages
- Following are some strategies an IMAP server may choose to use when
- dealing with a STORE command on expunged messages.
- 4.2.1 If the ".SILENT" suffix is used, and the STORE completed
- successfully for all the non-expunged messages, the server SHOULD
- return a tagged OK.
- Example: (Building upon the scenario outlined in 4.1.)
- <Client #2 tries to silently STORE flags on expunged and non-
- expunged messages. The server sets the flags on the non-expunged
- messages and returns OK>
- C2: B001 STORE 1:7 +FLAGS.SILENT (\SEEN)
- S2: B001 OK
- Gahrns Informational [Page 9]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- 4.2.2. If the ".SILENT" suffix is not used, and only expunged messages
- are referenced, the server SHOULD return only a tagged NO.
- Example: (Building upon the scenario outlined in 4.1.)
- <Client #2 tries to STORE flags only on expunged messages>
- C2: B001 STORE 5:7 +FLAGS (\SEEN)
- S2: B001 NO Messages have been expunged
- 4.2.3. If the ".SILENT" suffix is not used, and a mixture of expunged
- and non-expunged messages are referenced, the server MAY set the
- flags and return a FETCH response for the non-expunged messages
- along with a tagged NO.
- After receiving a tagged NO STORE response, the client SHOULD issue a
- NOOP command so that it will be informed of any pending EXPUNGE
- responses. The client may then either reissue the failed STORE
- command, or by examining the EXPUNGE responses from the NOOP and
- FETCH responses from the STORE, determine that the STORE failed
- because of pending expunges.
- Example: (Building upon the scenario outlined in 4.1.)
- <Client #2 tries to STORE flags on a mixture of expunged and non-
- expunged messages>
- C2: B001 STORE 1:7 +FLAGS (\SEEN)
- S2: * FETCH 1 FLAGS (\SEEN)
- S2: * FETCH 2 FLAGS (\SEEN)
- S2: * FETCH 3 FLAGS (\SEEN)
- S2: B001 NO Some of the messages no longer exist.
- C2: B002 NOOP
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 3 EXISTS
- S2: B002 OK NOOP Completed.
- <By receiving FETCH responses for messages 1:3, and an EXPUNGE
- response that indicates messages 4:7 have been expunged, the client
- does not need to re-issue the STORE>
- Gahrns Informational [Page 10]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- 4.2.4. If the ".SILENT" suffix is not used, and a mixture of expunged
- and non-expunged messages are referenced, the server MAY return
- an untagged NO and not set any flags.
- After receiving a tagged NO STORE response, the client SHOULD issue a
- NOOP command so that it will be informed of any pending EXPUNGE
- responses. The client would then re-issue the STORE command after
- updating its message list per any EXPUNGE response.
- If a large number of clients are accessing a shared mailbox, the
- window in which there are no pending expunges may be small or non-
- existent, effectively disallowing a client from setting the flags on
- all messages at once.
- Example: (Building upon the scenario outlined in 4.1.)
- <Client #2 tries to STORE flags on a mixture of expunged and non-
- expunged messages>
- C2: B001 STORE 1:7 +FLAGS (\SEEN)
- S2: B001 NO Some of the messages no longer exist.
- <Client #2 issues a NOOP to be informed of the EXPUNGED messages>
- C2: B002 NOOP
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 4 EXPUNGE
- S2: * 3 EXISTS
- S2: B002 OK NOOP Completed.
- <Client #2 updates its message list and re-issues the STORE on only
- those messages that have not been expunged>
- C2: B003 STORE 1:3 +FLAGS (\SEEN) S2: * FETCH 1 FLAGS
- (\SEEN) S2: * FETCH 2 FLAGS (\SEEN) S2: * FETCH 3 FLAGS
- (\SEEN) S2: B003 OK STORE Completed
- 4.3. Searching of expunged messages
- A server MAY simply not return a search response for messages that
- have been expunged and it has not been able to inform the client
- about. If a client was expecting a particular message to be returned
- in a search result, and it was not, the client SHOULD issue a NOOP
- command to see if the message was expunged by another client.
- Gahrns Informational [Page 11]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- 4.4 Copying of expunged messages
- COPY is the only IMAP4 sequence number command that is safe to allow
- an EXPUNGE response on. This is because a client is not permitted to
- cascade several COPY commands together. A client is required to wait
- and confirm that the copy worked before issuing another one.
- 4.4.1 The server MAY disallow the COPY of messages in a multi-access
- mailbox that contains expunged messages.
- Pending EXPUNGE response(s) MUST be returned to the COPY command.
- Example:
- C: A001 COPY 2,4,6,8 FRED
- S: * 4 EXPUNGE
- S: A001 NO COPY rejected, because some of the requested
- messages were expunged
- Note: Non of the above messages are copied because if a COPY command
- is unsuccessful, the server MUST restore the destination mailbox to
- its state before the COPY attempt.
- 4.4.2 The server MAY allow the COPY of messages in a multi-access
- mailbox that contains expunged messages.
- Pending EXPUNGE response(s) MUST be returned to the COPY command.
- Messages that are copied are messages corresponding to sequence
- numbers before any EXPUNGE response.
- Example:
- C: A001 COPY 2,4,6,8 FRED
- S: * 3 EXPUNGE
- S: A001 OK COPY completed
- In the above example, the messages that are copied to FRED are
- messages 2,4,6,8 at the start of the COPY command. These are
- equivalent to messages 2,3,5,7 at the end of the COPY command. The
- EXPUNGE response can't take place until after the messages from the
- COPY command are identified (because of the "no expunge while no
- commands in progress" rule).
- Gahrns Informational [Page 12]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- Example:
- C: A001 COPY 2,4,6,8 FRED
- S: * 4 EXPUNGE
- S: A001 OK COPY completed
- In the above example, message 4 was copied before it was expunged,
- and MUST appear in the destination mailbox FRED.
- 5. Security Considerations
- This document describes behavior of servers that use the IMAP4
- protocol, and as such, has the same security considerations as
- described in [RFC-2060].
- In particular, some described server behavior does not allow for the
- immediate deletion of information when a mailbox is accessed by
- multiple clients. This may be a consideration when dealing with
- sensitive information where immediate deletion would be preferred.
- 6. References
- [RFC-2060], Crispin, M., "Internet Message Access Protocol - Version
- 4rev1", RFC 2060, University of Washington, December 1996.
- [RFC-2119], Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", RFC 2119, Harvard University, March 1997.
- 7. Acknowledgments
- This document is the result of discussions on the IMAP4 mailing list
- and is meant to reflect consensus of this group. In particular,
- Raymond Cheng, Mark Crispin, Jim Evans, Erik Forsberg, Steve Hole,
- Mark Keasling, Barry Leiba, Syd Logan, John Mani, Pat Moran, Larry
- Osterman, Chris Newman, Bart Schaefer, Vladimir Vulovic, and Jack De
- Winter were active participants in this discussion or made
- suggestions to this document.
- Gahrns Informational [Page 13]
- RFC 2180 IMAP4 Multi-Accessed Mailbox Practice July 1997
- 8. Author's Address
- Mike Gahrns
- Microsoft
- One Microsoft Way
- Redmond, WA, 98072
- Phone: (206) 936-9833
- EMail: mikega@microsoft.com
- Gahrns Informational [Page 14]
|