draft-ietf-sieve-mime-loop-02.txt | draft-ietf-sieve-mime-loop-03.txt | |||
---|---|---|---|---|
Internet Engineering Task Force T. Hansen | Internet Engineering Task Force T. Hansen | |||
Internet-Draft AT&T Laboratories | Internet-Draft AT&T Laboratories | |||
Intended status: Standards Track C. Daboo | Intended status: Standards Track C. Daboo | |||
Expires: September 19, 2007 Apple Computer | Expires: January 9, 2008 Apple Computer | |||
March 18, 2007 | July 8, 2007 | |||
SIEVE Email Filtering: MIME part Tests, Iteration, Replacement and | Sieve Email Filtering: MIME part Tests, Iteration, Extraction, | |||
Enclosure | Replacement and Enclosure | |||
draft-ietf-sieve-mime-loop-02.txt | draft-ietf-sieve-mime-loop-03 | |||
Status of this Memo | Status of this Memo | |||
By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
skipping to change at page 1, line 36 | skipping to change at page 1, line 36 | |||
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." | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
This Internet-Draft will expire on September 19, 2007. | This Internet-Draft will expire on January 9, 2008. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The IETF Trust (2007). | Copyright (C) The IETF Trust (2007). | |||
Abstract | Abstract | |||
The SIEVE email filtering language has no way to examine individual | The Sieve email filtering language has no way to examine individual | |||
MIME parts or any way to manipulate those individual parts. However, | MIME parts or any way to manipulate those individual parts. However, | |||
being able to filter based on MIME content is important. This | being able to filter based on MIME content is important. This | |||
document defines extensions for these needs. | document defines extensions for these needs. | |||
Note | Note | |||
This document is being discussed on the MTA-FILTERS mailing list, | This document is being discussed on the MTA-FILTERS mailing list, | |||
ietf-mta-filters@imc.org. | ietf-mta-filters@imc.org. | |||
Table of Contents | ||||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | ||||
2. Conventions Used in This Document . . . . . . . . . . . . . . 3 | ||||
3. Sieve Loops . . . . . . . . . . . . . . . . . . . . . . . . . 3 | ||||
4. Changes to Sieve tests . . . . . . . . . . . . . . . . . . . . 4 | ||||
4.1. Test "header" . . . . . . . . . . . . . . . . . . . . . . 4 | ||||
4.2. Test "address" . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
4.3. Test "exists" . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
5. Action Replace . . . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
6. Action Enclose . . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
7. Action extract_text . . . . . . . . . . . . . . . . . . . . . 9 | ||||
8. Sieve Capability Strings . . . . . . . . . . . . . . . . . . . 9 | ||||
9. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
9.1. Example 1 . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
9.2. Example 2 . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
9.3. Example 3 . . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
11. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | ||||
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | ||||
13. Change History (to be removed prior to publication as an | ||||
RFC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
13.1. draft-ietf-sieve-mime-02 . . . . . . . . . . . . . . . . . 14 | ||||
13.2. draft-ietf-sieve-mime-01 . . . . . . . . . . . . . . . . . 14 | ||||
13.3. draft-ietf-sieve-mime-00 . . . . . . . . . . . . . . . . . 14 | ||||
13.4. draft-hansen-sieve-loop-01 . . . . . . . . . . . . . . . . 14 | ||||
13.5. draft-hansen-sieve-loop-02 . . . . . . . . . . . . . . . . 14 | ||||
13.6. draft-hansen-sieve-loop-03 . . . . . . . . . . . . . . . . 15 | ||||
14. References . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
14.1. Normative References . . . . . . . . . . . . . . . . . . . 15 | ||||
14.2. Informative References . . . . . . . . . . . . . . . . . . 16 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 16 | ||||
Intellectual Property and Copyright Statements . . . . . . . . . . 17 | ||||
1. Introduction | 1. Introduction | |||
SIEVE scripts are used to make decisions about the disposition of an | Sieve scripts are used to make decisions about the disposition of an | |||
email message. The base SIEVE specification, | email message. The base Sieve specification, | |||
[I-D.ietf-sieve-3028bis], defines operators for looking at the | [I-D.ietf-sieve-3028bis], defines operators for looking at the | |||
message headers, such as addresses and the subject. Other extensions | message headers, such as addresses and the subject. Other extensions | |||
provide access to the body of the message ([I-D.ietf-sieve-body]), or | provide access to the body of the message ([I-D.ietf-sieve-body]), or | |||
allow you to manipulate the header of the message | allow you to manipulate the header of the message | |||
([I-D.ietf-sieve-editheader]). But none of these extensions take | ([I-D.ietf-sieve-editheader]). But none of these extensions take | |||
into account that MIME messages ([RFC2045]) are often complex | into account that MIME messages ([RFC2045]) are often complex | |||
objects, consisting of many parts and sub-parts. This extension | objects, consisting of many parts and sub-parts. This extension | |||
defines mechanisms for performing tests on MIME body parts, looping | defines mechanisms for performing tests on MIME body parts, looping | |||
through the MIME body parts, changing the contents of a MIME body | through the MIME body parts, extracting information from a MIME body | |||
part, and enclosing the message with a wrapper. | part, changing the contents of a MIME body part, and enclosing the | |||
entire message with a wrapper. | ||||
2. Conventions Used in This Document | 2. Conventions Used in This Document | |||
Conventions for notations are as in [I-D.ietf-sieve-3028bis] section | Conventions for notations are as in [I-D.ietf-sieve-3028bis] section | |||
1.1. | 1.1. | |||
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 [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
3. SIEVE Loops | 3. Sieve Loops | |||
The base SIEVE language has no looping mechanism. Given that | The base Sieve language has no looping mechanism. Given that | |||
messages may contain multiple parts, in order to support filters that | messages may contain multiple parts, in order to support filters that | |||
apply to any and all parts, we introduce a new control command: | apply to any and all parts, we introduce a new control command: | |||
"for_every_part", which is an iterator that walks though every MIME | "for_every_part", which is an iterator that walks though every MIME | |||
part of a message, including nested parts, and applies the commands | part of a message, including nested parts, and applies the commands | |||
in the specified block to each of them. The iterator will start with | in the specified block to each of them. The iterator will start with | |||
the first MIME part (as its current context) and will execute a | the first MIME part (as its current context) and will execute a | |||
command block (SIEVE commands enclosed by { ...}). Upon completion | command block (Sieve commands enclosed by { ...}). Upon completion | |||
of this command block, the iterator advances to the next MIME part | of this command block, the iterator advances to the next MIME part | |||
(as its current context) and executes the same command block again. | (as its current context) and executes the same command block again. | |||
The iterator can be terminated prematurely by a new SIEVE command, | The iterator can be terminated prematurely by a new Sieve command, | |||
"break". | "break". | |||
Usage: for_every_part block | Usage: for_every_part block | |||
Usage: break; | Usage: break; | |||
"for_every_part" commands can be nested inside other "for_every_part" | "for_every_part" commands can be nested inside other "for_every_part" | |||
commands. When this occurs, the nested "for_every_part" iterates | commands. When this occurs, the nested "for_every_part" iterates | |||
over the MIME parts contained within the MIME part current being | over the MIME parts contained within the MIME part current being | |||
targeted by the nearest enclosing "for_every_part" command. If that | targeted by the nearest enclosing "for_every_part" command. If that | |||
MIME part is a terminal MIME part (i.e. does not contain other MIME | MIME part is a terminal MIME part (i.e. does not contain other MIME | |||
parts) then the nested "for_every_loop" is simply ignored. | parts) then the nested "for_every_loop" is simply ignored. | |||
SIEVE implementations MAY limit the number of nested loops that occur | Sieve implementations MAY limit the number of nested loops that occur | |||
within one another, however they MUST support at least one nested | within one another, however they MUST support at least one nested | |||
loop inside another loop. | loop inside another loop. | |||
4. Changes to SIEVE tests | 4. Changes to Sieve tests | |||
This specification extends the base SIEVE "header", "address" and | This specification extends the base Sieve "header", "address" and | |||
"exists" tests to support targeting those tests at a specific MIME | "exists" tests to support targeting those tests at a specific MIME | |||
part or at all MIME parts in the enclosing scope. | part or at all MIME parts in the enclosing scope. | |||
4.1. Test "header" | 4.1. Test "header" | |||
The "header" test is extended with the addition of a new ":mime" | The "header" test is extended with the addition of a new ":mime" | |||
tagged argument, which takes a number of other arguments. | tagged argument, which takes a number of other arguments. | |||
Usage: header [:mime] [:anychild] [MIMEOPTS] | Usage: header [:mime] [:anychild] [MIMEOPTS] | |||
[COMPARATOR] [MATCH-TYPE] | [COMPARATOR] [MATCH-TYPE] | |||
skipping to change at page 7, line 41 | skipping to change at page 8, line 40 | |||
Implementations MAY also impose restrictions on what addresses can be | Implementations MAY also impose restrictions on what addresses can be | |||
specified in a ":from" parameter; it is suggested that values that | specified in a ":from" parameter; it is suggested that values that | |||
fail such a validity check simply be ignored rather than causing the | fail such a validity check simply be ignored rather than causing the | |||
replace action to fail. Implementations MUST preserve the previous | replace action to fail. Implementations MUST preserve the previous | |||
From header as an Original-From header. | From header as an Original-From header. | |||
6. Action Enclose | 6. Action Enclose | |||
Usage: enclose <:subject string> <:headers string-list> string | Usage: enclose <:subject string> <:headers string-list> string | |||
A new SIEVE action command is defined to allow an entire message to | A new Sieve action command is defined to allow an entire message to | |||
be enclosed as an attachment to a new message. NB: The following | be enclosed as an attachment to a new message. After enclosure, | |||
statement may be controversial: This enclose action takes precedence | subsequent actions affecting the message header or content use the | |||
over all other message modifications, such as "replace". If multiple | newly create message instead of the original message; this means that | |||
"enclose" actions are executed by a script, only the text specified | any use of a "replace" action or other similar actions should be | |||
on the last one is used when creating the enclosed message. This | executed before the "enclose" action. | |||
action does not affect messages that are forwarded via a "redirect" | ||||
action. | If multiple "enclose" actions are executed by a script, only the text | |||
specified on the last one is used when creating the enclosed message. | ||||
This action does not affect messages that are forwarded via a | ||||
"redirect" action. | ||||
Specifically, the original message becomes a multipart/mixed message | Specifically, the original message becomes a multipart/mixed message | |||
with two parts: a text/plain portion with the string argument as its | with two parts: a text/plain portion with the string argument as its | |||
body, and a message/rfc822 portion with the original message | body, and a message/rfc822 portion with the original message | |||
enclosed. The Content-Type: header field becomes multipart/mixed. | enclosed. The Content-Type: header field becomes multipart/mixed. | |||
The Subject: header is specified by the :subject argument. Any | The Subject: header is specified by the :subject argument. Any | |||
headers specified by :headers are copied from the old message into | headers specified by :headers are copied from the old message into | |||
the new message. NB: The following statement may be controversial: | the new message. If not specified by :headers, Date: and From: | |||
If not specified by :headers, Date: and From: headers should be | headers should be synthesized to reflect the current date and the | |||
synthesized to reflect the current date and the user running the | user running the Sieve action. | |||
SIEVE action. | ||||
7. SIEVE Capability Strings | 7. Action extract_text | |||
A SIEVE implementation that defines the "for_every_part" and "break" | Usage: extract_text [MODIFIER] [":first" number] <varname: string> | |||
The extract_text action may be used within the context of a | ||||
"for_every_part" loop. It stores at most :first bytes of the current | ||||
MIME body part in the variable identified by varname. If the :first | ||||
parameter is not present, the whole content of the current MIME body | ||||
part is stored. In either case the actually stored data MAY be | ||||
truncated to conform to implementation specific limit on variable | ||||
length and/or on MIME body part length. QUESTION: What do we do if | ||||
the Content-Transfer-Encoding is anything other than 7bit? | ||||
If extract_text is used outside the context of a "for_every_part" | ||||
loop, the action will set the variable identified by varname to the | ||||
empty string. | ||||
Modifiers are applied on the extracted text before it is stored in | ||||
the variable. See [I-D.ietf-sieve-variables] for details. | ||||
8. Sieve Capability Strings | ||||
A Sieve implementation that defines the "for_every_part" and "break" | ||||
actions will advertise the capability string "for_every_part". | actions will advertise the capability string "for_every_part". | |||
A SIEVE implementation that defines the ":mime" tagged arguments to | A Sieve implementation that defines the ":mime" tagged arguments to | |||
the "header", "address" and "exists" commands will advertise the | the "header", "address" and "exists" commands will advertise the | |||
capability string "mime". | capability string "mime". | |||
A SIEVE implementation that defines the "replace" action will | A Sieve implementation that defines the "replace" action will | |||
advertise the capability string "replace". | advertise the capability string "replace". | |||
A SIEVE implementation that defines the "enclose" action will | A Sieve implementation that defines the "enclose" action will | |||
advertise the capability string "enclose". | advertise the capability string "enclose". | |||
8. Examples | A Sieve implementation that defines the "extract_text" action will | |||
advertise the capability string "extract_text". Note that to be | ||||
useful, the "extract_text" action also requires the "variables" | ||||
[I-D.ietf-sieve-variables] and "mime" capabilities. | ||||
8.1. Example 1 | 9. Examples | |||
A SIEVE script to replace all the Windows executable attachments in a | 9.1. Example 1 | |||
A Sieve script to replace all the Windows executable attachments in a | ||||
message would be: | message would be: | |||
require [ "for_every_part", "mime", "replace" ]; | require [ "for_every_part", "mime", "replace" ]; | |||
for_every_part | for_every_part | |||
{ | { | |||
if ( anyof ( | if ( anyof ( | |||
header :mime :contenttype :is "Content-Type" "application/exe", | header :mime :contenttype :is "Content-Type" "application/exe", | |||
header :mime :param "filename" | header :mime :param "filename" | |||
["Content-Type", "Content-Disposition"] :matches "*.com" ) | ["Content-Type", "Content-Disposition"] :matches "*.com" ) | |||
{ | { | |||
replace "Executable attachment removed by user filter"; | replace "Executable attachment removed by user filter"; | |||
} | } | |||
} | } | |||
8.2. Example 2 | 9.2. Example 2 | |||
A SIEVE script to warn the user about executable attachment types | A Sieve script to warn the user about executable attachment types | |||
would be: | would be: | |||
require [ "for_every_part", "mime", "enclose" ]; | require [ "for_every_part", "mime", "enclose" ]; | |||
for_every_part | for_every_part | |||
{ | { | |||
if header :mime :param "filename" | if header :mime :param "filename" | |||
["Content-Type", "Content-Disposition"] :matches | ["Content-Type", "Content-Disposition"] :matches | |||
["*.com", "*.exe", "*.vbs", "*.scr", | ["*.com", "*.exe", "*.vbs", "*.scr", | |||
"*.pif", "*.hta", "*.bat", "*.zip" ] | "*.pif", "*.hta", "*.bat", "*.zip" ] | |||
skipping to change at page 9, line 33 | skipping to change at page 11, line 28 | |||
that can infect your computer and potentently damage your data | that can infect your computer and potentently damage your data | |||
Before clicking on these message attachments, you should verify | Before clicking on these message attachments, you should verify | |||
with the sender that this message was sent by them and not a | with the sender that this message was sent by them and not a | |||
computer virus. | computer virus. | |||
"; | "; | |||
break; | break; | |||
} | } | |||
} | } | |||
9. Acknowledgements | 9.3. Example 3 | |||
A Sieve script to extract subject and text out of messages from the | ||||
boss | ||||
require ["mime", "variables", "extract_text"]; | ||||
if header :contains "from" "boss@example.org" | ||||
{ | ||||
# :matches is used to get the value of the Subject header | ||||
if header :matches "Subject" "*" | ||||
{ | ||||
set "subject" "${1}"; | ||||
} | ||||
# extract the first 100 bytes of the first text/* part | ||||
for_every_part | ||||
{ | ||||
if header :mime :type :is "Content-Type" "text" | ||||
{ | ||||
extract_text :first 100 "msgcontent"; | ||||
break; | ||||
} | ||||
} | ||||
# if it's not a 'for your information' message | ||||
if not header :contains "subject" "FYI:" | ||||
{ | ||||
# do something using ${subject} and ${msgcontent} | ||||
# such as sending a notification using a notification extion | ||||
} | ||||
} | ||||
10. Acknowledgements | ||||
Comments from members of the MTA Filters Working Group, in particular | Comments from members of the MTA Filters Working Group, in particular | |||
Ned Freed, Nigel Swinson and Mark Mallett, are gratefully | Ned Freed, Nigel Swinson, Mark Mallett and Alexey Melnikov, are | |||
acknowledged. | gratefully acknowledged. | |||
10. Security Considerations | 11. Security Considerations | |||
To be provided | The "enclose" action creates an entirely new message, as compared to | |||
just redirecting or forwarding the existing message. Therefore, any | ||||
site policies applicable to message submission should be enforced | ||||
here. | ||||
11. IANA Considerations | The looping specification specified here provides easier access to | |||
information about the message contents, which may also be achieved | ||||
through other sieve tests. This is not believed to raise any | ||||
additional security issues beyond those for the Sieve "envelope" and | ||||
"body" tests. | ||||
The system MUST be sized and restricted in such a manner that even | ||||
malicious use of mime part matching does not deny service to other | ||||
users of the host system. | ||||
Any change in a message content may interfere with digital signature | ||||
mechanisms that include the body in the signed material. | ||||
All of the security considerations given in the base Sieve | ||||
specification also apply to these extensions. | ||||
12. IANA Considerations | ||||
The Original-Subject: and Original-From: headers are to be registered | The Original-Subject: and Original-From: headers are to be registered | |||
in the Permanent Message Header Fields table. | in the Permanent Message Header Fields table. | |||
12. Change History (to be removed prior to publication as an RFC) | The following template specifies the IANA registration of the Sieve | |||
extensions specified in this document: | ||||
12.1. draft-ietf-sieve-mime-02 | To: iana@iana.org Subject: Registration of new Sieve extensions | |||
Capability name: for_every_part | ||||
Description: adds the "for_every_part" and "break" actions for | ||||
iterating through MIME parts of a message. | ||||
Capability name: mime | ||||
Description: adds ":mime" tagged arguments to the "header", "address" | ||||
and "exists" commands. | ||||
Capability name: replace | ||||
Description: adds the "replace" action for replacing a MIME body part | ||||
of a message. | ||||
Capability name: enclose | ||||
Description: adds the "enclose" action for enclosing a message with a | ||||
wrapper. | ||||
Capability name: extract_text | ||||
Description: adds the "extract_text" action for extracting text from | ||||
a MIME body part. | ||||
RFC number: RFC XXXX | ||||
Contact address: The Sieve discussion list | ||||
<ietf-mta-filters@imc.org>. | ||||
This information should be added to the list of sieve extensions | ||||
given on http://www.iana.org/assignments/sieve-extensions. | ||||
13. Change History (to be removed prior to publication as an RFC) | ||||
13.1. draft-ietf-sieve-mime-02 | ||||
minor syntax glitches in examples | minor syntax glitches in examples | |||
Add clarification on "replace" affecting subsequent for_every_part | Add clarification on "replace" affecting subsequent for_every_part | |||
loops? | loops? | |||
Add IANA considerations for Original-Subject: and Original-From:. | Add IANA considerations for Original-Subject: and Original-From:. | |||
Add note on "enclose" creating From: and Date: headers. | Add note on "enclose" creating From: and Date: headers. | |||
12.2. draft-ietf-sieve-mime-01 | 13.2. draft-ietf-sieve-mime-01 | |||
what happens when nested for_every_loop's | what happens when nested for_every_loop's | |||
a "mime" shorthand for testing the type/subtype, without requiring | a "mime" shorthand for testing the type/subtype, without requiring | |||
interactions with variables | interactions with variables | |||
notifications | notifications | |||
notifications to calendar service | notifications to calendar service | |||
address tests, exists tests | address tests, exists tests | |||
mimeheader, mimeparameter tests | mimeheader, mimeparameter tests | |||
12.3. draft-ietf-sieve-mime-00 | 13.3. draft-ietf-sieve-mime-00 | |||
Changed title and text to emphasize MIME Tests. | Changed title and text to emphasize MIME Tests. | |||
Changed for.every.part to for_every_part. | Changed for.every.part to for_every_part. | |||
Added :anychild to mime test. Default is to use the current context | Added :anychild to mime test. Default is to use the current context | |||
or outer envelope; specifying :anychild will look at all children. | or outer envelope; specifying :anychild will look at all children. | |||
Added clarifications to replacing parts affecting the structure. | Added clarifications to replacing parts affecting the structure. | |||
Added :mime option to replace, ala draft-ietf-sieve-vacation-06. | Added :mime option to replace, ala draft-ietf-sieve-vacation-06. | |||
Various other minor nit fixes. | Various other minor nit fixes. | |||
12.4. draft-hansen-sieve-loop-01 | 13.4. draft-hansen-sieve-loop-01 | |||
Merged with draft-daboo-sieve-mime-00.txt. | Merged with draft-daboo-sieve-mime-00.txt. | |||
12.5. draft-hansen-sieve-loop-02 | 13.5. draft-hansen-sieve-loop-02 | |||
Update to 3028bis reference. | Update to 3028bis reference. | |||
Added 2119 conventions section. | Added 2119 conventions section. | |||
Terminology/title tweaks. | Terminology/title tweaks. | |||
Added informative references to body and editheader extensions. | Added informative references to body and editheader extensions. | |||
Added description of nested loops. | Added description of nested loops. | |||
Replaced mime test by extensions to header, address and exists | Replaced mime test by extensions to header, address and exists | |||
tests. | tests. | |||
13. References | 13.6. draft-hansen-sieve-loop-03 | |||
13.1. Normative References | after enclosure, subsequent actions affect newly created message | |||
synthesis of Date/From headers by the enclose action is no longer | ||||
controversial | ||||
Filled in Security Considerations | ||||
Picked up extract_text action from draft-ietf-sieve-notify | ||||
Expanded the IANA considerations section | ||||
14. References | ||||
14.1. Normative References | ||||
[I-D.ietf-sieve-3028bis] | [I-D.ietf-sieve-3028bis] | |||
Showalter, T. and P. Guenther, "Sieve: An Email Filtering | Showalter, T. and P. Guenther, "Sieve: An Email Filtering | |||
Language", draft-ietf-sieve-3028bis-12 (work in progress), | Language", draft-ietf-sieve-3028bis-12 (work in progress), | |||
February 2007. | February 2007. | |||
[RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | |||
Extensions (MIME) Part One: Format of Internet Message | Extensions (MIME) Part One: Format of Internet Message | |||
Bodies", RFC 2045, November 1996. | Bodies", RFC 2045, November 1996. | |||
[RFC2047] Moore, K., "MIME (Multipurpose Internet Mail Extensions) | [RFC2047] Moore, K., "MIME (Multipurpose Internet Mail Extensions) | |||
Part Three: Message Header Extensions for Non-ASCII Text", | Part Three: Message Header Extensions for Non-ASCII Text", | |||
RFC 2047, November 1996. | RFC 2047, 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. | |||
[RFC2822] Resnick, P., "Internet Message Format", RFC 2822, | [RFC2822] Resnick, P., "Internet Message Format", RFC 2822, | |||
April 2001. | April 2001. | |||
13.2. Informative References | 14.2. Informative References | |||
[I-D.ietf-sieve-body] | [I-D.ietf-sieve-body] | |||
Guenther, P. and J. Degener, "Sieve Email Filtering: Body | Guenther, P. and J. Degener, "Sieve Email Filtering: Body | |||
Extension", draft-ietf-sieve-body-06 (work in progress), | Extension", draft-ietf-sieve-body-06 (work in progress), | |||
February 2007. | February 2007. | |||
[I-D.ietf-sieve-editheader] | [I-D.ietf-sieve-editheader] | |||
Guenther, P. and J. Degener, "Sieve Email Filtering: | Guenther, P. and J. Degener, "Sieve Email Filtering: | |||
Editheader Extension", draft-ietf-sieve-editheader-08 | Editheader Extension", draft-ietf-sieve-editheader-08 | |||
(work in progress), March 2007. | (work in progress), March 2007. | |||
[I-D.ietf-sieve-variables] | ||||
Homme, K., "Sieve Extension: Variables", | ||||
draft-ietf-sieve-variables-08 (work in progress), | ||||
December 2005. | ||||
Authors' Addresses | Authors' Addresses | |||
Tony Hansen | Tony Hansen | |||
AT&T Laboratories | AT&T Laboratories | |||
200 Laurel Ave. | 200 Laurel Ave. | |||
Middletown, NJ 07748 | Middletown, NJ 07748 | |||
USA | USA | |||
Email: tony+sieveloop@maillennium.att.com | Email: tony+sieveloop@maillennium.att.com | |||
End of changes. 42 change blocks. | ||||
56 lines changed or deleted | 213 lines changed or added | |||
This html diff was produced by rfcdiff 1.33. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |