draft-ietf-sieve-convert-02.txt   draft-ietf-sieve-convert-03.txt 
Sieve Working Group A. Melnikov Sieve Working Group A. Melnikov
Internet-Draft Isode Limited Internet-Draft Isode Limited
Intended status: Standards Track Q. Sun Intended status: Standards Track Q. Sun
Expires: January 26, 2012 B. Leiba Expires: March 22, 2012 B. Leiba
K. Li K. Li
Huawei Technologies Huawei Technologies
July 25, 2011 September 19, 2011
Sieve Extension for converting messages before delivery Sieve Extension for converting messages before delivery
draft-ietf-sieve-convert-02 draft-ietf-sieve-convert-03
Abstract Abstract
This document describes how IMAP CONVERT can be used within Sieve to This document describes how IMAP CONVERT can be used within Sieve to
transform messages before final delivery. transform messages before final delivery.
Status of this Memo Status of this Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
skipping to change at page 1, line 34 skipping to change at page 1, line 34
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 26, 2012. This Internet-Draft will expire on March 22, 2012.
Copyright Notice Copyright Notice
Copyright (c) 2011 IETF Trust and the persons identified as the Copyright (c) 2011 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
skipping to change at page 2, line 11 skipping to change at page 2, line 11
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 . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Conventions Used in this Document . . . . . . . . . . . . . . 3 1.1. Conventions Used in this Document . . . . . . . . . . . . . . 3
2. "convert" action . . . . . . . . . . . . . . . . . . . . . . 3 2. "convert" action . . . . . . . . . . . . . . . . . . . . . . 3
2.1. Interaction with other actions . . . . . . . . . . . . . . . 4 2.1. Interaction with other tests and actions . . . . . . . . . . 4
2.2. "convert" as a test . . . . . . . . . . . . . . . . . . . . . 4
3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.1. Example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1. Example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2. Example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2. Example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3. Example 3 . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.3. Example 3 . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.4. Example 4 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.4. Example 4 . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4. Security Considerations . . . . . . . . . . . . . . . . . . . 7 4. Security Considerations . . . . . . . . . . . . . . . . . . . 7
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 7 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 8
7. Normative References . . . . . . . . . . . . . . . . . . . . 7 7. Normative References . . . . . . . . . . . . . . . . . . . . 8
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 8 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 8
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.
skipping to change at page 3, line 50 skipping to change at page 3, line 50
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-mime-type" are converted, using the
same transcoding parameters. same transcoding parameters.
Implementations ought to defer any actual conversion until the final If a "convert" action cannot be completed -- perhaps because the
resolution of other actions, to avoid doing conversions unnecessarily conversion failed, or because the requested conversion is not
in cases where the message is not retained (such as where the available -- the message MUST remain unchanged, and the script
resolution is "discard"). processing continues. In particular, no error condition is raised,
and no partial conversions are allowed.
2.1. Interaction with other actions Implementations might defer any actual conversion until the 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.
Whether the actual conversion has been done yet or not, a "convert" 2.1. Interaction with other tests and actions
action effectively changes the message, and all subsequent actions,
including any other "convert" actions, apply to the changed message. Whether the actual conversion has been done yet or not, a successful
The "convert" action does not affect the applicability of other "convert" action effectively changes the message, and all subsequent
actions; any action that was applicable before the "convert" is actions, including any other "convert" actions, apply to the changed
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. 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
later, it MUST perform the action on the message as it stood at the later, it MUST perform the action on the message as it stood at the
time, and MUST NOT include subsequent conversions encountered later time, and MUST NOT include subsequent conversions encountered later
in the script processing. Therefore, the sequence "convert, in the script processing. Therefore, the sequence "convert,
fileinto, convert, fileinto" will store two different versions of the fileinto, convert, fileinto" will store two different versions of the
message: the first "fileinto" uses only the first conversion, while 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 the second uses both. See Section 3.4 for an example of how this can
be used. 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 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, if it is in effect, acts on the final Because the implicit keep, if it is in effect, acts on the final
state of the message, all conversions are performed before any state of the message, all conversions are performed before any
implicit keep. 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
mislabelled at its origin).
This creates a new time 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.
3. Examples 3. Examples
3.1. Example 1 3.1. Example 1
In the following example, all "image/tiff" body parts of the message In the following example, all "image/tiff" body parts of the message
are converted to "image/jpeg" with image resolution of 320x240 are converted to "image/jpeg" with image resolution of 320x240
pixels. The converted message is then subject to the implicit keep. pixels. The converted message is then subject to the implicit keep.
require ["convert"]; require ["convert"];
convert "image/tiff" "image/jpeg" "pix-x" "320" "pix-y" "240"; convert "image/tiff" "image/jpeg" "pix-x" "320" "pix-y" "240";
3.2. Example 2 3.2. Example 2
In the following example, all "image/tiff" body parts of the message In the following example, all "image/tiff" body parts of the message
are converted to "image/jpeg", as in Example 1. Those messages are are converted to "image/jpeg", as in Example 1. If the conversions
then filed into a mailbox called "INBOX.pics". Other messages (those were successful, those messages are then filed into a mailbox called
with no image/tiff body parts) are subject to the implicit keep, and "INBOX.pics". Other messages (those with no image/tiff body parts)
have not been converted. are subject to the implicit keep, and have not been converted.
require ["mime", "fileinto", "convert"]; require ["mime", "fileinto", "convert"];
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" "320" "pix-y" "240"; if (convert "image/tiff" "image/jpeg"
fileinto "INBOX.pics"; "pix-x" "320" "pix-y" "240") {
fileinto "INBOX.pics";
}
} }
3.3. Example 3 3.3. Example 3
In the following example, only "image/tiff" body parts with a In the following example, only "image/tiff" body parts with a
Content-Disposition of "inline" are converted. Matching parts that Content-Disposition of "inline" are converted. Matching parts that
are larger than 500 kilobytes are converted using an image resolution are larger than 500 kilobytes are converted using an image resolution
of 640x480 pixels, and those smaller are converted to 320x240 pixels. of 640x480 pixels, and those smaller are converted to 320x240 pixels.
The message disposition is not changed, so the implicit keep will be The message disposition is not changed, so the implicit keep will be
in effect unless something else in the script changes that. in effect unless something else in the script changes that.
 End of changes. 17 change blocks. 
27 lines changed or deleted 62 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/