Sieve Working Group A. Melnikov
Internet-Draft Isode Limited
Intended status: Standards Track Q. Sun
Expires: January 09, 2012 B. Leiba
K. Li
Huawei Technologies
July 08, 2011

Sieve Extension for converting messages before delivery
draft-ietf-sieve-convert-01

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 09, 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.


Table of Contents

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 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.

All conversions are performed before any disposition-type actions. Therefore, the sequence "convert, fileinto, convert" is the same as "convert, convert, fileinto": in both cases, all conversions are done before the message is filed.

Repeating for emphasis: note that disposition-type actions, such as "fileinto" and "redirect", will work on the converted message, filing or redirecting it after all conversions are done.

See Section 3.4 for an example of how this might be tricky.

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 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. 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.

    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 ...]

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 register the message to be filed
    # into the "INBOX.pics" mailbox.  But the rest of the script
    # will be  run before the "fileinto" is done.
    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 redirect the message to Joe 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 the message will never be redirected.
    if header :mime :anychild :contenttype
              "Content-Type" "image/tiff"
    {
      redirect "joe@example.com";
    }
    
    # Now, at the end of the script processing, after all
    # conversions, the message will be filed into "INBOX.pics"
    # if the first "if" block was taken, or will be implicitly
    # kept if not.

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. 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.
[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