mirror of
https://github.com/uw-imap/imap.git
synced 2024-11-16 10:28:23 +01:00
396 lines
13 KiB
Plaintext
396 lines
13 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Network Working Group M. Crispin
|
|||
|
Request for Comments: 3502 University of Washington
|
|||
|
Category: Standards Track March 2003
|
|||
|
|
|||
|
|
|||
|
Internet Message Access Protocol (IMAP) - MULTIAPPEND Extension
|
|||
|
|
|||
|
Status of this Memo
|
|||
|
|
|||
|
This document specifies an Internet standards track protocol for the
|
|||
|
Internet community, and requests discussion and suggestions for
|
|||
|
improvements. Please refer to the current edition of the "Internet
|
|||
|
Official Protocol Standards" (STD 1) for the standardization state
|
|||
|
and status of this protocol. Distribution of this memo is unlimited.
|
|||
|
|
|||
|
Copyright Notice
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2003). All Rights Reserved.
|
|||
|
|
|||
|
Abstract
|
|||
|
|
|||
|
This document describes the multiappending extension to the Internet
|
|||
|
Message Access Protocol (IMAP) (RFC 3501). This extension provides
|
|||
|
substantial performance improvements for IMAP clients which upload
|
|||
|
multiple messages at a time to a mailbox on the server.
|
|||
|
|
|||
|
A server which supports this extension indicates this with a
|
|||
|
capability name of "MULTIAPPEND".
|
|||
|
|
|||
|
Terminology
|
|||
|
|
|||
|
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
|||
|
"SHOULD", "SHOULD NOT", "MAY", and "OPTIONAL" in this document are to
|
|||
|
be interpreted as described in [KEYWORDS].
|
|||
|
|
|||
|
Introduction
|
|||
|
|
|||
|
The MULTIAPPEND extension permits uploading of multiple messages with
|
|||
|
a single command. When used in conjunction with the [LITERAL+]
|
|||
|
extension, the entire upload is accomplished in a single
|
|||
|
command/response round trip.
|
|||
|
|
|||
|
A MULTIAPPEND APPEND operation is atomic; either all messages are
|
|||
|
successfully appended, or no messages are appended.
|
|||
|
|
|||
|
In the base IMAP specification, each message must be appended in a
|
|||
|
separate command, and there is no mechanism to "unappend" messages if
|
|||
|
an error occurs while appending. Also, some mail stores may require
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Crispin Standards Track [Page 1]
|
|||
|
|
|||
|
RFC 3502 IMAP MULTIAPPEND March 2003
|
|||
|
|
|||
|
|
|||
|
an expensive "open/lock + sync/unlock/close" operation as part of
|
|||
|
appending; this can be quite expensive if it must be done on a
|
|||
|
per-message basis.
|
|||
|
|
|||
|
If the server supports both LITERAL+ and pipelining but not
|
|||
|
MULTIAPPEND, it may be possible to get some of the performance
|
|||
|
advantages of MULTIAPPEND by doing a pipelined "batch" append.
|
|||
|
However, it will not work as well as MULTIAPPEND for the following
|
|||
|
reasons:
|
|||
|
|
|||
|
1) Multiple APPEND commands, even as part of a pipelined batch,
|
|||
|
are non-atomic by definition. There is no way to revert the
|
|||
|
mailbox to the state before the batch append in the event of an
|
|||
|
error.
|
|||
|
|
|||
|
2) It may not be feasible for the server to coalesce pipelined
|
|||
|
APPEND operations so as to avoid the "open/lock +
|
|||
|
sync/unlock/close" overhead described above. In any case, such
|
|||
|
coalescing would be timing dependent and thus potentially
|
|||
|
unreliable. In particular, with traditional UNIX mailbox files,
|
|||
|
it is assumed that a lock is held only for a single atomic
|
|||
|
operation, and many applications disregard any lock that is
|
|||
|
older than 5 minutes.
|
|||
|
|
|||
|
3) If an error occurs, depending upon the nature of the error,
|
|||
|
it is possible for additional messages to be appended after the
|
|||
|
error. For example, the user wants to append 5 messages, but a
|
|||
|
disk quota error occurs with the third message because of its
|
|||
|
size. However, the fourth and fifth messages have already been
|
|||
|
sent in the pipeline, so the mailbox ends up with the first,
|
|||
|
second, fourth, and fifth messages of the batch appended.
|
|||
|
|
|||
|
6.3.11. APPEND Command
|
|||
|
|
|||
|
Arguments: mailbox name
|
|||
|
one or more messages to upload, specified as:
|
|||
|
OPTIONAL flag parenthesized list
|
|||
|
OPTIONAL date/time string
|
|||
|
message literal
|
|||
|
|
|||
|
Data: no specific responses for this command
|
|||
|
|
|||
|
Result: OK - append completed
|
|||
|
NO - append error: can't append to that mailbox, error
|
|||
|
in flags or date/time or message text,
|
|||
|
append cancelled
|
|||
|
BAD - command unknown or arguments invalid
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Crispin Standards Track [Page 2]
|
|||
|
|
|||
|
RFC 3502 IMAP MULTIAPPEND March 2003
|
|||
|
|
|||
|
|
|||
|
The APPEND command appends the literal arguments as new messages
|
|||
|
to the end of the specified destination mailbox. This argument
|
|||
|
SHOULD be in the format of an [RFC-2822] message. 8-bit
|
|||
|
characters are permitted in the message. A server implementation
|
|||
|
that is unable to preserve 8-bit data properly MUST be able to
|
|||
|
reversibly convert 8-bit APPEND data to 7-bit using a [MIME-IMB]
|
|||
|
content transfer encoding.
|
|||
|
|
|||
|
Note: There MAY be exceptions, e.g., draft messages, in
|
|||
|
which required [RFC-2822] header lines are omitted in the
|
|||
|
message literal argument to APPEND. The full implications
|
|||
|
of doing so MUST be understood and carefully weighed.
|
|||
|
|
|||
|
If a flag parenthesized list is specified, the flags SHOULD be set
|
|||
|
in the resulting message; otherwise, the flag list of the
|
|||
|
resulting message is set empty by default.
|
|||
|
|
|||
|
If a date-time is specified, the internal date SHOULD be set in
|
|||
|
the resulting message; otherwise, the internal date of the
|
|||
|
resulting message is set to the current date and time by default.
|
|||
|
|
|||
|
A zero-length message literal argument is an error, and MUST
|
|||
|
return a NO. This can be used to cancel the append.
|
|||
|
|
|||
|
If the append is unsuccessful for any reason (including being
|
|||
|
cancelled), the mailbox MUST be restored to its state before the
|
|||
|
APPEND attempt; no partial appending is permitted. The server MAY
|
|||
|
return an error before processing all the message arguments.
|
|||
|
|
|||
|
If the destination mailbox does not exist, a server MUST return an
|
|||
|
error, and MUST 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 APPEND
|
|||
|
if the CREATE is successful.
|
|||
|
|
|||
|
If the mailbox is currently selected, the normal new message
|
|||
|
actions SHOULD occur. Specifically, the server SHOULD notify the
|
|||
|
client immediately via an untagged EXISTS response. If the server
|
|||
|
does not do so, the client MAY issue a NOOP command (or failing
|
|||
|
that, a CHECK command) after one or more APPEND commands.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Crispin Standards Track [Page 3]
|
|||
|
|
|||
|
RFC 3502 IMAP MULTIAPPEND March 2003
|
|||
|
|
|||
|
|
|||
|
Example: C: A003 APPEND saved-messages (\Seen) {329}
|
|||
|
S: + Ready for literal data
|
|||
|
C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
|
|||
|
C: From: Fred Foobar <foobar@Blurdybloop.example.COM>
|
|||
|
C: Subject: afternoon meeting
|
|||
|
C: To: mooch@owatagu.example.net
|
|||
|
C: Message-Id: <B27397-0100000@Blurdybloop.example.COM>
|
|||
|
C: MIME-Version: 1.0
|
|||
|
C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
|
|||
|
C:
|
|||
|
C: Hello Joe, do you think we can meet at 3:30 tomorrow?
|
|||
|
C: (\Seen) " 7-Feb-1994 22:43:04 -0800" {295}
|
|||
|
S: + Ready for literal data
|
|||
|
C: Date: Mon, 7 Feb 1994 22:43:04 -0800 (PST)
|
|||
|
C: From: Joe Mooch <mooch@OWaTaGu.example.net>
|
|||
|
C: Subject: Re: afternoon meeting
|
|||
|
C: To: foobar@blurdybloop.example.com
|
|||
|
C: Message-Id: <a0434793874930@OWaTaGu.example.net>
|
|||
|
C: MIME-Version: 1.0
|
|||
|
C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
|
|||
|
C:
|
|||
|
C: 3:30 is fine with me.
|
|||
|
C:
|
|||
|
S: A003 OK APPEND completed
|
|||
|
C: A004 APPEND bogusname (\Flagged) {1023}
|
|||
|
S: A004 NO [TRYCREATE] No such mailbox as bogusname
|
|||
|
C: A005 APPEND test (\Flagged) {99}
|
|||
|
S: + Ready for literal data
|
|||
|
C: Date: Mon, 7 Feb 2000 22:43:04 -0800 (PST)
|
|||
|
C: From: Fred Foobar <fred@example.com>
|
|||
|
C: Subject: hmm...
|
|||
|
C: {35403}
|
|||
|
S: A005 NO APPEND failed: Disk quota exceeded
|
|||
|
|
|||
|
Note: The APPEND command is not used for message delivery,
|
|||
|
because it does not provide a mechanism to transfer [SMTP]
|
|||
|
envelope information.
|
|||
|
|
|||
|
Modification to IMAP4rev1 Base Protocol Formal Syntax
|
|||
|
|
|||
|
The following syntax specification uses the Augmented Backus-Naur
|
|||
|
Form (ABNF) notation as specified in [ABNF].
|
|||
|
|
|||
|
append = "APPEND" SP mailbox 1*append-message
|
|||
|
|
|||
|
append-message = [SP flag-list] [SP date-time] SP literal
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Crispin Standards Track [Page 4]
|
|||
|
|
|||
|
RFC 3502 IMAP MULTIAPPEND March 2003
|
|||
|
|
|||
|
|
|||
|
MULTIAPPEND Interaction with UIDPLUS Extension
|
|||
|
|
|||
|
Servers which support both MULTIAPPEND and [UIDPLUS] will have the
|
|||
|
"resp-code-apnd" rule modified as follows:
|
|||
|
|
|||
|
resp-code-apnd = "APPENDUID" SP nz-number SP set
|
|||
|
|
|||
|
That is, the APPENDUID response code returns as many UIDs as there
|
|||
|
were messages appended in the multiple append. The UIDs returned
|
|||
|
should be in the order the articles where appended. The message set
|
|||
|
may not contain extraneous UIDs or the symbol "*".
|
|||
|
|
|||
|
Security Considerations
|
|||
|
|
|||
|
The MULTIAPPEND extension does not raise any security considerations
|
|||
|
that are not present in the base [IMAP] protocol, and these issues
|
|||
|
are discussed in [IMAP]. Nevertheless, it is important to remember
|
|||
|
that IMAP4rev1 protocol transactions, including electronic mail data,
|
|||
|
are sent in the clear over the network unless protection from
|
|||
|
snooping is negotiated, either by the use of STARTTLS, privacy
|
|||
|
protection is negotiated in the AUTHENTICATE command, or some other
|
|||
|
protection mechanism is in effect.
|
|||
|
|
|||
|
Normative References
|
|||
|
|
|||
|
[ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax
|
|||
|
Specifications: ABNF", RFC 2234, November 1997.
|
|||
|
|
|||
|
[IMAP] Crispin, M., "Internet Message Access Protocol - Version
|
|||
|
4rev1", RFC 3501, March 2003.
|
|||
|
|
|||
|
[KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate
|
|||
|
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
|||
|
|
|||
|
[MIME-IMB] Freed, N. and N. Borenstein, "MIME (Multipurpose Internet
|
|||
|
Mail Extensions) Part One: Format of Internet Message
|
|||
|
Bodies", RFC 2045, November 1996.
|
|||
|
|
|||
|
[RFC-2822] Resnick, P., "Internet Message Format", RFC 2822, April
|
|||
|
2001.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Crispin Standards Track [Page 5]
|
|||
|
|
|||
|
RFC 3502 IMAP MULTIAPPEND March 2003
|
|||
|
|
|||
|
|
|||
|
Informative References
|
|||
|
|
|||
|
[LITERAL+] Myers, J., "IMAP4 non-synchronizing literals", RFC 2088,
|
|||
|
January 1997.
|
|||
|
|
|||
|
[UIDPLUS] Myers, J., "IMAP4 UIDPLUS extension", RFC 2359, June 1988.
|
|||
|
|
|||
|
[SMTP] Klensin, J., Editor, "Simple Mail Transfer Protocol", RFC
|
|||
|
2821, April 2001.
|
|||
|
|
|||
|
Author's Address
|
|||
|
|
|||
|
Mark R. Crispin
|
|||
|
Networks and Distributed Computing
|
|||
|
University of Washington
|
|||
|
4545 15th Avenue NE
|
|||
|
Seattle, WA 98105-4527
|
|||
|
|
|||
|
Phone: (206) 543-5762
|
|||
|
EMail: MRC@CAC.Washington.EDU
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Crispin Standards Track [Page 6]
|
|||
|
|
|||
|
RFC 3502 IMAP MULTIAPPEND March 2003
|
|||
|
|
|||
|
|
|||
|
Full Copyright Statement
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2003). All Rights Reserved.
|
|||
|
|
|||
|
This document and translations of it may be copied and furnished to
|
|||
|
others, and derivative works that comment on or otherwise explain it
|
|||
|
or assist in its implementation may be prepared, copied, published
|
|||
|
and distributed, in whole or in part, without restriction of any
|
|||
|
kind, provided that the above copyright notice and this paragraph are
|
|||
|
included on all such copies and derivative works. However, this
|
|||
|
document itself may not be modified in any way, such as by removing
|
|||
|
the copyright notice or references to the Internet Society or other
|
|||
|
Internet organizations, except as needed for the purpose of
|
|||
|
developing Internet standards in which case the procedures for
|
|||
|
copyrights defined in the Internet Standards process must be
|
|||
|
followed, or as required to translate it into languages other than
|
|||
|
English.
|
|||
|
|
|||
|
The limited permissions granted above are perpetual and will not be
|
|||
|
revoked by the Internet Society or its successors or assigns.
|
|||
|
|
|||
|
This document and the information contained herein is provided on an
|
|||
|
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
|
|||
|
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
|
|||
|
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
|
|||
|
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
|
|||
|
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|||
|
|
|||
|
Acknowledgement
|
|||
|
|
|||
|
Funding for the RFC Editor function is currently provided by the
|
|||
|
Internet Society.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Crispin Standards Track [Page 7]
|
|||
|
|