Sieve Working Group A. Melnikov
Internet-Draft Isode Limited
Intended status: Standards Track Q. Sun
Expires: January 26, 2012 B. Leiba
K. Li
Huawei Technologies
July 25, 2011
Sieve Extension for converting messages before delivery
draft-ietf-sieve-convert-02
Abstract
This document describes how IMAP CONVERT can be used within Sieve to
transform messages before final delivery.
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
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
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 26, 2012.
Copyright Notice
Copyright (c) 2011 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. Expires January 26, 2012 [Page 1]
Internet-Draft Sieve CONVERT July 2011
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Conventions Used in this Document . . . . . . . . . . . . . . 3
2. "convert" action . . . . . . . . . . . . . . . . . . . . . . 3
2.1. Interaction with other actions . . . . . . . . . . . . . . . 4
3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.1. Example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 4
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
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 8
Melnikov, et al. Expires January 26, 2012 [Page 2]
Internet-Draft Sieve CONVERT July 2011
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,
including the use of ABNF [RFC5234].
2. "convert" action
Usage: convert <quoted-from-mime-type: string>
<quoted-to-mime-type: string>
<transcoding-params: string-list>
The "convert" action specifies that body parts with "quoted-from-
mime-type" MIME type be converted to "quoted-to-mime-type" MIME type
using conversion parameters specified in "transcoding-params". Each
conversion parameter value has the following syntax: "<transcoding-
param>=<transcoding-param-value>", where <transcoding-param> and
<transcoding-param-value> are defined in CONVERT [RFC5259]. Messages
that don't have any body parts with the "quoted-from-mime-type" MIME
type are not affected by the conversion.
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-mime-type" are converted, using the
same transcoding parameters.
Implementations ought to defer any actual conversion until the final
resolution of other actions, to avoid doing conversions unnecessarily
Melnikov, et al. Expires January 26, 2012 [Page 3]
Internet-Draft Sieve CONVERT July 2011
in cases where the message is not retained (such as where the
resolution is "discard").
2.1. Interaction with other actions
Whether the actual conversion has been done yet or not, a "convert"
action effectively changes the message, and all subsequent 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.
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.
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, if it is in effect, acts on the final
state of the message, all conversions are performed before any
implicit keep.
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";
Melnikov, et al. Expires January 26, 2012 [Page 4]
Internet-Draft Sieve CONVERT July 2011
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. 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"
{
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 {
convert "image/tiff" "image/jpeg"
"pix-x" "320" "pix-y" "240";
}
}
}
[... script continues ...]
Melnikov, et al. Expires January 26, 2012 [Page 5]
Internet-Draft Sieve CONVERT July 2011
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";
}
# 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
Melnikov, et al. Expires January 26, 2012 [Page 6]
Internet-Draft Sieve CONVERT July 2011
"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 is requested to add the following registration to the Sieve
Extensions registry, as defined in RFC 5228:
Capability name: convert
Description: adds a new tag to the fileinto action that enables
Sieve script to perform a conversion on the message being
delivered.
RFC number: this RFC
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.
7. Normative References
[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.
[RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", STD 68, RFC 5234, January 2008.
Melnikov, et al. Expires January 26, 2012 [Page 7]
Internet-Draft Sieve CONVERT July 2011
[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/
Qian Sun
Huawei Technologies
Bantian Longgang
Shenzhen, Guandong 518129
P.R China
Phone: +86 755 28780808
Email: sunqian@huawei.com
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. Expires January 26, 2012 [Page 8]