123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731 |
- Network Working Group P. Resnick
- Request for Comments: 4469 QUALCOMM Incorporated
- Updates: 3501, 3502 April 2006
- Category: Standards Track
- Internet Message Access Protocol (IMAP) CATENATE 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 (2006).
- Abstract
- The CATENATE extension to the Internet Message Access Protocol (IMAP)
- extends the APPEND command to allow clients to create messages on the
- IMAP server that may contain a combination of new data along with
- parts of (or entire) messages already on the server. Using this
- extension, the client can catenate parts of an already existing
- message onto a new message without having to first download the data
- and then upload it back to the server.
- Resnick Standards Track [Page 1]
- RFC 4469 IMAP CATENATE Extension April 2006
- 1. Introduction
- The CATENATE extension to the Internet Message Access Protocol (IMAP)
- [1] allows the client to create a message on the server that can
- include the text of messages (or parts of messages) that already
- exist on the server without having to FETCH them and APPEND them back
- to the server. The CATENATE extension extends the APPEND command so
- that, instead of a single message literal, the command can take as
- arguments any combination of message literals (as described in IMAP
- [1]) and message URLs (as described in the IMAP URL Scheme [2]
- specification). The server takes all the pieces and catenates them
- into the output message. The CATENATE extension can also coexist
- with the MULTIAPPEND extension [3] to APPEND multiple messages in a
- single command.
- There are some obvious uses for the CATENATE extension. The
- motivating use case was to provide a way for a resource-constrained
- client to compose a message for subsequent submission that contains
- data that already exists in that client's IMAP store. Because the
- client does not have to download and re-upload potentially large
- message parts, bandwidth and processing limitations do not have as
- much impact. In addition, since the client can create a message in
- its own IMAP store, the command also addresses the desire of the
- client to archive a copy of a sent message without having to upload
- the message twice. (Mechanisms for sending the message are outside
- the scope of this document.)
- The extended APPEND command can also be used to copy parts of a
- message to another mailbox for archival purposes while getting rid of
- undesired parts. In environments where server storage is limited, a
- client could get rid of large message parts by copying over only the
- necessary parts and then deleting the original message. The
- mechanism could also be used to add data to a message (such as
- prepending message header fields) or to include other data by making
- a copy of the original and catenating the new data.
- 2. The CATENATE Capability
- A server that supports this extension returns "CATENATE" as one of
- the responses to the CAPABILITY command.
- Resnick Standards Track [Page 2]
- RFC 4469 IMAP CATENATE Extension April 2006
- 3. The APPEND Command
- Arguments: mailbox name
- (The following can be repeated in the presence of the
- MULTIAPPEND extension [3])
- OPTIONAL flag parenthesized list
- OPTIONAL date/time string
- a single message literal or one or more message parts to
- catenate, specified as:
- message literal
- or
- message (or message part) URL
- Responses: OPTIONAL NO responses: BADURL, TOOBIG
- Result: OK - append completed
- NO - append error: can't append to that mailbox, error
- in flags or date/time or message text, or can't
- fetch that data
- BAD - command unknown or arguments invalid
- The APPEND command concatenates all the message parts and appends
- them as a new message to the end of the specified mailbox. The
- parenthesized flag list and date/time string set the flags and the
- internal date, respectively, as described in IMAP [1]. The
- subsequent command parameters specify the message parts that are
- appended sequentially to the output message.
- If the original form of APPEND is used, a message literal follows the
- optional flag list and date/time string, which is appended as
- described in IMAP [1]. If the extended form is used, "CATENATE" and
- a parenthesized list of message literals and message URLs follows,
- each of which is appended to the new message. If a message literal
- is specified (indicated by "TEXT"), the octets following the count
- are appended. If a message URL is specified (indicated by "URL"),
- the octets of the body part pointed to by that URL are appended, as
- if the literal returned in a FETCH BODY response were put in place of
- the message part specifier. The APPEND command does not cause the
- \Seen flag to be set for any catenated body part. The APPEND command
- does not change the selected mailbox.
- In the extended APPEND command, the string following "URL" is an IMAP
- URL [2] and is interpreted according to the rules of [2]. The
- present document only describes the behavior of the command using
- IMAP URLs that refer to specific messages or message parts on the
- current IMAP server from the current authenticated IMAP session.
- Because of that, only relative IMAP message or message part URLs
- (i.e., those having no scheme or <iserver>) are used. The base URL
- Resnick Standards Track [Page 3]
- RFC 4469 IMAP CATENATE Extension April 2006
- for evaluating the relative URL is considered "imap://user@server/",
- where "user" is the user name of the currently authenticated user and
- "server" is the domain name of the current server. When in the
- selected state, the base URL is considered
- "imap://user@server/mailbox", where "mailbox" is the encoded name of
- the currently selected mailbox. Additionally, since the APPEND
- command is valid in the authenticated state of an IMAP session, no
- further LOGIN or AUTHENTICATE command is performed for URLs specified
- in the extended APPEND command.
- Note: Use of an absolute IMAP URL or any URL that refers to
- anything other than a message or message part from the current
- authenticated IMAP session is outside the scope of this document
- and would require an extension to this specification, and a server
- implementing only this specification would return NO to such a
- request.
- The client is responsible for making sure that the catenated message
- is in the format of an Internet Message Format (RFC 2822) [4] or
- Multipurpose Internet Mail Extension (MIME) [5] message. In
- particular, when a URL is catenated, the server copies octets,
- unchanged, from the indicated message or message part to the
- catenated message. It does no data conversion (e.g., MIME transfer
- encodings) nor any verification that the data is appropriate for the
- MIME part of the message into which it is inserted. The client is
- also responsible for inserting appropriate MIME boundaries between
- body parts, and writing MIME Content-Type and Content-Transfer-
- Encoding lines as needed in the appropriate places.
- Responses behave just as the original APPEND command described in
- IMAP [1]. If the server implements the IMAP UIDPLUS extension [6],
- it will also return an APPENDUID response code in the tagged OK
- response. Two response codes are provided in Section 4 that can be
- used in the tagged NO response if the APPEND command fails.
- 4. Response Codes
- When a APPEND command fails, it may return a response code that
- describes a reason for the failure.
- 4.1. BADURL Response
- The BADURL response code is returned if the APPEND fails to process
- one of the specified URLs. Possible reasons for this are bad URL
- syntax, unrecognized URL schema, invalid message UID, or invalid body
- part. The BADURL response code contains the first URL specified as a
- parameter to the APPEND command that has caused the operation to
- fail.
- Resnick Standards Track [Page 4]
- RFC 4469 IMAP CATENATE Extension April 2006
- 4.2. TOOBIG Response
- The TOOBIG response code is returned if the resulting message will
- exceed the 4-GB IMAP message limit. This might happen, for example,
- if the client specifies 3 URLs for 2-GB messages. Note that even if
- the server doesn't return TOOBIG, it still has to be defensive
- against misbehaving or malicious clients that try to construct a
- message over the 4-GB limit. The server may also wish to return the
- TOOBIG response code if the resulting message exceeds a server-
- specific message size limit.
- 5. Formal Syntax
- The following syntax specification uses the Augmented Backus-Naur
- Form (ABNF) [7] notation. Elements not defined here can be found in
- the formal syntax of the ABNF [7], IMAP [1], and IMAP ABNF extensions
- [8] specifications. Note that capability and resp-text-code are
- extended from the IMAP [1] specification and append-data is extended
- from the IMAP ABNF extensions [8] specification.
- append-data =/ "CATENATE" SP "(" cat-part *(SP cat-part) ")"
- cat-part = text-literal / url
- text-literal = "TEXT" SP literal
- url = "URL" SP astring
- resp-text-code =/ toobig-response-code / badurl-response-code
- toobig-response-code = "TOOBIG"
- badurl-response-code = "BADURL" SP url-resp-text
- url-resp-text = 1*(%x01-09 /
- %x0B-0C /
- %x0E-5B /
- %x5D-FE) ; Any TEXT-CHAR except "]"
- capability =/ "CATENATE"
- The astring in the definition of url and the url-resp-text in the
- definition of badurl-response-code each contain an imapurl as defined
- by [2].
- Resnick Standards Track [Page 5]
- RFC 4469 IMAP CATENATE Extension April 2006
- 6. Acknowledgements
- Thanks to the members of the LEMONADE working group for their input.
- Special thanks to Alexey Melnikov for the examples.
- 7. Security Considerations
- The CATENATE extension does not raise any security considerations
- that are not present for the base protocol or in the use of IMAP
- URLs, and these issues are discussed in the IMAP [1] and IMAP URL [2]
- documents.
- 8. IANA Considerations
- IMAP4 capabilities are registered by publishing a standards track or
- IESG approved experimental RFC. The registry is currently located at
- <http://www.iana.org/assignments/imap4-capabilities>. This document
- defines the CATENATE IMAP capability. The IANA has added this
- capability to the registry.
- Resnick Standards Track [Page 6]
- RFC 4469 IMAP CATENATE Extension April 2006
- Appendix A. Examples
- Lines not starting with "C: " or "S: " are continuations of the
- previous lines.
- The original message in examples 1 and 2 below (UID = 20) has the
- following structure:
- multipart/mixed MIME message with two body parts:
- 1. text/plain
- 2. application/x-zip-compressed
- Example 1: The following example demonstrates how a CATENATE client
- can replace an attachment in a draft message, without the need to
- download it to the client and upload it back.
- C: A003 APPEND Drafts (\Seen \Draft $MDNSent) CATENATE
- (URL "/Drafts;UIDVALIDITY=385759045/;UID=20/;section=HEADER"
- TEXT {42}
- S: + Ready for literal data
- C:
- C: --------------030308070208000400050907
- C: URL "/Drafts;UIDVALIDITY=385759045/;UID=20/;section=1.MIME"
- URL "/Drafts;UIDVALIDITY=385759045/;UID=20/;section=1" TEXT {42}
- S: + Ready for literal data
- C:
- C: --------------030308070208000400050907
- C: URL "/Drafts;UIDVALIDITY=385759045/;UID=30" TEXT {44}
- S: + Ready for literal data
- C:
- C: --------------030308070208000400050907--
- C: )
- S: A003 OK catenate append completed
- Resnick Standards Track [Page 7]
- RFC 4469 IMAP CATENATE Extension April 2006
- Example 2: The following example demonstrates how the CATENATE
- extension can be used to replace edited text in a draft message, as
- well as header fields for the top level message part (e.g., Subject
- has changed). The previous version of the draft is marked as
- \Deleted. Note that the server also supports the UIDPLUS extension,
- so the APPENDUID response code is returned in the successful OK
- response to the APPEND command.
- C: A003 APPEND Drafts (\Seen \Draft $MDNSent) CATENATE (TEXT {738}
- S: + Ready for literal data
- C: Return-Path: <bar@example.org>
- C: Received: from [127.0.0.2]
- C: by rufus.example.org via TCP (internal) with ESMTPA;
- C: Thu, 11 Nov 2004 16:57:07 +0000
- C: Message-ID: <419399E1.6000505@example.org>
- C: Date: Thu, 12 Nov 2004 16:57:05 +0000
- C: From: Bob Ar <bar@example.org>
- C: X-Accept-Language: en-us, en
- C: MIME-Version: 1.0
- C: To: foo@example.net
- C: Subject: About our holiday trip
- C: Content-Type: multipart/mixed;
- C: boundary="------------030308070208000400050907"
- C:
- C: --------------030308070208000400050907
- C: Content-Type: text/plain; charset=us-ascii; format=flowed
- C: Content-Transfer-Encoding: 7bit
- C:
- C: Our travel agent has sent the updated schedule.
- C:
- C: Cheers,
- C: Bob
- C: --------------030308070208000400050907
- C: URL "/Drafts;UIDVALIDITY=385759045/;UID=20/;Section=2.MIME"
- URL "/Drafts;UIDVALIDITY=385759045/;UID=20/;Section=2" TEXT {44}
- S: + Ready for literal data
- C:
- C: --------------030308070208000400050907--
- C: )
- S: A003 OK [APPENDUID 385759045 45] append Completed
- C: A004 UID STORE 20 +FLAGS.SILENT (\Deleted)
- S: A004 OK STORE completed
- Resnick Standards Track [Page 8]
- RFC 4469 IMAP CATENATE Extension April 2006
- Example 3: The following example demonstrates how the CATENATE
- extension can be used to strip attachments. Below, a PowerPoint
- attachment was replaced by a small text part explaining that the
- attachment was stripped.
- C: A003 APPEND Drafts (\Seen \Draft $MDNSent) CATENATE
- (URL "/Drafts;UIDVALIDITY=385759045/;UID=21/;section=HEADER"
- TEXT {42}
- S: + Ready for literal data
- C:
- C: --------------030308070208000400050903
- C: URL "/Drafts;UIDVALIDITY=385759045/;UID=21/;section=1.MIME"
- URL "/Drafts;UIDVALIDITY=385759045/;UID=21/;section=1" TEXT {255}
- S: + Ready for literal data
- C:
- C: --------------030308070208000400050903
- C: Content-type: text/plain; charset="us-ascii"
- C: Content-transfer-encoding: 7bit
- C:
- C: This body part contained a Power Point presentation that was
- C: deleted upon your request.
- C: --------------030308070208000400050903--
- C: )
- S: A003 OK append Completed
- Resnick Standards Track [Page 9]
- RFC 4469 IMAP CATENATE Extension April 2006
- Example 4: The following example demonstrates a failed APPEND
- command. The server returns the BADURL response code to indicate
- that one of the provided URLs is invalid. This example also
- demonstrates how the CATENATE extension can be used to construct a
- digest of several messages.
- C: A003 APPEND Sent (\Seen $MDNSent) CATENATE (TEXT {541}
- S: + Ready for literal data
- C: Return-Path: <foo@example.org>
- C: Received: from [127.0.0.2]
- C: by rufus.example.org via TCP (internal) with ESMTPA;
- C: Thu, 11 Nov 2004 16:57:07 +0000
- C: Message-ID: <419399E1.6000505@example.org>
- C: Date: Thu, 21 Nov 2004 16:57:05 +0000
- C: From: Farren Oo <foo@example.org>
- C: X-Accept-Language: en-us, en
- C: MIME-Version: 1.0
- C: To: bar@example.org
- C: Subject: Digest of the mailing list for today
- C: Content-Type: multipart/digest;
- C: boundary="------------030308070208000400050904"
- C:
- C: --------------030308070208000400050904
- C: URL "/INBOX;UIDVALIDITY=785799047/;UID=11467" TEXT {42}
- S: + Ready for literal data
- C:
- C: --------------030308070208000400050904
- C: URL "/INBOX;UIDVALIDITY=785799047/;UID=113330/;section=1.5.9"
- TEXT {42}
- S: + Ready for literal data
- C:
- C: --------------030308070208000400050904
- C: URL "/INBOX;UIDVALIDITY=785799047/;UID=11916" TEXT {44}
- S: + Ready for literal data
- C:
- C: --------------030308070208000400050904--
- C: )
- S: A003 NO [BADURL "/INBOX;UIDVALIDITY=785799047/;UID=113330;
- section=1.5.9"] CATENATE append has failed, one message expunged
- Note that the server could have validated the URLs as they were
- received and therefore could have returned the tagged NO response
- with BADURL response-code in place of any continuation request after
- the URL was received.
- Resnick Standards Track [Page 10]
- RFC 4469 IMAP CATENATE Extension April 2006
- 9. Normative References
- [1] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1",
- RFC 3501, March 2003.
- [2] Newman, C., "IMAP URL Scheme", RFC 2192, September 1997.
- [3] Crispin, M., "Internet Message Access Protocol (IMAP) -
- MULTIAPPEND Extension", RFC 3502, March 2003.
- [4] Resnick, P., "Internet Message Format", RFC 2822, April 2001.
- [5] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
- Extensions (MIME) Part One: Format of Internet Message Bodies",
- RFC 2045, November 1996.
- [6] Crispin, M., "Internet Message Access Protocol (IMAP) - UIDPLUS
- extension", RFC 4315, December 2005.
- [7] Crocker, D. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", RFC 4234, October 2005.
- [8] Melnikov, A. and C. Daboo, "Collected Extensions to IMAP4 ABNF",
- RFC 4466, April 2006.
- Resnick Standards Track [Page 11]
- RFC 4469 IMAP CATENATE Extension April 2006
- Author's Address
- Peter W. Resnick
- QUALCOMM Incorporated
- 5775 Morehouse Drive
- San Diego, CA 92121-1714
- US
- Phone: +1 858 651 4478
- EMail: presnick@qualcomm.com
- URI: http://www.qualcomm.com/~presnick/
- Resnick Standards Track [Page 12]
- RFC 4469 IMAP CATENATE Extension April 2006
- Full Copyright Statement
- Copyright (C) The Internet Society (2006).
- This document is subject to the rights, licenses and restrictions
- contained in BCP 78, and except as set forth therein, the authors
- retain all their rights.
- This document and the information contained herein are provided on an
- "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
- OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
- ENGINEERING TASK FORCE DISCLAIM 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.
- Intellectual Property
- The IETF takes no position regarding the validity or scope of any
- Intellectual Property Rights or other rights that might be claimed to
- pertain to the implementation or use of the technology described in
- this document or the extent to which any license under such rights
- might or might not be available; nor does it represent that it has
- made any independent effort to identify any such rights. Information
- on the procedures with respect to rights in RFC documents can be
- found in BCP 78 and BCP 79.
- Copies of IPR disclosures made to the IETF Secretariat and any
- assurances of licenses to be made available, or the result of an
- attempt made to obtain a general license or permission for the use of
- such proprietary rights by implementers or users of this
- specification can be obtained from the IETF on-line IPR repository at
- http://www.ietf.org/ipr.
- The IETF invites any interested party to bring to its attention any
- copyrights, patents or patent applications, or other proprietary
- rights that may cover technology that may be required to implement
- this standard. Please address the information to the IETF at
- ietf-ipr@ietf.org.
- Acknowledgement
- Funding for the RFC Editor function is provided by the IETF
- Administrative Support Activity (IASA).
- Resnick Standards Track [Page 13]
|