draft-ietf-sieve-convert-06.txt   rfc6558.txt 
Sieve Working Group A. Melnikov Internet Engineering Task Force (IETF) A. Melnikov
Internet-Draft Isode Limited Request for Comments: 6558 Isode Limited
Intended status: Standards Track Q. Sun Category: Standards Track B. Leiba
Expires: June 3, 2012 B. Leiba ISSN: 2070-1721 K. Li
K. Li
Huawei Technologies Huawei Technologies
December 1, 2011 March 2012
Sieve Extension for Converting Messages Before Delivery Sieve Extension for Converting Messages before Delivery
draft-ietf-sieve-convert-06
Abstract Abstract
This document describes how the "CONVERT" IMAP extension can be used This document describes how the "CONVERT" IMAP extension can be used
within the Sieve mail filtering language to transform messages before within the Sieve mail filtering language to transform messages before
final delivery. final delivery.
Status of this Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering This is an Internet Standards Track document.
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months This document is a product of the Internet Engineering Task Force
and may be updated, replaced, or obsoleted by other documents at any (IETF). It represents the consensus of the IETF community. It has
time. It is inappropriate to use Internet-Drafts as reference received public review and has been approved for publication by the
material or to cite them other than as "work in progress." Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in Section 2 of RFC 5741.
This Internet-Draft will expire on June 3, 2012. 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 Notice
Copyright (c) 2011 IETF Trust and the persons identified as the Copyright (c) 2012 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction ....................................................2
1.1. Conventions Used in this Document . . . . . . . . . . . . . . 3 1.1. Conventions Used in This Document ..........................2
2. "convert" Action ................................................2
2. "convert" action . . . . . . . . . . . . . . . . . . . . . . 3 2.1. Interaction with Other Tests and Actions ...................3
2.1. Interaction with other tests and actions . . . . . . . . . . 4 2.2. "convert" as a Test ........................................4
2.2. "convert" as a test . . . . . . . . . . . . . . . . . . . . . 5 3. Examples ........................................................5
3.1. Example 1 ..................................................5
3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2. Example 2 ..................................................5
3.1. Example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.3. Example 3 ..................................................5
3.2. Example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.4. Example 4 ..................................................6
3.3. Example 3 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4. Security Considerations .........................................7
3.4. Example 4 . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5. IANA Considerations .............................................7
6. Acknowledgements ................................................7
4. Security Considerations . . . . . . . . . . . . . . . . . . . 8 7. Normative References ............................................7
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 8
7. Normative References . . . . . . . . . . . . . . . . . . . . 8
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 9
1. Introduction 1. Introduction
The IMAP "CONVERT" extension [RFC5259] adds an IMAP command for The IMAP "CONVERT" extension [RFC5259] adds an IMAP command for
performing client-controlled conversions on whole messages or their performing client-controlled conversions on whole messages or their
body parts. This document defines a similar extension to the Sieve body parts. This document defines a similar extension to the Sieve
mail filtering language [RFC5228], which reuses the conversion mail filtering language [RFC5228], which reuses the conversion
parameters and framework established by IMAP CONVERT. parameters and framework established by IMAP CONVERT.
1.1. Conventions Used in this Document 1.1. Conventions Used in This Document
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119]. document are to be interpreted as described in RFC 2119 [RFC2119].
Conventions for notations are as in Sieve [RFC5228] section 1.1, Conventions for notations are as in Sieve [RFC5228], Section 1.1.
including the use of ABNF [RFC5234].
2. "convert" action 2. "convert" Action
Usage: convert <quoted-from-mime-type: string> Usage: convert <quoted-from-media-type: string>
<quoted-to-mime-type: string> <quoted-to-media-type: string>
<transcoding-params: string-list> <transcoding-params: string-list>
The "convert" action specifies that body parts with "quoted-from- The "convert" action specifies that all body parts with a media type
mime-type" MIME type be converted to "quoted-to-mime-type" MIME type [RFC2046] (sometimes called "MIME type") equal to <quoted-from-media-
using conversion parameters specified in "transcoding-params". Each 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- conversion parameter value has the following syntax: "<transcoding-
param-name>=<transcoding-param-value>", where <transcoding-param- param-name>=<transcoding-param-value>", where <transcoding-param-
name> and <transcoding-param-value> are defined in CONVERT [RFC5259]. name> and <transcoding-param-value> are defined in CONVERT [RFC5259].
Messages that don't have any body parts with the "quoted-from-mime- Messages that don't have any body parts with the <quoted-from-media-
type" MIME type are not affected by the conversion. type> media type are not affected by the conversion.
The "convert" action can be used with Sieve MIME Part Tests 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 [RFC5703], in the case that some, but not all of the body parts need
to be converted, or where different body parts might require to be converted, or where different body parts might require
different conversions. When the "convert" action appears in a different conversions. When the "convert" action appears in a
"foreverypart" loop, it applies only to the body part being "foreverypart" loop, it applies only to the body part being
processed, and not to any other body parts (see Section 3.2 for an processed, and not to any other body parts (see Section 3.2 for an
example). example).
When the "convert" action appears outside a "foreverypart" loop, the When the "convert" action appears outside a "foreverypart" loop, the
conversion applies equally to all body parts -- that is, all body conversion applies equally to all body parts -- that is, all body
parts that have the "quoted-from-mime-type" are converted, using the parts that have the "quoted-from-media-type" are converted, using the
same transcoding parameters. same transcoding parameters.
A single "convert" action will only apply once to any body part. If, A single "convert" action will only apply once to any body part. If,
for example, << convert "image/jpeg" "image/jpeg" ["pix-x=100","pix- for example, << convert "image/jpeg" "image/jpeg" ["pix-x=100","pix-
y=120"] >> converts a larger JPEG image to the smaller 100 x 120 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 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, part. The action will not see a "new" JPEG body part to process,
resulting from the conversion. resulting from the conversion.
If a "convert" action cannot be completed -- perhaps because the If a "convert" action cannot be completed -- perhaps because the
conversion failed, or because the requested conversion is not conversion failed, or because the requested conversion is not
available -- that "convert" action MUST terminate and leave the available -- that "convert" action MUST terminate and leave the
message unchanged, rolling back any other conversions done by that message unchanged, rolling back any other conversions done by that
action. The script processing continues, and prior or subsequent action. The script processing continues, and prior or subsequent
"convert" actions are not affected. No error condition is raised, "convert" actions are not affected. No error condition is raised,
and no partial conversions from a single "convert" action are and no partial conversions from a single "convert" action are
allowed. allowed.
Implementations might defer any actual conversion until the the Implementations might defer any actual conversion until the results
results of the conversion are needed for script processing, to avoid of the conversion are needed for script processing, to avoid doing
doing conversions unnecessarily. Consider the case wherein a conversions unnecessarily. Consider the case wherein a "convert"
"convert" action is processed, but a "discard" action results without action is processed but a "discard" action results without the need
the need to actually perform the conversion. to actually perform the conversion.
When conversions actually need to be done, they can put a significant When conversions actually need to be done, they can put a significant
load on the server. Computationally expensive conversions of a lot load on the server. Computationally expensive conversions of a lot
of body parts can constitute an attack vector, and even if done of body parts can constitute an attack vector; even if done
legitimately they can create an unacceptable load. Servers MAY legitimately, they can create an unacceptable load. Servers MAY
refuse conversions, or do them at lower priority, effectively slowing refuse conversions, or do them at lower priority, effectively slowing
the requesting process in order to avoid negative effects on service the requesting process in order to avoid negative effects on service
to other processes. to other processes.
2.1. Interaction with other tests and actions 2.1. Interaction with Other Tests and Actions
Whether the actual conversion has been done yet or not, a successful Whether or not the actual conversion has been done yet, a successful
"convert" action effectively changes the message, and all subsequent "convert" action effectively changes the message, and all subsequent
actions, including any other "convert" actions, apply to the changed actions, including any other "convert" actions, apply to the changed
message. The "convert" action does not affect the applicability of message. The "convert" action does not affect the applicability of
other actions; any action that was applicable before the "convert" is other actions; any action that was applicable before the "convert" is
equally applicable to the changed message afterward. equally applicable to the changed message afterward.
When a disposition-type action, such as "fileinto" or "redirect", is When a disposition-type action, such as "fileinto" or "redirect", is
encountered, the state of the message with respect to conversions is encountered, the state of the message with respect to conversions is
"locked in" for that disposition-type action. Whether the "locked in" for that disposition-type action. Whether the
implementation performs the action at that point or batches it for implementation performs the action at that point or batches it for
skipping to change at page 5, line 17 skipping to change at page 4, line 32
of Section 3.4 shows an example of this situation. of Section 3.4 shows an example of this situation.
Convert actions are cumulative, and each conversion operates on the Convert actions are cumulative, and each conversion operates on the
message as it stands after all prior conversions. See the fourth 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. 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 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 in effect, acts on the final state of the message, all conversions
are performed before any implicit keep. are performed before any implicit keep.
2.2. "convert" as a test 2.2. "convert" as a Test
To simplify testing for supported and successful conversions, the To simplify testing for supported and successful conversions, the
"convert" action can also be used as a test. As such, it will "convert" action can also be used as a test. As such, it will
attempt to perform the requested conversion(s), and will evaluate to attempt to perform the requested conversion(s) and will evaluate to
"false" if and only if at least one conversion failed. The failure "false" if and only if at least one conversion failed. The failure
can be because a conversion was unsupported, or because the data can be because a conversion was unsupported or because the data could
could not be converted (perhaps it had been corrupted in transit, or not be converted (perhaps it had been corrupted in transit or
mislabeled at its origin). mislabeled at its origin).
This creates a new type of Sieve action, a "testable action". The 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 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 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. Section 3.2 for an example of how this test can be used.
Note that defining this new testable action does not change the Note that defining this new testable action does not change the
definitions of any other actions -- it does not imply that other definitions of any other actions -- it does not imply that other
actions can be used as tests. Future extensions might define other actions can be used as tests. Future extensions might define other
skipping to change at page 7, line 11 skipping to change at page 6, line 17
} }
[... script continues ...] [... script continues ...]
3.4. Example 4 3.4. Example 4
The following example shows some tricky interactions between multiple The following example shows some tricky interactions between multiple
"convert" actions and other disposition-type actions. "convert" actions and other disposition-type actions.
require ["mime", "foreverypart", require ["mime", "foreverypart",
"fileinto", "redirect" "convert"]; "fileinto", "redirect", "convert"];
# The first "if" block will convert all image/tiff body parts # The first "if" block will convert all image/tiff body parts
# to 640x480 jpegs, and will file the message # to 640x480 jpegs and will file the message
# into the "INBOX.pics" mailbox as converted at this point. # into the "INBOX.pics" mailbox as converted at this point.
if header :mime :anychild :contenttype if header :mime :anychild :contenttype
"Content-Type" "image/tiff" "Content-Type" "image/tiff"
{ {
convert "image/tiff" "image/jpeg" ["pix-x=640","pix-y=480"]; convert "image/tiff" "image/jpeg" ["pix-x=640","pix-y=480"];
fileinto "INBOX.pics"; fileinto "INBOX.pics";
} }
# The second block, the "foreverypart" loop, will convert all # The second block, the "foreverypart" loop, will convert all
# inline jpegs to 320x240 resolution... including any tiff body # inline jpegs to 320x240 resolution... including any tiff body
skipping to change at page 8, line 23 skipping to change at page 7, line 28
# were done (that is, any from the second block). # were done (that is, any from the second block).
4. Security Considerations 4. Security Considerations
Security considerations given in IMAP CONVERT [RFC5259] and Sieve Security considerations given in IMAP CONVERT [RFC5259] and Sieve
[RFC5228] are relevant to this document. There are no additional [RFC5228] are relevant to this document. There are no additional
security considerations resulting from combining the two. security considerations resulting from combining the two.
5. IANA Considerations 5. IANA Considerations
IANA is requested to add the following registration to the Sieve IANA has added the following registration to the "Sieve Extensions"
Extensions registry, as defined in RFC 5228: registry, as defined in RFC 5228:
Capability name: convert Capability name: convert
Description: adds a new Sieve test and action that enable Sieve Description: adds a new Sieve test and action that enable Sieve
scripts to perform data conversions on the message being scripts to perform data conversions on the message being
delivered. delivered.
RFC number: this RFC RFC number: RFC 6558
Contact address: The Sieve discussion list <sieve@ietf.org> Contact address: The Sieve discussion list <sieve@ietf.org>
6. Acknowledgements 6. Acknowledgements
The authors also want to thank all who have contributed key insight The authors also want to thank all who have contributed key insight
and extensively reviewed and discussed the concepts of CONVERT. and extensively reviewed and discussed the concepts of CONVERT.
Qian Sun contributed text to this document.
7. Normative References 7. Normative References
[RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part Two: Media Types", RFC 2046,
November 1996.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC5228] Guenther, P. and T. Showalter, "Sieve: An Email Filtering [RFC5228] Guenther, P. and T. Showalter, "Sieve: An Email Filtering
Language", RFC 5228, January 2008. Language", RFC 5228, January 2008.
[RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", STD 68, RFC 5234, January 2008.
[RFC5259] Melnikov, A. and P. Coates, "Internet Message Access [RFC5259] Melnikov, A. and P. Coates, "Internet Message Access
Protocol - CONVERT Extension", RFC 5259, July 2008. Protocol - CONVERT Extension", RFC 5259, July 2008.
[RFC5703] Hansen, T. and C. Daboo, "Sieve Email Filtering: MIME Part [RFC5703] Hansen, T. and C. Daboo, "Sieve Email Filtering: MIME Part
Tests, Iteration, Extraction, Replacement, and Enclosure", Tests, Iteration, Extraction, Replacement, and Enclosure",
RFC 5703, October 2009. RFC 5703, October 2009.
Authors' Addresses Authors' Addresses
Alexey Melnikov Alexey Melnikov
Isode Limited Isode Limited
5 Castle Business Village 5 Castle Business Village
36 Station Road 36 Station Road
Hampton, Middlesex TW12 2BX Hampton, Middlesex TW12 2BX
UK UK
Email: Alexey.Melnikov@isode.com EMail: Alexey.Melnikov@isode.com
URI: http://www.melnikov.ca/ URI: http://www.melnikov.ca/
Qian Sun
Huawei Technologies
Bantian Longgang
Shenzhen, Guandong 518129
P.R China
Phone: +86 755 28780808
Email: sunqian@huawei.com
Barry Leiba Barry Leiba
Huawei Technologies Huawei Technologies
Phone: +1 646 827 0648 Phone: +1 646 827 0648
Email: barryleiba@computer.org EMail: barryleiba@computer.org
URI: http://internetmessagingtechnology.org/ URI: http://internetmessagingtechnology.org/
Kepeng Li Kepeng Li
Huawei Technologies Huawei Technologies
Huawei Base, Bantian, Longgang District Huawei Base, Bantian, Longgang District
Shenzhen, Guangdong 518129 Shenzhen, Guangdong 518129
P. R. China P. R. China
Phone: +86-755-28974289 Phone: +86-755-28974289
Email: likepeng@huawei.com EMail: likepeng@huawei.com
 End of changes. 34 change blocks. 
89 lines changed or deleted 70 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/