diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc6558.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc6558.txt')
-rw-r--r-- | doc/rfc/rfc6558.txt | 451 |
1 files changed, 451 insertions, 0 deletions
diff --git a/doc/rfc/rfc6558.txt b/doc/rfc/rfc6558.txt new file mode 100644 index 0000000..611edef --- /dev/null +++ b/doc/rfc/rfc6558.txt @@ -0,0 +1,451 @@ + + + + + + +Internet Engineering Task Force (IETF) A. Melnikov +Request for Comments: 6558 Isode Limited +Category: Standards Track B. Leiba +ISSN: 2070-1721 K. Li + Huawei Technologies + March 2012 + + + Sieve Extension for Converting Messages before Delivery + +Abstract + + This document describes how the "CONVERT" IMAP extension can be used + within the Sieve mail filtering language to transform messages before + final delivery. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 5741. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + http://www.rfc-editor.org/info/rfc6558. + +Copyright Notice + + Copyright (c) 2012 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (http://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + + + + + + + +Melnikov, et al. Standards Track [Page 1] + +RFC 6558 Sieve CONVERT March 2012 + + +Table of Contents + + 1. Introduction ....................................................2 + 1.1. Conventions Used in This Document ..........................2 + 2. "convert" Action ................................................2 + 2.1. Interaction with Other Tests and Actions ...................3 + 2.2. "convert" as a Test ........................................4 + 3. Examples ........................................................5 + 3.1. Example 1 ..................................................5 + 3.2. Example 2 ..................................................5 + 3.3. Example 3 ..................................................5 + 3.4. Example 4 ..................................................6 + 4. Security Considerations .........................................7 + 5. IANA Considerations .............................................7 + 6. Acknowledgements ................................................7 + 7. Normative References ............................................7 + +1. Introduction + + The IMAP "CONVERT" extension [RFC5259] adds an IMAP command for + performing client-controlled conversions on whole messages or their + body parts. This document defines a similar extension to the Sieve + mail filtering language [RFC5228], which reuses the conversion + parameters and framework established by IMAP CONVERT. + +1.1. Conventions Used in This Document + + 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 [RFC2119]. + + Conventions for notations are as in Sieve [RFC5228], Section 1.1. + +2. "convert" Action + + Usage: convert <quoted-from-media-type: string> + <quoted-to-media-type: string> + <transcoding-params: string-list> + + The "convert" action specifies that all body parts with a media type + [RFC2046] (sometimes called "MIME type") equal to <quoted-from-media- + type> be converted to the media type in <quoted-to-media-type> using + conversion parameters specified in <transcoding-params>. Each + conversion parameter value has the following syntax: "<transcoding- + param-name>=<transcoding-param-value>", where <transcoding-param- + name> and <transcoding-param-value> are defined in CONVERT [RFC5259]. + Messages that don't have any body parts with the <quoted-from-media- + type> media type are not affected by the conversion. + + + +Melnikov, et al. Standards Track [Page 2] + +RFC 6558 Sieve CONVERT March 2012 + + + The "convert" action can be used with Sieve MIME Part Tests + [RFC5703], in the case that some, but not all of the body parts need + to be converted, or where different body parts might require + different conversions. When the "convert" action appears in a + "foreverypart" loop, it applies only to the body part being + processed, and not to any other body parts (see Section 3.2 for an + example). + + When the "convert" action appears outside a "foreverypart" loop, the + conversion applies equally to all body parts -- that is, all body + parts that have the "quoted-from-media-type" are converted, using the + same transcoding parameters. + + A single "convert" action will only apply once to any body part. If, + for example, << convert "image/jpeg" "image/jpeg" ["pix-x=100","pix- + y=120"] >> converts a larger JPEG image to the smaller 100 x 120 + size, that will be the end of that "convert" action on that body + part. The action will not see a "new" JPEG body part to process, + resulting from the conversion. + + If a "convert" action cannot be completed -- perhaps because the + conversion failed, or because the requested conversion is not + available -- that "convert" action MUST terminate and leave the + message unchanged, rolling back any other conversions done by that + action. The script processing continues, and prior or subsequent + "convert" actions are not affected. No error condition is raised, + and no partial conversions from a single "convert" action are + allowed. + + Implementations might defer any actual conversion until the results + of the conversion are needed for script processing, to avoid doing + conversions unnecessarily. Consider the case wherein a "convert" + action is processed but a "discard" action results without the need + to actually perform the conversion. + + When conversions actually need to be done, they can put a significant + load on the server. Computationally expensive conversions of a lot + of body parts can constitute an attack vector; even if done + legitimately, they can create an unacceptable load. Servers MAY + refuse conversions, or do them at lower priority, effectively slowing + the requesting process in order to avoid negative effects on service + to other processes. + +2.1. Interaction with Other Tests and Actions + + Whether or not the actual conversion has been done yet, a successful + "convert" action effectively changes the message, and all subsequent + actions, including any other "convert" actions, apply to the changed + + + +Melnikov, et al. Standards Track [Page 3] + +RFC 6558 Sieve CONVERT March 2012 + + + message. The "convert" action does not affect the applicability of + other actions; any action that was applicable before the "convert" is + equally applicable to the changed message afterward. + + When a disposition-type action, such as "fileinto" or "redirect", is + encountered, the state of the message with respect to conversions is + "locked in" for that disposition-type action. Whether the + implementation performs the action at that point or batches it for + later, it MUST perform the action on the message as it stood at the + time, and MUST NOT include subsequent conversions encountered later + in the script processing. Therefore, the sequence "convert, + fileinto, convert, fileinto" will store two different versions of the + message: the first "fileinto" uses only the first conversion, while + the second uses both. See Section 3.4 for an example of how this can + be used. + + In addition, any tests done on the message and its parts will test + the message after prior conversions have been done. The fourth block + of Section 3.4 shows an example of this situation. + + Convert actions are cumulative, and each conversion operates on the + message as it stands after all prior conversions. See the fourth + block of Section 3.4 for an example of how this might be tricky. + + Because the implicit keep (see Section 2.10.2 of [RFC5228]), if it is + in effect, acts on the final state of the message, all conversions + are performed before any implicit keep. + +2.2. "convert" as a Test + + To simplify testing for supported and successful conversions, the + "convert" action can also be used as a test. As such, it will + attempt to perform the requested conversion(s) and will evaluate to + "false" if and only if at least one conversion failed. The failure + can be because a conversion was unsupported or because the data could + not be converted (perhaps it had been corrupted in transit or + mislabeled at its origin). + + This creates a new type of Sieve action, a "testable action". The + usage as a test is exactly the same as for an action, and it doubles + as an action and a test of the action's result at the same time. See + Section 3.2 for an example of how this test can be used. + + Note that defining this new testable action does not change the + definitions of any other actions -- it does not imply that other + actions can be used as tests. Future extensions might define other + testable actions, but those specifications would be responsible for + clearly specifying that. + + + +Melnikov, et al. Standards Track [Page 4] + +RFC 6558 Sieve CONVERT March 2012 + + +3. Examples + +3.1. Example 1 + + In the following example, all "image/tiff" body parts of the message + are converted to "image/jpeg" with image resolution of 320x240 + pixels. The converted message is then subject to the implicit keep. + + require ["convert"]; + convert "image/tiff" "image/jpeg" ["pix-x=320","pix-y=240"]; + +3.2. Example 2 + + In the following example, all "image/tiff" body parts of the message + are converted to "image/jpeg", as in Example 1. If the conversions + were successful, those messages are then filed into a mailbox called + "INBOX.pics". Other messages (those with no image/tiff body parts) + are subject to the implicit keep, and have not been converted. + + require ["mime", "fileinto", "convert"]; + if header :mime :anychild :contenttype + "Content-Type" "image/tiff" + { + if (convert "image/tiff" "image/jpeg" ["pix-x=320","pix-y=240"]) + { + fileinto "INBOX.pics"; + } + } + +3.3. Example 3 + + In the following example, only "image/tiff" body parts with a + Content-Disposition of "inline" are converted. Matching parts that + are larger than 500 kilobytes are converted using an image resolution + of 640x480 pixels, and those smaller are converted to 320x240 pixels. + The message disposition is not changed, so the implicit keep will be + in effect unless something else in the script changes that. + + require ["mime", "foreverypart", "fileinto", "convert"]; + foreverypart + { + if header :mime :param "filename" :contains + "Content-Disposition" "inline" + { + if size :over "500K" + { + convert "image/tiff" "image/jpeg" ["pix-x=640","pix-y=480"]; + } else { + + + +Melnikov, et al. Standards Track [Page 5] + +RFC 6558 Sieve CONVERT March 2012 + + + convert "image/tiff" "image/jpeg" ["pix-x=320","pix-y=240"]; + } + } + } + + [... script continues ...] + +3.4. Example 4 + + The following example shows some tricky interactions between multiple + "convert" actions and other disposition-type actions. + + require ["mime", "foreverypart", + "fileinto", "redirect", "convert"]; + + # The first "if" block will convert all image/tiff body parts + # to 640x480 jpegs and will file the message + # into the "INBOX.pics" mailbox as converted at this point. + if header :mime :anychild :contenttype + "Content-Type" "image/tiff" + { + convert "image/tiff" "image/jpeg" ["pix-x=640","pix-y=480"]; + fileinto "INBOX.pics"; + } + + # The second block, the "foreverypart" loop, will convert all + # inline jpegs to 320x240 resolution... including any tiff body + # parts that had been converted in the first block, above. + # Therefore, any tiff that had been converted to a 640x480 jpeg + # will be re-converted to a 320x240 jpeg here if its + # Content-Disposition is specified as "inline". + foreverypart + { + if header :mime :param "filename" :contains + "Content-Disposition" "inline" + { + convert "image/jpeg" "image/jpeg" ["pix-x=320","pix-y=240"]; + } + } + + # The third block will take any message that contains a header + # field called "Mobile-Link" and redirect it to the user's + # mobile address. The redirected message will include both + # conversions above, from block one and block two. + if exists "Mobile-Link" + { + redirect "joe@mobile.example.com"; + } + + + +Melnikov, et al. Standards Track [Page 6] + +RFC 6558 Sieve CONVERT March 2012 + + + # The fourth block will file the message into "Tiff" if it + # contains any tiff body parts. But because of the earlier + # conversion (in the first block), there will never be any + # tiff body parts, so this "fileinto" will never happen. + if header :mime :anychild :contenttype + "Content-Type" "image/tiff" + { + fileinto "Tiff"; + } + + # Now, at the end of the script processing, the Sieve + # processor will perform an implicit keep if none of + # the "fileinto" and "redirect" actions were taken. + # The kept message will include any conversions that + # were done (that is, any from the second block). + +4. Security Considerations + + Security considerations given in IMAP CONVERT [RFC5259] and Sieve + [RFC5228] are relevant to this document. There are no additional + security considerations resulting from combining the two. + +5. IANA Considerations + + IANA has added the following registration to the "Sieve Extensions" + registry, as defined in RFC 5228: + + Capability name: convert + Description: adds a new Sieve test and action that enable Sieve + scripts to perform data conversions on the message being + delivered. + RFC number: RFC 6558 + Contact address: The Sieve discussion list <sieve@ietf.org> + +6. Acknowledgements + + The authors also want to thank all who have contributed key insight + and extensively reviewed and discussed the concepts of CONVERT. + + Qian Sun contributed text to this document. + +7. Normative References + + [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail + Extensions (MIME) Part Two: Media Types", RFC 2046, + November 1996. + + + + + +Melnikov, et al. Standards Track [Page 7] + +RFC 6558 Sieve CONVERT March 2012 + + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC5228] Guenther, P. and T. Showalter, "Sieve: An Email Filtering + Language", RFC 5228, January 2008. + + [RFC5259] Melnikov, A. and P. Coates, "Internet Message Access + Protocol - CONVERT Extension", RFC 5259, July 2008. + + [RFC5703] Hansen, T. and C. Daboo, "Sieve Email Filtering: MIME Part + Tests, Iteration, Extraction, Replacement, and Enclosure", + RFC 5703, October 2009. + +Authors' Addresses + + Alexey Melnikov + Isode Limited + 5 Castle Business Village + 36 Station Road + Hampton, Middlesex TW12 2BX + UK + + EMail: Alexey.Melnikov@isode.com + URI: http://www.melnikov.ca/ + + + Barry Leiba + Huawei Technologies + + Phone: +1 646 827 0648 + EMail: barryleiba@computer.org + URI: http://internetmessagingtechnology.org/ + + + Kepeng Li + Huawei Technologies + Huawei Base, Bantian, Longgang District + Shenzhen, Guangdong 518129 + P. R. China + + Phone: +86-755-28974289 + EMail: likepeng@huawei.com + + + + + + + + + +Melnikov, et al. Standards Track [Page 8] + |