diff --git a/doc/rfc b/doc/rfc
deleted file mode 100644
index 215cb8e71036767b7500f28a1e5bcd7d51ea4c2d..0000000000000000000000000000000000000000
--- a/doc/rfc
+++ /dev/null
@@ -1,2522 +0,0 @@
-
-
-
-
-
-Network Working Group                                        P. Guenther
-Internet-Draft                                            Sendmail, Inc.
-Intended status: Standards Track                            T. Showalter
-Expires: April 2008                                              Editors
-Obsoletes: 3028 (if approved)                               October 2007
-
-
-                   Sieve: An Email Filtering Language
-                    draft-ietf-sieve-3028bis-13.txt
-
-Status of this Memo
-
-   By submitting this Internet-Draft, each author represents that any
-   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
-   aware will be disclosed, in accordance with Section 6 of BCP 79.
-
-   Internet-Drafts are working documents of the Internet Engineering
-   Task Force (IETF), its areas, and its working groups.  Note that
-   other groups may also distribute working documents as Internet-
-   Drafts.
-
-   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."
-
-   The list of current Internet-Drafts can be accessed at
-   http://www.ietf.org/ietf/1id-abstracts.txt
-
-   The list of Internet-Draft Shadow Directories can be accessed at
-   http://www.ietf.org/shadow.html.
-
-   A revised version of this draft document will be submitted to the RFC
-   editor as a Standard Track RFC for the Internet Community.
-   Discussion and suggestions for improvement are requested, and should
-   be sent to ietf-mta-filters@imc.org.  Distribution of this memo is
-   unlimited.
-
-Copyright Notice
-
-   Copyright (C) The IETF Trust (2007).
-
-Abstract
-
-   This document describes a language for filtering email messages at
-   time of final delivery.  It is designed to be implementable on either
-   a mail client or mail server.  It is meant to be extensible, simple,
-
-
-
-Guenther & Showalter         Standards Track                    [Page 1]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   and independent of access protocol, mail architecture, and operating
-   system.  It is suitable for running on a mail server where users may
-   not be allowed to execute arbitrary programs, such as on black box
-   Internet Message Access Protocol (IMAP) servers, as the base language
-   has no variables, loops, or ability to shell out to external
-   programs.
-
-Table of Contents
-
-   1.      Introduction ...........................................   3
-   1.1.     Conventions Used in This Document .....................   4
-   1.2.     Example mail messages .................................   5
-   2.      Design .................................................   6
-   2.1.     Form of the Language ..................................   6
-   2.2.     Whitespace ............................................   6
-   2.3.     Comments ..............................................   6
-   2.4.     Literal Data ..........................................   7
-   2.4.1.   Numbers ...............................................   7
-   2.4.2.   Strings ...............................................   7
-   2.4.2.1. String Lists ..........................................   8
-   2.4.2.2. Headers ...............................................   9
-   2.4.2.3. Addresses .............................................   9
-   2.4.2.4. Encoding characters using "encoded-character" .........  10
-   2.5.     Tests .................................................  11
-   2.5.1.   Test Lists ............................................  11
-   2.6.     Arguments .............................................  11
-   2.6.1.   Positional Arguments ..................................  11
-   2.6.2.   Tagged Arguments ......................................  12
-   2.6.3.   Optional Arguments ....................................  12
-   2.6.4.   Types of Arguments ....................................  12
-   2.7.     String Comparison .....................................  13
-   2.7.1.   Match Type ............................................  13
-   2.7.2.   Comparisons Across Character Sets .....................  14
-   2.7.3.   Comparators ...........................................  15
-   2.7.4.   Comparisons Against Addresses .........................  16
-   2.8.     Blocks ................................................  16
-   2.9.     Commands ..............................................  16
-   2.10.    Evaluation ............................................  17
-   2.10.1.  Action Interaction ....................................  17
-   2.10.2.  Implicit Keep .........................................  17
-   2.10.3.  Message Uniqueness in a Mailbox .......................  18
-   2.10.4.  Limits on Numbers of Actions ..........................  18
-   2.10.5.  Extensions and Optional Features ......................  18
-   2.10.6.  Errors ................................................  19
-   2.10.7.  Limits on Execution ...................................  19
-   3.      Control Commands .......................................  20
-   3.1.     Control if ............................................  20
-   3.2.     Control require .......................................  21
-
-
-
-Guenther & Showalter         Standards Track                    [Page 2]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   3.3.     Control stop ..........................................  21
-   4.      Action Commands ........................................  21
-   4.1.     Action fileinto .......................................  22
-   4.2.     Action redirect .......................................  22
-   4.3.     Action keep ...........................................  23
-   4.4.     Action discard ........................................  24
-   5.      Test Commands ..........................................  24
-   5.1.     Test address ..........................................  25
-   5.2.     Test allof ............................................  25
-   5.3.     Test anyof ............................................  26
-   5.4.     Test envelope .........................................  26
-   5.5.     Test exists ...........................................  27
-   5.6.     Test false ............................................  27
-   5.7.     Test header ...........................................  27
-   5.8.     Test not ..............................................  28
-   5.9.     Test size .............................................  28
-   5.10.    Test true .............................................  29
-   6.      Extensibility ..........................................  29
-   6.1.     Capability String .....................................  29
-   6.2.     IANA Considerations ...................................  30
-   6.2.1.   Template for Capability Registrations .................  30
-   6.2.2.   Handling of Existing Capability Registrations .........  31
-   6.2.3.   Initial Capability Registrations ......................  31
-   6.3.     Capability Transport ..................................  32
-   7.      Transmission ...........................................  32
-   8.      Parsing ................................................  32
-   8.1.     Lexical Tokens ........................................  33
-   8.2.     Grammar ...............................................  35
-   9.      Extended Example .......................................  35
-   10.     Security Considerations ................................  36
-   11.     Acknowledgments ........................................  38
-   12.     Editors' Addresses .....................................  38
-   13.     Normative References ...................................  38
-   14.     Informative References .................................  39
-   15.     Changes from RFC 3028 ..................................  39
-   16.     Full Copyright Statement ...............................  40
-
-1.      Introduction
-
-   This memo documents a language that can be used to create filters for
-   electronic mail.  It is not tied to any particular operating system
-   or mail architecture.  It requires the use of [IMAIL]-compliant
-   messages, but should otherwise generalize to many systems.
-
-   The language is powerful enough to be useful but limited in order to
-   allow for a safe server-side filtering system.  The intention is to
-   make it impossible for users to do anything more complex (and
-   dangerous) than write simple mail filters, along with facilitating
-
-
-
-Guenther & Showalter         Standards Track                    [Page 3]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   the use of GUIs for filter creation and manipulation.  The base
-   language was not designed to be Turing-complete: it does not have a
-   loop control structure or functions.
-
-   Scripts written in Sieve are executed during final delivery, when the
-   message is moved to the user-accessible mailbox.  In systems where
-   the Mail Transfer Agent (MTA) does final delivery, such as
-   traditional Unix mail, it is reasonable to filter when the MTA
-   deposits mail into the user's mailbox.
-
-   There are a number of reasons to use a filtering system.  Mail
-   traffic for most users has been increasing due to increased usage of
-   email, the emergence of unsolicited email as a form of advertising,
-   and increased usage of mailing lists.
-
-   Experience at Carnegie Mellon has shown that if a filtering system is
-   made available to users, many will make use of it in order to file
-   messages from specific users or mailing lists.  However, many others
-   did not make use of the Andrew system's FLAMES filtering language
-   [FLAMES] due to difficulty in setting it up.
-
-   Because of the expectation that users will make use of filtering if
-   it is offered and easy to use, this language has been made simple
-   enough to allow many users to make use of it, but rich enough that it
-   can be used productively.  However, it is expected that GUI-based
-   editors will be the preferred way of editing filters for a large
-   number of users.
-
-1.1.     Conventions Used in This Document
-
-   In the sections of this document that discuss the requirements of
-   various keywords and operators, the following conventions have been
-   adopted.
-
-   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 [KEYWORDS].
-
-   Each section on a command (test, action, or control) has a line
-   labeled "Usage:".  This line describes the usage of the command,
-   including its name and its arguments.  Required arguments are listed
-   inside angle brackets ("<" and ">").  Optional arguments are listed
-   inside square brackets ("[" and "]").  Each argument is followed by
-   its type, so "<key: string>" represents an argument called "key" that
-   is a string.  Literal strings are represented with double-quoted
-   strings.  Alternatives are separated with slashes, and parenthesis
-   are used for grouping, similar to [ABNF].
-
-
-
-
-Guenther & Showalter         Standards Track                    [Page 4]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   In the "Usage:" line, there are three special pieces of syntax that
-   are frequently repeated, MATCH-TYPE, COMPARATOR, and ADDRESS-PART.
-   These are discussed in sections 2.7.1, 2.7.3, and 2.7.4,
-   respectively.
-
-   The formal grammar for these commands is defined in section 10 and is
-   the authoritative reference on how to construct commands, but the
-   formal grammar does not specify the order, semantics, number or types
-   of arguments to commands, nor the legal command names.  The intent is
-   to allow for extension without changing the grammar.
-
-1.2.     Example mail messages
-
-   The following mail messages will be used throughout this document in
-   examples.
-
-   Message A
-   -----------------------------------------------------------
-   Date: Tue, 1 Apr 1997 09:06:31 -0800 (PST)
-   From: coyote@desert.example.org
-   To: roadrunner@acme.example.com
-   Subject: I have a present for you
-
-   Look, I'm sorry about the whole anvil thing, and I really
-   didn't mean to try and drop it on you from the top of the
-   cliff.  I want to try to make it up to you.  I've got some
-   great birdseed over here at my place--top of the line
-   stuff--and if you come by, I'll have it all wrapped up
-   for you.  I'm really sorry for all the problems I've caused
-   for you over the years, but I know we can work this out.
-   --
-   Wile E. Coyote   "Super Genius"   coyote@desert.example.org
-   -----------------------------------------------------------
-
-   Message B
-   -----------------------------------------------------------
-   From: youcouldberich!@reply-by-postal-mail.invalid
-   Sender: b1ff@de.res.example.com
-   To: rube@landru.example.com
-   Date:  Mon, 31 Mar 1997 18:26:10 -0800
-   Subject: $$$ YOU, TOO, CAN BE A MILLIONAIRE! $$$
-
-   YOU MAY HAVE ALREADY WON TEN MILLION DOLLARS, BUT I DOUBT
-   IT!  SO JUST POST THIS TO SIX HUNDRED NEWSGROUPS!  IT WILL
-   GUARANTEE THAT YOU GET AT LEAST FIVE RESPONSES WITH MONEY!
-   MONEY! MONEY! COLD HARD CASH!  YOU WILL RECEIVE OVER
-   $20,000 IN LESS THAN TWO MONTHS!  AND IT'S LEGAL!!!!!!!!!
-   !!!!!!!!!!!!!!!!!!111111111!!!!!!!11111111111!!1  JUST
-
-
-
-Guenther & Showalter         Standards Track                    [Page 5]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   SEND $5 IN SMALL, UNMARKED BILLS TO THE ADDRESSES BELOW!
-   -----------------------------------------------------------
-
-2.      Design
-
-2.1.     Form of the Language
-
-   The language consists of a set of commands.  Each command consists of
-   a set of tokens delimited by whitespace.  The command identifier is
-   the first token and it is followed by zero or more argument tokens.
-   Arguments may be literal data, tags, blocks of commands, or test
-   commands.
-
-   With the exceptions of strings and comments, the language is limited
-   to US-ASCII characters.  Strings and comments may contain octets
-   outside the US-ASCII range.  Specifically, they will normally be in
-   UTF-8, as specified in [UTF-8].  NUL (US-ASCII 0) is never permitted
-   in scripts, while CR and LF can only appear as the CRLF line ending.
-
-      While this specification permits arbitrary octets to appear in
-      sieve scripts inside strings and comments, this has made it
-      difficult to robustly handle sieve scripts in programs that are
-      sensitive to the encodings used.  The "encoded-character"
-      capability (section 2.4.2.4) provides an alternative means of
-      representing such octets in strings using just US-ASCII
-      characters.  As such, the use of non-UTF-8 text in scripts should
-      be considered a deprecated feature that may be abandoned.
-
-   Tokens other than strings are considered case-insensitive.
-
-2.2.     Whitespace
-
-   Whitespace is used to separate tokens.  Whitespace is made up of
-   tabs, newlines (CRLF, never just CR or LF), and the space character.
-   The amount of whitespace used is not significant.
-
-2.3.     Comments
-
-   Two types of comments are offered.  Comments are semantically
-   equivalent to whitespace and can be used anyplace that whitespace is
-   (with one exception in multi-line strings, as described in the
-   grammar).
-
-   Hash comments begin with a "#" character that is not contained within
-   a string and continue until the next CRLF.
-
-
-
-
-
-
-Guenther & Showalter         Standards Track                    [Page 6]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   Example:  if size :over 100k { # this is a comment
-                discard;
-             }
-
-   Bracketed comments begin with the token "/*" and end with "*/"
-   outside of a string.  Bracketed comments may span multiple lines.
-   Bracketed comments do not nest.
-
-   Example:  if size :over 100K { /* this is a comment
-                this is still a comment */ discard /* this is a comment
-                */ ;
-             }
-
-2.4.     Literal Data
-
-   Literal data means data that is not executed, merely evaluated "as
-   is", to be used as arguments to commands.  Literal data is limited to
-   numbers, strings, and string lists.
-
-2.4.1.   Numbers
-
-   Numbers are given as ordinary decimal numbers.  As a shorthand for
-   expressing larger values, such as message sizes, a suffix of "K",
-   "M", or "G" MAY be appended to indicate a multiple of a power of two.
-   To be comparable with the power-of-two-based versions of SI units
-   that computers frequently use, "K" specifies kibi-, or 1,024 (2^10)
-   times the value of the number; "M" specifies mebi-, or 1,048,576
-   (2^20) times the value of the number; and "G" specifies gibi-, or
-   1,073,741,824 (2^30) times the value of the number [BINARY-SI].
-
-   Implementations MUST support integer values in the inclusive range
-   zero to 2,147,483,647 (2^31 - 1), but MAY support larger values.
-
-   Only non-negative integers are permitted by this specification.
-
-2.4.2.   Strings
-
-   Scripts involve large numbers of string values as they are used for
-   pattern matching, addresses, textual bodies, etc.  Typically, short
-   quoted strings suffice for most uses, but a more convenient form is
-   provided for longer strings such as bodies of messages.
-
-   A quoted string starts and ends with a single double quote (the <">
-   character, US-ASCII 34).  A backslash ("\", US-ASCII 92) inside of a
-   quoted string is followed by either another backslash or a double
-   quote.  These two-character sequences represent a single backslash or
-   double quote within the value, respectively.
-
-
-
-
-Guenther & Showalter         Standards Track                    [Page 7]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   Scripts SHOULD NOT escape other characters with a backslash.
-
-   An undefined escape sequence (such as "\a" in a context where "a" has
-   no special meaning) is interpreted as if there were no backslash (in
-   this case, "\a" is just "a"), though that may be changed by
-   extensions.
-
-   Non-printing characters such as tabs, CRLF, and control characters
-   are permitted in quoted strings.  Quoted strings MAY span multiple
-   lines.  An unencoded NUL (US-ASCII 0) is not allowed in strings, see
-   section 2.4.2.4 for how it can be encoded.
-
-   As message header data is converted to [UTF-8] for comparison (see
-   section 2.7.2), most string values will use the UTF-8 encoding.
-   However, implementations MUST accept all strings that match the
-   grammar in section 8.  The ability to use non-UTF-8 encoded strings
-   matches existing practice and has proven to be useful both in tests
-   for invalid data and in arguments containing raw MIME parts for
-   extension actions that generate outgoing messages.
-
-   For entering larger amounts of text, such as an email message, a
-   multi-line form is allowed.  It starts with the keyword "text:",
-   followed by a CRLF, and ends with the sequence of a CRLF, a single
-   period, and another CRLF.  The CRLF before the final period is
-   considered part of the value.  In order to allow the message to
-   contain lines with a single-dot, lines are dot-stuffed.  That is,
-   when composing a message body, an extra `.' is added before each line
-   which begins with a `.'.  When the server interprets the script,
-   these extra dots are removed.  Note that a line that begins with a
-   dot followed by a non-dot character is not interpreted dot-stuffed;
-   that is, ".foo" is interpreted as ".foo".  However, because this is
-   potentially ambiguous, scripts SHOULD be properly dot-stuffed so such
-   lines do not appear.
-
-   Note that a hashed comment or whitespace may occur in between the
-   "text:" and the CRLF, but not within the string itself.  Bracketed
-   comments are not allowed here.
-
-2.4.2.1. String Lists
-
-   When matching patterns, it is frequently convenient to match against
-   groups of strings instead of single strings.  For this reason, a list
-   of strings is allowed in many tests, implying that if the test is
-   true using any one of the strings, then the test is true.
-
-   For instance, the test `header :contains ["To", "Cc"]
-   ["me@example.com", "me00@landru.example.com"]' is true if either a To
-   header or Cc header of the input message contains either of the email
-
-
-
-Guenther & Showalter         Standards Track                    [Page 8]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   addresses "me@example.com" or "me00@landru.example.com".
-
-   Conversely, in any case where a list of strings is appropriate, a
-   single string is allowed without being a member of a list: it is
-   equivalent to a list with a single member.  This means that the test
-   `exists "To"' is equivalent to the test `exists ["To"]'.
-
-2.4.2.2. Headers
-
-   Headers are a subset of strings.  In the Internet Message
-   Specification [IMAIL], each header line is allowed to have whitespace
-   nearly anywhere in the line, including after the field name and
-   before the subsequent colon.  Extra spaces between the header name
-   and the ":" in a header field are ignored.
-
-   A header name never contains a colon.  The "From" header refers to a
-   line beginning "From:" (or "From   :", etc.).  No header will match
-   the string "From:" due to the trailing colon.
-
-   Similarly, no header will match a syntactically invalid header name.
-   An implementation MUST NOT cause an error for syntactically invalid
-   header names in tests.
-
-   Header lines are unfolded as described in [IMAIL] section 2.2.3.
-   Interpretation of header data SHOULD be done according to [MIME3]
-   section 6.2 (see 2.7.2 below for details).
-
-2.4.2.3. Addresses
-
-   A number of commands call for email addresses, which are also a
-   subset of strings.  When these addresses are used in outbound
-   contexts, addresses must be compliant with [IMAIL], but are further
-   constrained within this document.  Using the symbols defined in
-   [IMAIL], section 3, the syntax of an address is:
-
-   sieve-address = addr-spec                ; simple address
-                 / phrase "<" addr-spec ">" ; name & addr-spec
-
-   That is, routes and group syntax are not permitted.  If multiple
-   addresses are required, use a string list.  Named groups are not
-   permitted.
-
-   It is an error for a script to execute an action with a value for use
-   as an outbound address that doesn't match the "sieve-address" syntax.
-
-
-
-
-
-
-
-Guenther & Showalter         Standards Track                    [Page 9]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-2.4.2.4. Encoding characters using "encoded-character"
-
-   When the "encoded-character" extension is in effect, certain
-   character sequences in strings are replaced by their decoded value.
-   This happens after escape sequences are interpreted and dot-
-   unstuffing has been done.  Implementations SHOULD support "encoded-
-   character".
-
-   Arbitrary octets can be embedded in strings by using the syntax
-   encoded-arb-octets.  The sequence is replaced by the octets with the
-   hexadecimal values given by each hex-pair.
-
-   blank                = WSP / CRLF
-   encoded-arb-octets   = "${hex:" hex-pair-seq "}"
-   hex-pair-seq         = *blank hex-pair *(1*blank hex-pair) *blank
-   hex-pair             = 1*2HEXDIG
-
-   It may be inconvenient or undesirable to enter Unicode characters
-   verbatim and for these cases the syntax encoded-unicode-char can be
-   used.  The sequence is replaced by the UTF-8 encoding of the
-   specified Unicode characters, which are identified by the hexadecimal
-   value of unicode-hex.
-
-   encoded-unicode-char = "${unicode:" unicode-hex-seq "}"
-   unicode-hex-seq      = *blank unicode-hex
-                          *(1*blank unicode-hex) *blank
-   unicode-hex          = 1*HEXDIG
-
-   It is an error for a script to use a hexadecimal value that isn't in
-   either the range 0 to D7FF or the range E000 to 10FFFF.  (The range
-   D800 to DFFF is excluded as those character numbers are only used as
-   part of the UTF-16 encoding form and are not applicable to the UTF-8
-   encoding that the syntax here represents.)
-
-   Note: Implementations MUST NOT raise an error for an out of range
-   Unicode value unless the sequence containing it is well-formed
-   according to the grammar.
-
-   The capability string for use with the require command is "encoded-
-   character".
-
-   In the following script, message B is discarded, since the specified
-   test string is equivalent to "$$$".
-
-   Example:  require "encoded-character";
-             if header :contains "Subject" "$${hex:24 24}" {
-                discard;
-             }
-
-
-
-Guenther & Showalter         Standards Track                   [Page 10]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   The following examples demonstrate valid and invalid encodings and
-   how they are handled:
-
-     "$${hex:40}"         -> "$@"
-     "${hex: 40 }"        -> "@"
-     "${HEX: 40}"         -> "@"
-     "${hex:40"           -> "${hex:40"
-     "${hex:400}"         -> "${hex:400}"
-     "${hex:4${hex:30}}"  -> "${hex:40}"
-     "${unicode:40}"      -> "@"
-     "${ unicode:40}"     -> "${ unicode:40}"
-     "${UNICODE:40}"      -> "@"
-     "${UnICoDE:0000040}" -> "@"
-     "${Unicode:40}"      -> "@"
-     "${Unicode:Cool}"    -> "${Unicode:Cool}"
-     "${unicode:200000}"  -> error
-     "${Unicode:DF01}     -> error
-
-2.5.     Tests
-
-   Tests are given as arguments to commands in order to control their
-   actions.  In this document, tests are given to if/elsif to decide
-   which block of code is run.
-
-2.5.1.   Test Lists
-
-   Some tests ("allof" and "anyof", which implement logical "and" and
-   logical "or", respectively) may require more than a single test as an
-   argument.  The test-list syntax element provides a way of grouping
-   tests as a comma separated list in parens.
-
-   Example:  if anyof (not exists ["From", "Date"],
-                   header :contains "from" "fool@example.com") {
-                discard;
-             }
-
-2.6.     Arguments
-
-   In order to specify what to do, most commands take arguments.  There
-   are three types of arguments: positional, tagged, and optional.
-
-   It is an error for a script, on a single command, to use conflicting
-   arguments or to use a tagged or optional argument more than once.
-
-2.6.1.   Positional Arguments
-
-   Positional arguments are given to a command which discerns their
-   meaning based on their order.  When a command takes positional
-
-
-
-Guenther & Showalter         Standards Track                   [Page 11]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   arguments, all positional arguments must be supplied and must be in
-   the order prescribed.
-
-2.6.2.   Tagged Arguments
-
-   This document provides for tagged arguments in the style of
-   CommonLISP.  These are also similar to flags given to commands in
-   most command-line systems.
-
-   A tagged argument is an argument for a command that begins with ":"
-   followed by a tag naming the argument, such as ":contains".  This
-   argument means that zero or more of the next tokens have some
-   particular meaning depending on the argument.  These next tokens may
-   be literal data but they are never blocks.
-
-   Tagged arguments are similar to positional arguments, except that
-   instead of the meaning being derived from the command, it is derived
-   from the tag.
-
-   Tagged arguments must appear before positional arguments, but they
-   may appear in any order with other tagged arguments.  For simplicity
-   of the specification, this is not expressed in the syntax definitions
-   with commands, but they still may be reordered arbitrarily provided
-   they appear before positional arguments.  Tagged arguments may be
-   mixed with optional arguments.
-
-   Tagged arguments SHOULD NOT take tagged arguments as arguments.
-
-2.6.3.   Optional Arguments
-
-   Optional arguments are exactly like tagged arguments except that they
-   may be left out, in which case a default value is implied.  Because
-   optional arguments tend to result in shorter scripts, they have been
-   used far more than tagged arguments.
-
-   One particularly noteworthy case is the ":comparator" argument, which
-   allows the user to specify which comparator [COLLATION] will be used
-   to compare two strings, since different languages may impose
-   different orderings on UTF-8 [UTF-8] strings.
-
-2.6.4.   Types of Arguments
-
-   Abstractly, arguments may be literal data, tests, or blocks of
-   commands.  In this way, an "if" control structure is merely a command
-   that happens to take a test and a block as arguments and may execute
-   the block of code.
-
-   However, this abstraction is ambiguous from a parsing standpoint.
-
-
-
-Guenther & Showalter         Standards Track                   [Page 12]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   The grammar in section 9.2 presents a parsable version of this:
-   Arguments are string-lists, numbers, and tags, which may be followed
-   by a test or a test-list, which may be followed by a block of
-   commands.  No more than one test or test list, nor more than one
-   block of commands, may be used, and commands that end with a block of
-   commands do not end with semicolons.
-
-2.7.     String Comparison
-
-   When matching one string against another, there are a number of ways
-   of performing the match operation.  These are accomplished with three
-   types of matches: an exact match, a substring match, and a wildcard
-   glob-style match.  These are described below.
-
-   In order to provide for matches between character sets and case
-   insensitivity, Sieve uses the comparators defined in the Internet
-   Application Protocol Collation Registry [COLLATION].
-
-   However, when a string represents the name of a header, the
-   comparator is never user-specified.  Header comparisons are always
-   done with the "i;ascii-casemap" operator, i.e., case-insensitive
-   comparisons, because this is the way things are defined in the
-   message specification [IMAIL].
-
-2.7.1.   Match Type
-
-   Commands which perform string comparisons may have an optional match
-   type argument. The three match types in this specification are ":is",
-   ":contains", and ":matches".
-
-   The ":contains" match type describes a substring match.  If the value
-   argument contains the key argument as a substring, the match is true.
-   For instance, the string "frobnitzm" contains "frob" and "nit", but
-   not "fbm".  The empty key ("") is contained in all values.
-
-   The ":is" match type describes an absolute match; if the contents of
-   the first string are absolutely the same as the contents of the
-   second string, they match.  Only the string "frobnitzm" is the string
-   "frobnitzm".  The empty key ":is" and only ":is" the empty value.
-
-   The ":matches" match type specifies a wildcard match using the
-   characters "*" and "?"; the entire value must be matched.  "*"
-   matches zero or more characters in the value and "?" matches a single
-   character in the value, where the comparator that is used (see 2.7.3)
-   defines what a character is.  For example, the comparators "i;octet"
-   and "i;ascii-casemap" define a character to be a single octet so "?"
-   will always match exactly one octet when one of those comparators is
-   in use.  In contrast, a Unicode-based comparator would define a
-
-
-
-Guenther & Showalter         Standards Track                   [Page 13]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   character to be any UTF-8 octet sequence encoding one Unicode
-   character and thus "?" may match more than one octet.  "?" and "*"
-   may be escaped as "\\?" and "\\*" in strings to match against
-   themselves.  The first backslash escapes the second backslash;
-   together, they escape the "*".  This is awkward, but it is
-   commonplace in several programming languages that use globs and
-   regular expressions.
-
-   In order to specify what type of match is supposed to happen,
-   commands that support matching take optional arguments ":matches",
-   ":is", and ":contains".  Commands default to using ":is" matching if
-   no match type argument is supplied.  Note that these modifiers
-   interact with comparators; in particular, only comparators that
-   support the "substring match" operation are suitable for matching
-   with ":contains" or ":matches".  It is an error to use a comparator
-   with ":contains" or ":matches" that is not compatible with it.
-
-   It is an error to give more than one of these arguments to a given
-   command.
-
-   For convenience, the "MATCH-TYPE" syntax element is defined here as
-   follows:
-
-   Syntax:   ":is" / ":contains" / ":matches"
-
-2.7.2.   Comparisons Across Character Sets
-
-   Messages may involve a number of character sets.  In order for
-   comparisons to work across character sets, implementations SHOULD
-   implement the following behavior:
-
-      Comparisons are performed on octets.  Implementations convert text
-      from header fields in all charsets [MIME3] to Unicode, encoded as
-      UTF-8, as input to the comparator (see 2.7.3).  Implementations
-      MUST be capable of converting US-ASCII, ISO-8859-1, the US-ASCII
-      subset of ISO-8859-* character sets, and UTF-8.  Text that the
-      implementation cannot convert to Unicode for any reason MAY be
-      treated as plain US-ASCII (including any [MIME3] syntax) or
-      processed according to local conventions.  An encoded NUL octet
-      (character zero) SHOULD NOT cause early termination of the header
-      content being compared against.
-
-   If implementations fail to support the above behavior, they MUST
-   conform to the following:
-
-      No two strings can be considered equal if one contains octets
-      greater than 127.
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 14]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-2.7.3.   Comparators
-
-   In order to allow for language-independent, case-independent matches,
-   the match type may be coupled with a comparator name.  The Internet
-   Application Protocol Collation Registry [COLLATION] provides the
-   framework for describing and naming comparators.
-
-   All implementations MUST support the "i;octet" comparator (simply
-   compares octets) and the "i;ascii-casemap" comparator (which treats
-   uppercase and lowercase characters in the US-ASCII subset of UTF-8 as
-   the same).  If left unspecified, the default is "i;ascii-casemap".
-
-   Some comparators may not be usable with substring matches; that is,
-   they may only work with ":is".  It is an error to try and use a
-   comparator with ":matches" or ":contains" that is not compatible with
-   it.
-
-   Sieve treats a comparator result of "undefined" the same as a result
-   of "no-match".  That is, this base specification does not provide any
-   means to directly detect invalid comparator input.
-
-   A comparator is specified by the ":comparator" option with commands
-   that support matching.  This option is followed by a string providing
-   the name of the comparator to be used.  For convenience, the syntax
-   of a comparator is abbreviated to "COMPARATOR", and (repeated in
-   several tests) is as follows:
-
-   Syntax:   ":comparator" <comparator-name: string>
-
-   So in this example,
-
-   Example:  if header :contains :comparator "i;octet" "Subject"
-                   "MAKE MONEY FAST" {
-                discard;
-             }
-
-   would discard any message with subjects like "You can MAKE MONEY
-   FAST", but not "You can Make Money Fast", since the comparator used
-   is case-sensitive.
-
-   Comparators other than "i;octet" and "i;ascii-casemap" must be
-   declared with require, as they are extensions.  If a comparator
-   declared with require is not known, it is an error, and execution
-   fails.  If the comparator is not declared with require, it is also an
-   error, even if the comparator is supported.  (See 2.10.5.)
-
-   Both ":matches" and ":contains" match types are compatible with the
-   "i;octet" and "i;ascii-casemap" comparators and may be used with
-
-
-
-Guenther & Showalter         Standards Track                   [Page 15]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   them.
-
-   It is an error to give more than one of these arguments to a given
-   command.
-
-2.7.4.   Comparisons Against Addresses
-
-   Addresses are one of the most frequent things represented as strings.
-   These are structured, and being able to compare against the local-
-   part or the domain of an address is useful, so some tests that act
-   exclusively on addresses take an additional optional argument that
-   specifies what the test acts on.
-
-   These optional arguments are ":localpart", ":domain", and ":all",
-   which act on the local-part (left-side), the domain part (right-
-   side), and the whole address.
-
-   If an address is not syntactically valid then it will not be matched
-   by tests specifying ":localpart" or ":domain".
-
-   The kind of comparison done, such as whether or not the test done is
-   case-insensitive, is specified as a comparator argument to the test.
-
-   If an optional address-part is omitted, the default is ":all".
-
-   It is an error to give more than one of these arguments to a given
-   command.
-
-   For convenience, the "ADDRESS-PART" syntax element is defined here as
-   follows:
-
-   Syntax:   ":localpart" / ":domain" / ":all"
-
-2.8.     Blocks
-
-   Blocks are sets of commands enclosed within curly braces and supplied
-   as the final argument to a command.  Such a command is a control
-   structure: when executed it has control over the number of times the
-   commands in the block are executed.
-
-   With the commands supplied in this memo, there are no loops.  The
-   control structures supplied--if, elsif, and else--run a block either
-   once or not at all.
-
-2.9.     Commands
-
-   Sieve scripts are sequences of commands.  Commands can take any of
-   the tokens above as arguments, and arguments may be either tagged or
-
-
-
-Guenther & Showalter         Standards Track                   [Page 16]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   positional arguments.  Not all commands take all arguments.
-
-   There are three kinds of commands: test commands, action commands,
-   and control commands.
-
-   The simplest is an action command.  An action command is an
-   identifier followed by zero or more arguments, terminated by a
-   semicolon.  Action commands do not take tests or blocks as arguments.
-   The actions referenced in this document are:
-    - keep, to save the message in the default location
-    - fileinto, to save the message in a specific mailbox
-    - redirect, to forward the message to another address,
-    - discard, to silently throw away the message
-
-   A control command is a command that affects the parsing or the flow
-   of execution of the Sieve script in some way.  A control structure is
-   a control command which ends with a block instead of a semicolon.
-
-   A test command is used as part of a control command.  It is used to
-   specify whether or not the block of code given to the control command
-   is executed.
-
-2.10.    Evaluation
-
-2.10.1.  Action Interaction
-
-   Some actions cannot be used with other actions because the result
-   would be absurd.  These restrictions are noted throughout this memo.
-
-   Extension actions MUST state how they interact with actions defined
-   in this specification.
-
-2.10.2.  Implicit Keep
-
-   Previous experience with filtering systems suggests that cases tend
-   to be missed in scripts.  To prevent errors, Sieve has an "implicit
-   keep".
-
-   An implicit keep is a keep action (see 4.4) performed in absence of
-   any action that cancels the implicit keep.
-
-   An implicit keep is performed if a message is not written to a
-   mailbox, redirected to a new address, or explicitly thrown out.  That
-   is, if a fileinto, a keep, a redirect, or a discard is performed, an
-   implicit keep is not.
-
-   Some actions may be defined to not cancel the implicit keep.  These
-   actions may not directly affect the delivery of a message, and are
-
-
-
-Guenther & Showalter         Standards Track                   [Page 17]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   used for their side effects.  None of the actions specified in this
-   document meet that criteria, but extension actions may.
-
-   For instance, with any of the short messages offered above, the
-   following script produces no actions.
-
-   Example:  if size :over 500K { discard; }
-
-   As a result, the implicit keep is taken.
-
-2.10.3.  Message Uniqueness in a Mailbox
-
-   Implementations SHOULD NOT deliver a message to the same mailbox more
-   than once, even if a script explicitly asks for a message to be
-   written to a mailbox twice.
-
-   The test for equality of two messages is implementation-defined.
-
-   If a script asks for a message to be written to a mailbox twice, it
-   MUST NOT be treated as an error.
-
-2.10.4.  Limits on Numbers of Actions
-
-   Site policy MAY limit the number of actions taken and MAY impose
-   restrictions on which actions can be used together.  In the event
-   that a script hits a policy limit on the number of actions taken for
-   a particular message, an error occurs.
-
-   Implementations MUST allow at least one keep or one fileinto.  If
-   fileinto is not implemented, implementations MUST allow at least one
-   keep.
-
-2.10.5.  Extensions and Optional Features
-
-   Because of the differing capabilities of many mail systems, several
-   features of this specification are optional.  Before any of these
-   extensions can be executed, they must be declared with the "require"
-   action.
-
-   If an extension is not enabled with "require", implementations MUST
-   treat it as if they did not support it at all.  This protects scripts
-   from having their behavior altered by extensions which the script
-   author might not have even been aware of.
-
-   Implementations MUST NOT execute any Sieve script test or command
-   subsequent to "require" if one of the required extensions is
-   unavailable.
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 18]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   Note: The reason for this restriction is that prior experiences with
-         languages such as LISP and Tcl suggest that this is a workable
-         way of noting that a given script uses an extension.
-
-   Extensions which define actions MUST state how they interact with
-   actions discussed in the base specification.
-
-2.10.6.  Errors
-
-   In any programming language, there are compile-time and run-time
-   errors.
-
-   Compile-time errors are ones in syntax that are detectable if a
-   syntax check is done.
-
-   Run-time errors are not detectable until the script is run.  This
-   includes transient failures like disk full conditions, but also
-   includes issues like invalid combinations of actions.
-
-   When an error occurs in a Sieve script, all processing stops.
-
-   Implementations MAY choose to do a full parse, then evaluate the
-   script, then do all actions.  Implementations might even go so far as
-   to ensure that execution is atomic (either all actions are executed
-   or none are executed).
-
-   Other implementations may choose to parse and run at the same time.
-   Such implementations are simpler, but have issues with partial
-   failure (some actions happen, others don't).
-
-   Implementations MUST perform syntactic, semantic, and run-time checks
-   on code that is actually executed.  Implementations MAY perform those
-   checks or any part of them on code that is not reached during
-   execution.
-
-   When an error happens, implementations MUST notify the user that an
-   error occurred, which actions (if any) were taken, and do an implicit
-   keep.
-
-2.10.7.  Limits on Execution
-
-   Implementations may limit certain constructs.  However, this
-   specification places a lower bound on some of these limits.
-
-   Implementations MUST support fifteen levels of nested blocks.
-
-   Implementations MUST support fifteen levels of nested test lists.
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 19]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-3.      Control Commands
-
-   Control structures are needed to allow for multiple and conditional
-   actions.
-
-3.1.     Control if
-
-   There are three pieces to if: "if", "elsif", and "else".  Each is
-   actually a separate command in terms of the grammar.  However, an
-   elsif or else MUST only follow an if or elsif.  An error occurs if
-   these conditions are not met.
-
-   Usage:   if <test1: test> <block1: block>
-
-   Usage:   elsif <test2: test> <block2: block>
-
-   Usage:   else <block3: block>
-
-   The semantics are similar to those of any of the many other
-   programming languages these control structures appear in.  When the
-   interpreter sees an "if", it evaluates the test associated with it.
-   If the test is true, it executes the block associated with it.
-
-   If the test of the "if" is false, it evaluates the test of the first
-   "elsif" (if any).  If the test of "elsif" is true, it runs the
-   elsif's block.  An elsif may be followed by an elsif, in which case,
-   the interpreter repeats this process until it runs out of elsifs.
-
-   When the interpreter runs out of elsifs, there may be an "else" case.
-   If there is, and none of the if or elsif tests were true, the
-   interpreter runs the else's block.
-
-   This provides a way of performing exactly one of the blocks in the
-   chain.
-
-   In the following example, both Message A and B are dropped.
-
-   Example:  require "fileinto";
-             if header :contains "from" "coyote" {
-                discard;
-             } elsif header :contains ["subject"] ["$$$"] {
-                discard;
-             } else {
-                fileinto "INBOX";
-             }
-
-
-   When the script below is run over message A, it redirects the message
-
-
-
-Guenther & Showalter         Standards Track                   [Page 20]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   to acm@example.com; message B, to postmaster@example.com; any other
-   message is redirected to field@example.com.
-
-   Example:  if header :contains ["From"] ["coyote"] {
-                redirect "acm@example.com";
-             } elsif header :contains "Subject" "$$$" {
-                redirect "postmaster@example.com";
-             } else {
-                redirect "field@example.com";
-             }
-
-   Note that this definition prohibits the "... else if ..." sequence
-   used by C.  This is intentional, because this construct produces a
-   shift-reduce conflict.
-
-3.2.     Control require
-
-   Usage:   require <capabilities: string-list>
-
-   The require action notes that a script makes use of a certain
-   extension.  Such a declaration is required to use the extension, as
-   discussed in section 2.10.5.  Multiple capabilities can be declared
-   with a single require.
-
-   The require command, if present, MUST be used before anything other
-   than a require can be used.  An error occurs if a require appears
-   after a command other than require.
-
-   Example:  require ["fileinto", "reject"];
-
-   Example:  require "fileinto";
-             require "vacation";
-
-3.3.     Control stop
-
-   Usage:   stop
-
-   The "stop" action ends all processing.  If the implicit keep has not
-   been cancelled, then it is taken.
-
-4.      Action Commands
-
-   This document supplies four actions that may be taken on a message:
-   keep, fileinto, redirect, and discard.
-
-   Implementations MUST support the "keep", "discard", and "redirect"
-   actions.
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 21]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   Implementations SHOULD support "fileinto".
-
-   Implementations MAY limit the number of certain actions taken (see
-   section 2.10.4).
-
-4.1.     Action fileinto
-
-   Usage:   fileinto <mailbox: string>
-
-   The "fileinto" action delivers the message into the specified
-   mailbox.  Implementations SHOULD support fileinto, but in some
-   environments this may be impossible.  Implementations MAY place
-   restrictions on mailbox names; use of an invalid mailbox name MAY be
-   treated as an error or result in delivery to an implementation-
-   defined mailbox.  If the specified mailbox doesn't exist, the
-   implementation MAY treat it as an error, create the mailbox, or
-   deliver the message to an implementation-defined mailbox.  If the
-   implementation uses a different encoding scheme than UTF-8 for
-   mailbox names, it SHOULD reencode the mailbox name from UTF-8 to its
-   encoding scheme.  For example, the Internet Message Access Protocol
-   [IMAP] uses modified UTF-7, such that a mailbox argument of "odds &
-   ends" would appear in IMAP as "odds &- ends".
-
-   The capability string for use with the require command is "fileinto".
-
-   In the following script, message A is filed into mailbox
-   "INBOX.harassment".
-
-   Example:  require "fileinto";
-             if header :contains ["from"] "coyote" {
-                fileinto "INBOX.harassment";
-             }
-
-4.2.     Action redirect
-
-   Usage:   redirect <address: string>
-
-   The "redirect" action is used to send the message to another user at
-   a supplied address, as a mail forwarding feature does.  The
-   "redirect" action makes no changes to the message body or existing
-   headers, but it may add new headers.  In particular, existing
-   Received headers MUST be preserved and the count of Received headers
-   in the outgoing message MUST be larger than the same count on the
-   message as received by the implementation.  (An implementation that
-   adds a Received header before processing the message does not need to
-   add another when redirecting.)
-
-   The message is sent back out with the address from the redirect
-
-
-
-Guenther & Showalter         Standards Track                   [Page 22]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   command as an envelope recipient.  Implementations MAY combine
-   separate redirects for a given message into a single submission with
-   multiple envelope recipients.  (This is not an MUA-style forward,
-   which creates a new message with a different sender and message ID,
-   wrapping the old message in a new one.)
-
-   The envelope sender address on the outgoing message is chosen by the
-   sieve implementation. It MAY be copied from the message being
-   processed. However, if the message being processed has an empty
-   envelope sender address the outgoing message MUST also have an empty
-   envelope sender address. This last requirement is imposed to prevent
-   loops in the case where a message is redirected to an invalid address
-   when then returns a delivery status notification that also ends up
-   being redirected to the same invalid address.
-
-   The envelope sender address on the outgoing message is chosen by the
-   sieve implementation.  It MAY be copied from the message being
-   processed.
-
-   A simple script can be used for redirecting all mail:
-
-   Example:  redirect "bart@example.com";
-
-   Implementations MUST take measures to implement loop control,
-   possibly including adding headers to the message or counting Received
-   headers as specified in section 6.2 of [SMTP].  If an implementation
-   detects a loop, it causes an error.
-
-   Implementations MUST provide means of limiting the number of
-   redirects a Sieve script can perform. See Section 10 for more
-   details.
-
-   Implementations MAY ignore a redirect action silently due to policy
-   reasons.  For example, an implementation MAY choose not to redirect
-   to an address that is known to be undeliverable. Any ignored redirect
-   MUST NOT cancel the implicit keep.
-
-4.3.     Action keep
-
-   Usage:   keep
-
-   The "keep" action is whatever action is taken in lieu of all other
-   actions, if no filtering happens at all; generally, this simply means
-   to file the message into the user's main mailbox.  This command
-   provides a way to execute this action without needing to know the
-   name of the user's main mailbox, providing a way to call it without
-   needing to understand the user's setup, or the underlying mail
-   system.
-
-
-
-Guenther & Showalter         Standards Track                   [Page 23]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   For instance, in an implementation where the IMAP server is running
-   scripts on behalf of the user at time of delivery, a keep command is
-   equivalent to a fileinto "INBOX".
-
-   Example:  if size :under 1M { keep; } else { discard; }
-
-   Note that the above script is identical to the one below.
-
-   Example:  if not size :under 1M { discard; }
-
-4.4.     Action discard
-
-   Usage:   discard
-
-   Discard is used to silently throw away the message.  It does so by
-   simply canceling the implicit keep.  If discard is used with other
-   actions, the other actions still happen.  Discard is compatible with
-   all other actions.  (For instance fileinto+discard is equivalent to
-   fileinto.)
-
-   Discard MUST be silent; that is, it MUST NOT return a non-delivery
-   notification of any kind ([DSN], [MDN], or otherwise).
-
-   In the following script, any mail from "idiot@example.com" is thrown
-   out.
-
-   Example:  if header :contains ["from"] ["idiot@example.com"] {
-                discard;
-             }
-
-   While an important part of this language, "discard" has the potential
-   to create serious problems for users: Students who leave themselves
-   logged in to an unattended machine in a public computer lab may find
-   their script changed to just "discard".  In order to protect users in
-   this situation (along with similar situations), implementations MAY
-   keep messages destroyed by a script for an indefinite period, and MAY
-   disallow scripts that throw out all mail.
-
-5.      Test Commands
-
-   Tests are used in conditionals to decide which part(s) of the
-   conditional to execute.
-
-   Implementations MUST support these tests: "address", "allof",
-   "anyof", "exists", "false", "header", "not", "size", and "true".
-
-   Implementations SHOULD support the "envelope" test.
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 24]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-5.1.     Test address
-
-   Usage:   address [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE]
-            <header-list: string-list> <key-list: string-list>
-
-   The "address" test matches Internet addresses in structured headers
-   that contain addresses.  It returns true if any header contains any
-   key in the specified part of the address, as modified by the
-   comparator and the match keyword.  Whether there are other addresses
-   present in the header doesn't affect this test; this test does not
-   provide any way to determine whether an address is the only address
-   in a header.
-
-   Like envelope and header, this test returns true if any combination
-   of the header-list and key-list arguments match and false otherwise.
-
-   Internet email addresses [IMAIL] have the somewhat awkward
-   characteristic that the local-part to the left of the at-sign is
-   considered case sensitive, and the domain-part to the right of the
-   at-sign is case insensitive.  The "address" command does not deal
-   with this itself, but provides the ADDRESS-PART argument for allowing
-   users to deal with it.
-
-   The address primitive never acts on the phrase part of an email
-   address, nor on comments within that address.  It also never acts on
-   group names, although it does act on the addresses within the group
-   construct.
-
-   Implementations MUST restrict the address test to headers that
-   contain addresses, but MUST include at least From, To, Cc, Bcc,
-   Sender, Resent-From, Resent-To, and SHOULD include any other header
-   that utilizes an "address-list" structured header body.
-
-   Example:  if address :is :all "from" "tim@example.com" {
-                discard;
-             }
-
-5.2.     Test allof
-
-   Usage:   allof <tests: test-list>
-
-   The "allof" test performs a logical AND on the tests supplied to it.
-
-   Example:  allof (false, false)  =>   false
-             allof (false, true)   =>   false
-             allof (true,  true)   =>   true
-
-   The allof test takes as its argument a test-list.
-
-
-
-Guenther & Showalter         Standards Track                   [Page 25]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-5.3.     Test anyof
-
-   Usage:   anyof <tests: test-list>
-
-   The "anyof" test performs a logical OR on the tests supplied to it.
-
-   Example:  anyof (false, false)  =>   false
-             anyof (false, true)   =>   true
-             anyof (true,  true)   =>   true
-
-5.4.     Test envelope
-
-   Usage:   envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE]
-            <envelope-part: string-list> <key-list: string-list>
-
-   The "envelope" test is true if the specified part of the [SMTP] (or
-   equivalent) envelope matches the specified key.  This specification
-   defines the interpretation of the (case insensitive) "from" and "to"
-   envelope-parts.  Additional envelope-parts may be defined by other
-   extensions; implementations SHOULD consider unknown envelope parts an
-   error.
-
-   If one of the envelope-part strings is (case insensitive) "from",
-   then matching occurs against the FROM address used in the SMTP MAIL
-   command.  The null reverse-path is matched against as the empty
-   string, regardless of the ADDRESS-PART argument specified.
-
-   If one of the envelope-part strings is (case insensitive) "to", then
-   matching occurs against the TO address used in the SMTP RCPT command
-   that resulted in this message getting delivered to this user.  Note
-   that only the most recent TO is available, and only the one relevant
-   to this user.
-
-   The envelope-part is a string list and may contain more than one
-   parameter, in which case all of the strings specified in the key-list
-   are matched against all parts given in the envelope-part list.
-
-   Like address and header, this test returns true if any combination of
-   the envelope-part list and key-list arguments match and false
-   otherwise.
-
-   All tests against envelopes MUST drop source routes.
-
-   If the SMTP transaction involved several RCPT commands, only the data
-   from the RCPT command that caused delivery to this user is available
-   in the "to" part of the envelope.
-
-   If a protocol other than SMTP is used for message transport,
-
-
-
-Guenther & Showalter         Standards Track                   [Page 26]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   implementations are expected to adapt this command appropriately.
-
-   The envelope command is optional.  Implementations SHOULD support it,
-   but the necessary information may not be available in all cases.  The
-   capability string for use with the require command is "envelope".
-
-   Example:  require "envelope";
-             if envelope :all :is "from" "tim@example.com" {
-                discard;
-             }
-
-5.5.     Test exists
-
-   Usage:   exists <header-names: string-list>
-
-   The "exists" test is true if the headers listed in the header-names
-   argument exist within the message.  All of the headers must exist or
-   the test is false.
-
-   The following example throws out mail that doesn't have a From header
-   and a Date header.
-
-   Example:  if not exists ["From","Date"] {
-                discard;
-             }
-
-5.6.     Test false
-
-   Usage:   false
-
-   The "false" test always evaluates to false.
-
-5.7.     Test header
-
-   Usage:   header [COMPARATOR] [MATCH-TYPE]
-            <header-names: string-list> <key-list: string-list>
-
-   The "header" test evaluates to true if the value of any of the named
-   headers, ignoring leading and trailing whitespace, matches any key.
-   The type of match is specified by the optional match argument, which
-   defaults to ":is" if not specified, as specified in section 2.6.
-
-   Like address and envelope, this test returns true if any combination
-   of the header-names list and key-list arguments match and false
-   otherwise.
-
-   If a header listed in the header-names argument exists, it contains
-   the empty key ("").  However, if the named header is not present, it
-
-
-
-Guenther & Showalter         Standards Track                   [Page 27]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   does not match any key, including the empty key.  So if a message
-   contained the header
-
-           X-Caffeine: C8H10N4O2
-
-   these tests on that header evaluate as follows:
-
-           header :is ["X-Caffeine"] [""]         => false
-           header :contains ["X-Caffeine"] [""]   => true
-
-   Testing whether a given header is either absent or doesn't contain
-   any non-whitespace characters can be done using a negated "header"
-   test:
-
-           not header :matches "Cc" "?*"
-
-5.8.     Test not
-
-   Usage:   not <test1: test>
-
-   The "not" test takes some other test as an argument, and yields the
-   opposite result.  "not false" evaluates to "true" and "not true"
-   evaluates to "false".
-
-5.9.     Test size
-
-   Usage:   size <":over" / ":under"> <limit: number>
-
-   The "size" test deals with the size of a message.  It takes either a
-   tagged argument of ":over" or ":under", followed by a number
-   representing the size of the message.
-
-   If the argument is ":over", and the size of the message is greater
-   than the number provided, the test is true; otherwise, it is false.
-
-   If the argument is ":under", and the size of the message is less than
-   the number provided, the test is true; otherwise, it is false.
-
-   Exactly one of ":over" or ":under" must be specified, and anything
-   else is an error.
-
-   The size of a message is defined to be the number of octets in the
-   [IMAIL] representation of the message.
-
-   Note that for a message that is exactly 4,000 octets, the message is
-   neither ":over" nor ":under" 4000 octets.
-
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 28]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-5.10.    Test true
-
-   Usage:   true
-
-   The "true" test always evaluates to true.
-
-6.      Extensibility
-
-   New control commands, actions, and tests can be added to the
-   language.  Sites must make these features known to their users; this
-   document does not define a way to discover the list of extensions
-   supported by the server.
-
-   Any extensions to this language MUST define a capability string that
-   uniquely identifies that extension.  Capability string are case-
-   sensitive; for example, "foo" and "FOO" are different capabilities.
-   If a new version of an extension changes the functionality of a
-   previously defined extension, it MUST use a different name.
-   Extensions may register a set of related capabilities by registering
-   just a unique prefix for them.  The "comparator-" prefix is an
-   example of this.  The prefix MUST end with a "-" and MUST NOT overlap
-   any existing registrations.
-
-   In a situation where there is a script submission protocol and an
-   extension advertisement mechanism aware of the details of this
-   language, scripts submitted can be checked against the mail server to
-   prevent use of an extension that the server does not support.
-
-   Extensions MUST state how they interact with constraints defined in
-   section 2.10, e.g., whether they cancel the implicit keep, and which
-   actions they are compatible and incompatible with.  Extensions MUST
-   NOT change the behavior of the "require" control command or alter the
-   interpretation of the argument to the "require" control.
-
-   Extensions that can submit new email messages or otherwise generate
-   new protocol requests MUST consider loop suppression, at least to
-   document any security considerations.
-
-6.1.     Capability String
-
-   Capability strings are typically short strings describing what
-   capabilities are supported by the server.
-
-   Capability strings beginning with "vnd." represent vendor-defined
-   extensions.  Such extensions are not defined by Internet standards or
-   RFCs, but are still registered with IANA in order to prevent
-   conflicts.  Extensions starting with "vnd." SHOULD be followed by the
-   name of the vendor and product, such as "vnd.acme.rocket-sled".
-
-
-
-Guenther & Showalter         Standards Track                   [Page 29]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   The following capability strings are defined by this document:
-
-   encoded-character
-               The string "encoded-character" indicates that the
-               implementation supports the interpretation of
-               "${hex:...}" and "${unicode:...}" in strings.
-
-   envelope    The string "envelope" indicates that the implementation
-               supports the "envelope" command.
-
-   fileinto    The string "fileinto" indicates that the implementation
-               supports the "fileinto" command.
-
-   comparator- The string "comparator-elbonia" is provided if the
-               implementation supports the "elbonia" comparator.
-               Therefore, all implementations have at least the
-               "comparator-i;octet"
-               and "comparator-i;ascii-casemap" capabilities.  However,
-               these comparators may be used without being declared
-               with require.
-
-6.2.     IANA Considerations
-
-   In order to provide a standard set of extensions, a registry is
-   maintained by IANA.  Capability names may be registered on a first-
-   come, first-served basis.  Extensions designed for interoperable use
-   SHOULD be defined as standards track or IESG approved experimental
-   RFCs.  Registration of capability prefixes that do not begin with
-   "vnd."  REQUIRES a standards track or IESG approved experimental RFC.
-
-6.2.1.     Template for Capability Registrations
-
-   The following template is to be used for registering new Sieve
-   extensions with IANA.
-
-   To: iana@iana.org
-   Subject: Registration of new Sieve extension
-
-   Capability name: [the string for use in the 'require' statement]
-   Description:     [a brief description of what the extension adds
-                     or changes]
-   RFC number:      [for extensions published as RFCs]
-   Contact address: [email and/or physical address to contact for
-                     additional information]
-
-
-
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 30]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-6.2.2.     Handling of Existing Capability Registrations
-
-   In order to bring the existing capability registrations in line with
-   the new template, IANA is asked to modify each as follows:
-
-    1. The "capability name" and "capability arguments" fields
-       should be eliminated
-    2. The "capability keyword" field should be renamed to "Capability
-       name"
-    3. An empty "Description" field should be added
-    4. The "Standards Track/IESG-approved experimental RFC number" field
-       should be renamed to "RFC number"
-    5. The "Person and email address to contact for further information"
-       field should be renamed to "Contact address"
-
-6.2.3.     Initial Capability Registrations
-
-   This RFC updates the the following entries in the IANA registry for
-   Sieve extensions.
-
-   Capability name: encoded-character
-   Description:     changes the interpretation of strings to allow
-                    arbitrary octets and Unicode characters to be
-                    represented using US-ASCII
-   RFC number:      this RFC (Sieve base spec)
-   Contact address: The Sieve discussion list <ietf-mta-filters@imc.org>
-
-   Capability name: fileinto
-   Description:     adds the 'fileinto' action for delivering to a
-                    mailbox other than the default
-   RFC number:      this RFC (Sieve base spec)
-   Contact address: The Sieve discussion list <ietf-mta-filters@imc.org>
-
-   Capability name: envelope
-   Description:     adds the 'envelope' test for testing the message
-                    transport sender and recipient address
-   RFC number:      this RFC (Sieve base spec)
-   Contact address: The Sieve discussion list <ietf-mta-filters@imc.org>
-
-   Capability name: comparator-* (anything starting with "comparator-")
-   Description:     adds the indicated comparator for use with the
-                    :comparator argument
-   RFC number:      this RFC (Sieve base spec) and [COLLATION]
-   Contact address: The Sieve discussion list <ietf-mta-filters@imc.org>
-
-
-
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 31]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-6.3.     Capability Transport
-
-   A method of advertising which capabilities an implementation supports
-   is difficult due to the wide range of possible implementations.  Such
-   a mechanism, however, should have the property that the
-   implementation can advertise the complete set of extensions that it
-   supports.
-
-7.      Transmission
-
-   The [MIME] type for a Sieve script is "application/sieve".
-
-   The registration of this type for RFC 2048 requirements is updated as
-   follows:
-
-    Subject: Registration of MIME media type application/sieve
-
-    MIME media type name: application
-    MIME subtype name: sieve
-    Required parameters: none
-    Optional parameters: none
-    Encoding considerations: Most sieve scripts will be textual,
-       written in UTF-8.  When non-7bit characters are used,
-       quoted-printable is appropriate for transport systems
-       that require 7bit encoding.
-
-    Security considerations: Discussed in section 10 of this RFC.
-    Interoperability considerations: Discussed in section 2.10.5
-       of this RFC.
-    Published specification: this RFC.
-    Applications which use this media type: sieve-enabled mail
-      servers and clients
-    Additional information:
-      Magic number(s):
-      File extension(s): .siv .sieve
-      Macintosh File Type Code(s):
-    Person & email address to contact for further information:
-       See the discussion list at ietf-mta-filters@imc.org.
-    Intended usage:
-       COMMON
-    Author/Change controller:
-       See Editor information in this RFC.
-
-8.      Parsing
-
-   The Sieve grammar is separated into tokens and a separate grammar as
-   most programming languages are.
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 32]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-8.1.     Lexical Tokens
-
-   Sieve scripts are encoded in UTF-8.  The following assumes a valid
-   UTF-8 encoding; special characters in Sieve scripts are all US-ASCII.
-
-   The following are tokens in Sieve:
-
-           - identifiers
-           - tags
-           - numbers
-           - quoted strings
-           - multi-line strings
-           - other separators
-
-   Identifiers, tags, and numbers are case-insensitive, while quoted
-   strings and multi-line strings are case-sensitive.
-
-   Blanks, horizontal tabs, CRLFs, and comments ("white space") are
-   ignored except as they separate tokens.  Some white space is required
-   to separate otherwise adjacent tokens and in specific places in the
-   multi-line strings.  CR and LF can only appear in CRLF pairs.
-
-   The other separators are single individual characters, and are
-   mentioned explicitly in the grammar.
-
-   The lexical structure of sieve is defined in the following grammar
-   (as described in [ABNF]):
-
-   bracket-comment    = "/*" *not-star 1*STAR
-                        *(not-star-slash *not-star 1*STAR) "/"
-                          ; No */ allowed inside a comment.
-                          ; (No * is allowed unless it is the last
-                          ; character, or unless it is followed by a
-                          ; character that isn't a slash.)
-
-   comment            = bracket-comment / hash-comment
-
-   hash-comment       = "#" *octet-not-crlf CRLF
-
-   identifier         = (ALPHA / "_") *(ALPHA / DIGIT / "_")
-
-   multi-line         = "text:" *(SP / HTAB) (hash-comment / CRLF)
-                        *(multiline-literal / multiline-dotstart)
-                        "." CRLF
-
-   multiline-literal  = [ octet-not-period *octet-not-crlf ] CRLF
-
-   multiline-dotstart = "." 1*octet-not-crlf CRLF
-
-
-
-Guenther & Showalter         Standards Track                   [Page 33]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-                          ; A line containing only "." ends the
-                          ; multi-line.  Remove a leading '.' if
-                          ; followed by another '.'.
-
-   not-star           = CRLF / %x01-09 / %x0B-0C / %x0E-29 / %x2B-FF
-                          ; either a CRLF pair, OR a single octet
-                          ; other than NUL, CR, LF, or star
-
-   not-star-slash     = CRLF / %x01-09 / %x0B-0C / %x0E-29 / %x2B-2E /
-                        %x30-FF
-                          ; either a CRLF pair, OR a single octet
-                          ; other than NUL, CR, LF, star, or slash
-
-   number             = 1*DIGIT [ QUANTIFIER ]
-
-   octet-not-crlf     = %x01-09 / %x0B-0C / %x0E-FF
-                          ; a single octet other than NUL, CR, or LF
-
-   octet-not-period   = %x01-09 / %x0B-0C / %x0E-2D / %x2F-FF
-                          ; a single octet other than NUL,
-                          ; CR, LF, or period
-
-   octet-not-qspecial = %x01-09 / %x0B-0C / %x0E-21 / %x23-5B / %x5D-FF
-                          ; a single octet other than NUL,
-                          ; CR, LF, double-quote, or backslash
-
-   QUANTIFIER         = "K" / "M" / "G"
-
-   quoted-other       = "\" octet-not-qspecial
-                          ; represents just the octet-no-qspecial
-                          ; character.  SHOULD NOT be used
-
-   quoted-safe        = CRLF / octet-not-qspecial
-                          ; either a CRLF pair, OR a single octet other
-                          ; than NUL, CR, LF, double-quote, or backslash
-
-   quoted-special     = "\" (DQUOTE / "\")
-                          ; represents just a double-quote or backslash
-
-   quoted-string      = DQUOTE quoted-text DQUOTE
-
-   quoted-text        = *(quoted-safe / quoted-special / quoted-other)
-
-   STAR               = "*"
-
-   tag                = ":" identifier
-
-   white-space        = 1*(SP / CRLF / HTAB) / comment
-
-
-
-Guenther & Showalter         Standards Track                   [Page 34]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-8.2.     Grammar
-
-   The following is the grammar of Sieve after it has been lexically
-   interpreted.  No white space or comments appear below.  The start
-   symbol is "start".  Non-terminals for MATCH-TYPE, COMPARATOR, and
-   ADDRESS-PART are provided for use by extensions.
-
-   ADDRESS-PART = ":localpart" / ":domain" / ":all"
-
-   argument     = string-list / number / tag
-
-   arguments    = *argument [ test / test-list ]
-
-   block        = "{" commands "}"
-
-   command      = identifier arguments (";" / block)
-
-   commands     = *command
-
-   COMPARATOR   = ":comparator" string
-
-   MATCH-TYPE   = ":is" / ":contains" / ":matches"
-
-   start        = commands
-
-   string       = quoted-string / multi-line
-
-   string-list  = "[" string *("," string) "]" / string
-                    ; if there is only a single string, the brackets
-                    ; are optional
-
-   test         = identifier arguments
-
-   test-list    = "(" test *("," test) ")"
-
-9.      Extended Example
-
-   The following is an extended example of a Sieve script.  Note that it
-   does not make use of the implicit keep.
-
-    #
-    # Example Sieve Filter
-    # Declare any optional features or extension used by the script
-    #
-    require ["fileinto"];
-
-    #
-    # Handle messages from known mailing lists
-
-
-
-Guenther & Showalter         Standards Track                   [Page 35]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-    # Move messages from IETF filter discussion list to filter mailbox
-    #
-    if header :is "Sender" "owner-ietf-mta-filters@imc.org"
-            {
-            fileinto "filter";  # move to "filter" mailbox
-            }
-    #
-    # Keep all messages to or from people in my company
-    #
-    elsif address :DOMAIN :is ["From", "To"] "example.com"
-            {
-            keep;               # keep in "In" mailbox
-            }
-
-    #
-    # Try and catch unsolicited email.  If a message is not to me,
-    # or it contains a subject known to be spam, file it away.
-    #
-    elsif anyof (NOT address :all :contains
-                   ["To", "Cc", "Bcc"] "me@example.com",
-                 header :matches "subject"
-                   ["*make*money*fast*", "*university*dipl*mas*"])
-            {
-            fileinto "spam";   # move to "spam" mailbox
-            }
-    else
-            {
-            # Move all other (non-company) mail to "personal"
-            # mailbox.
-            fileinto "personal";
-            }
-
-10.     Security Considerations
-
-   Users must get their mail.  It is imperative that whatever method
-   implementations use to store the user-defined filtering scripts be
-   secure.
-
-   Several commands, such as "discard", "redirect", and "fileinto" allow
-   for actions to be taken that are potentially very dangerous.
-
-   Use of the "redirect" command to generate notifications may easily
-   overwhelm the target address, especially if it was not designed to
-   handle large messages.
-
-   Allowing a single script to redirect to multiple destinations can be
-   used as a means of amplifying the number of messages in an attack.
-   Moreover, if loop detection is not properly implemented it may be
-
-
-
-Guenther & Showalter         Standards Track                   [Page 36]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   possible to set up exponentially growing message loops. According,
-   Sieve implementations:
-
-   (1) MUST implement facilities to detect and break message loops. See
-       section 6.2 of [SMTP] for additional information on basic loop
-       detection strategies.
-
-   (2) MUST provide the means for administrators to limit the ability of
-       users to abuse redirect. In particular, it MUST be possible to
-       limit the number of redirects a script can perform. Additionally,
-       if no use cases exist for using redirect to multiple
-       destinations, this limit SHOULD be set to 1. Additional limits,
-       such as the ability to restrict redirect to local users MAY also
-       be implemented.
-
-   (3) MUST provide facilities to log use of redirect in order to
-       facilitate tracking down abuse.
-
-   (4) MAY use script analysis to determine whether or not a given
-       script can be executed safely. While the Sieve language is
-       sufficiently complex that full analysis of all possible scripts
-       is computationally infeasible, the majority of real-world
-       scripts are amenable to analysis.  For example, an
-       implementation might allow scripts that it has determined are
-       safe to run unhindered, block scripts that are potentially
-       problematic, and subject unclassifiable scripts to additional
-       auditing and logging.
-
-
-   Allowing redirects at all may not be appropriate in situations where
-   email accounts are freely-available and/or not trackable to a human
-   who can be held accountable for creating message bombs or other
-   abuse.
-
-   As with any filter on a message stream, if the sieve implementation
-   and the mail agents 'behind' sieve in the message stream differ in
-   their interpretation of the messages, it may be possible for an
-   attacker to subvert the filter.  Of particular note are differences
-   in the interpretation of malformed messages (e.g., missing or extra
-   syntax characters) or those that exhibit corner cases (e.g., NUL
-   octets encoded via [MIME3]).
-
-
-
-
-
-
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 37]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-11.     Acknowledgments
-
-   This document has been revised in part based on comments and
-   discussions that took place on and off the SIEVE mailing list.
-   Thanks to Sharon Chisholm, Cyrus Daboo, Ned Freed, Arnt Gulbrandsen,
-   Michael Haardt, Kjetil Torgrim Homme, Barry Leiba, Mark E. Mallett,
-   Alexey Melnikov, Eric Rescorla, Rob Siemborski, and Nigel Swinson for
-   reviews and suggestions.
-
-12.     Editors' Addresses
-
-   Philip Guenther
-   Sendmail, Inc.
-   6425 Christie St. Ste 400
-   Emeryville, CA 94608
-   Email: guenther@sendmail.com
-
-
-   Tim Showalter
-   Email: tjs@psaux.com
-
-
-13.  Normative References
-
-   [ABNF]      D. Crocker, Ed., P. Overell "Augmented BNF for Syntax
-               Specifications: ABNF", RFC 4234, October 2005.
-
-   [COLLATION] Newman, C., Duerst, M., and A. Gulbrandsen, "Internet
-               Application Protocol Collation Registry", RFC 4790, March
-               2007.
-
-   [IMAIL]     P. Resnick, Ed., "Internet Message Format", RFC 2822,
-               April 2001.
-
-   [KEYWORDS]  Bradner, S., "Key words for use in RFCs to Indicate
-               Requirement Levels", BCP 14, RFC 2119, March 1997.
-
-   [MIME]      Freed, N. and N. Borenstein, "Multipurpose Internet Mail
-               Extensions (MIME) Part One: Format of Internet Message
-               Bodies", RFC 2045, November 1996.
-
-   [MIME3]     Moore, K., "MIME (Multipurpose Internet Mail Extensions)
-               Part Three: Message Header Extensions for Non-ASCII
-               Text", RFC 2047, November 1996.
-
-   [SMTP]      J. Klensin, Ed., "Simple Mail Transfer Protocol", RFC
-               2821, April 2001.
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 38]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   [UTF-8]     Yergeau, F., "UTF-8, a transformation format of ISO
-               10646", RFC 3629, November 2003.
-
-14.  Informative References
-
-   [BINARY-SI] "Standard IEC 60027-2: Letter symbols to be used in
-               electrical technology - Part 2: Telecommunications and
-               electronics", January 1999.
-
-   [DSN]       Moore, K. and G. Vaudreuil, "An Extensible Message Format
-               for Delivery Status Notifications", RFC 3464, January
-               2003.
-
-   [FLAMES]    Borenstein, N, and C. Thyberg, "Power, Ease of Use, and
-               Cooperative Work in a Practical Multimedia Message
-               System", Int. J.  of Man-Machine Studies, April, 1991.
-               Reprinted in Computer-Supported Cooperative Work and
-               Groupware, Saul Greenberg, editor, Harcourt Brace
-               Jovanovich, 1991.  Reprinted in Readings in Groupware and
-               Computer-Supported Cooperative Work, Ronald Baecker,
-               editor, Morgan Kaufmann, 1993.
-
-   [IMAP]      Crispin, M., "Internet Message Access Protocol - version
-               4rev1", RFC 3501, March 2003.
-
-   [MDN]       T. Hansen, Ed., G. Vaudreuil, Ed., "Message Disposition
-               Notification", RFC 3798, May 2004.
-
-   [RFC3028]   Showalter, T., "Sieve: A Mail Filtering Language", RFC
-               3028, January 2001.
-
-15. Changes from RFC 3028
-
-   This following list is a summary of the changes that have been made
-   in the Sieve language base specification from [RFC3028].
-
-      1. Removed ban on tests having side-effects
-      2. Removed reject extension (will be specified in a separate RFC)
-      3. Clarified description of comparators to match [COLLATION], the
-         new base specification for them
-      4. Require stripping of leading and trailing whitespace in
-         "header" test
-      5. Clarified or tightened handling of many minor items, including:
-          - invalid [MIME3] encoding
-          - invalid addresses in headers
-          - invalid header field names in tests
-          - 'undefined' comparator result
-          - unknown envelope parts
-
-
-
-Guenther & Showalter         Standards Track                   [Page 39]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-          - null return-path in "envelope" test
-      6. Capability strings are case-sensitive
-      7. Clarified that fileinto should reencode non-ASCII mailbox
-         names to match the mailstore's conventions
-      8. Errors in the ABNF were corrected
-      9. The references were updated and split into normative and
-         informative
-     10. Added encoded-character capability and deprecated (but did not
-         remove) use of arbitrary binary octets in Sieve scripts.
-     11. Updated IANA registration template, and added IANA
-         considerations to permit capability prefix registrations.
-     12. Added .sieve as a valid extension for sieve scripts.
-
-16. Full Copyright Statement
-
-   Copyright (C) The IETF Trust (2007).
-
-   This document is subject to the rights, licenses and restrictions
-   contained in BCP 78, and except as set forth therein, the authors
-   retain all their rights.
-
-   This document and the information contained herein are provided on an
-   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
-   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
-   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
-   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
-   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
-   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Intellectual Property
-
-   The IETF takes no position regarding the validity or scope of any
-   Intellectual Property Rights or other rights that might be claimed to
-   pertain to the implementation or use of the technology described in
-   this document or the extent to which any license under such rights
-   might or might not be available; nor does it represent that it has
-   made any independent effort to identify any such rights.  Information
-   on the procedures with respect to rights in RFC documents can be
-   found in BCP 78 and BCP 79.
-
-   Copies of IPR disclosures made to the IETF Secretariat and any
-   assurances of licenses to be made available, or the result of an
-   attempt made to obtain a general license or permission for the use of
-   such proprietary rights by implementers or users of this
-   specification can be obtained from the IETF on-line IPR repository at
-   http://www.ietf.org/ipr.
-
-   The IETF invites any interested party to bring to its attention any
-
-
-
-Guenther & Showalter         Standards Track                   [Page 40]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-   copyrights, patents or patent applications, or other proprietary
-   rights that may cover technology that may be required to implement
-   this standard.  Please address the information to the IETF at ietf-
-   ipr@ietf.org.
-
-Acknowledgement
-
-   Funding for the RFC Editor function is currently provided by the IETF
-   Administrative Support Activity (IASA).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 41]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-Appendix A. Change History
-
-   This section will be removed when this document leaves the Internet-
-   Draft stage.
-
-   Changes from draft-ietf-sieve-3028bis-12.txt
-    1. Merged in changes from original RFC Editor note
-    2. Added additional security considerations for redirect
-
-   Changes from draft-ietf-sieve-3028bis-11.txt
-    1. Correct typo in boilerplate
-    2. Update [DSN] reference to RFC 3464
-
-   Changes from draft-ietf-sieve-3028bis-10.txt
-    1. Clarify how the "redirect" action uses the address argument
-    2. Eliminate the phrase "original message"
-    3. If an outbound address doesn't match the syntax, it's an error
-
-   Changes from draft-ietf-sieve-3028bis-09.txt
-    1. [MDN] reference is merely informative
-    2. Whitespace tweaks in the ABNF
-    3. Extensions can't change "require"
-    4. fileinto a nonexistent mailbox is implementation defined behavior
-    5. Clarify the definition of the size of a message
-    6. Make the KEYWORDS boilerplate match expectations
-    7. Add the encoded-character extension
-    8. Remove duplication in text regarding unknown extensions
-    9. Address security concerns about looping with redirect or other
-       extensions
-    10. Valid numbers include zero
-    11. Various changes suggested by the gen-art reviewer
-    12. Removed references to the Halting Problem.  Humor is dead
-    13. Clarify which tokens are case-insensitive and which are
-        case-sensitive; use the 'unexpected' case in several examples
-    14. Add .sieve as an extension for the application/sieve MIME type
-    15. Permit registration of capability prefixes (like "comparator-"),
-        but require an IESG approved RFC when they're outside the
-        "vnd." 'namespace'
-    16. Replace "example.edu" with "example.com"
-    17. Update boilerplate
-    18. Updated pages numbers in table of contents
-
-   Changes from draft-ietf-sieve-3028bis-08.txt
-    1. [RFC3028] reference is merely informative
-    2. String lists are literal data
-    3. Tagged and optional arguments can take any sort of literal data
-       as arguments
-    4. Change "folder" to "mailbox" throughout
-
-
-
-Guenther & Showalter         Standards Track                   [Page 42]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-    5. Added more items to the "Changes from RFC 3028" list
-    6. A multi-line string includes the CRLF before the final dot
-
-   Changes from draft-ietf-sieve-3028bis-07.txt
-    1. Improve description in the extension registrations
-    2. Give IANA directions on how to massage existing registrations
-       into the new form
-    3. Added "Changes from RFC 3028" section
-    4. Updated pages numbers in table of contents
-    5. Permit non-UTF-8 octet sequences in comments
-    6. It's an error to use conflicting or repeated tagged and optional
-       arguments
-    7. Update description of script encoding
-
-   Changes from draft-ietf-sieve-3028bis-06.txt
-    1. Tweak wording of how :matches uses character definition
-       of comparator
-    2. Add security consideration regarding "redirect" as a notification
-       method
-    3. fileinto SHOULD reencode; mention IMAP's mUTF-7
-    4. en;ascii-casemap is gone; switch back to i;ascii-casemap
-    5. Permit non-UTF-8 octet sequences in strings
-    6. Sort grammar non-terminals
-    7. Syntactically invalid addresses don't match :localpart or :domain
-    8. The null return-path has empty address parts
-    9. Treat comparator result of "undefined" the same as "no-match"
-    10. Envelope sender on redirects is implementation defined
-    11. Change IANA registration template
-
-   Changes from draft-ietf-sieve-3028bis-05.txt
-    1. The specifics of what names are acceptable for fileinto and
-       the handling of invalid names are both implementation-defined
-    2. Update to draft-newman-i18n-comparator-07.txt
-    3. Adjust the example in 5.7 again
-
-   Changes from draft-ietf-sieve-3028bis-04.txt
-    1. Change "Syntax:" to "Usage:"
-    2. Update ABNF reference to RFC 4234
-    3. Add non-terminals for MATCH-TYPE, COMPARATOR, and ADDRESS-PART
-    4. Strip leading and trailing whitespace in the value being matched
-       by header
-    5. Collations operate on octets, not characters, and for character
-       data that is the UTF-8 encoding of the Unicode characters
-    6. :matches uses character definition of comparator
-
-   Changes from draft-ietf-sieve-3028bis-03.txt
-    1. Remove section 2.4.2.4., MIME Parts, as unreferenced
-    2. Update to draft-newman-i18n-comparator-04.txt
-
-
-
-Guenther & Showalter         Standards Track                   [Page 43]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-    3. Various tweaks to examples and syntax lines
-    4. Define "control structure" as a control command with a block
-       argument, then use it consistently.  Reword description of
-       blocks to match
-    5. Clarify that "header" can never match an absent header and give
-       the preferred way to test for absent or empty
-    6. Invalid header name syntax is not an error _in tests_ (but could
-       be elsewhere)
-    7. Implementation SHOULD consider unknown envelope parts an error
-    8. Remove explicit "omitted" option from 2.7.2p2
-
-   Changes from draft-ietf-sieve-3028bis-02.txt
-    1. Change "ASCII" to "US-ASCII" throughout
-    2. Tweak section 2.7.2 to not require use of UTF-8 internally and
-       to explicitly leave implementation-defined the handling of text
-       that can't be converted to Unicode
-    3. Add reference to RFC 2047
-    4. Clarify that capability strings are case-sensitive
-    5. Clarify that address, envelope, and header return false if no
-       combination of arguments match
-    6. Directly state that code that isn't reached may still be checked
-       for errors
-    7. Invalid header name syntax is not an error
-    8. Remove description of header unfolding that conflicts with
-       [IMAIL]
-    9. Warn that filters may be subvertable if agents interpret messages
-       differently
-    10. Encoded NUL octets SHOULD NOT cause truncation
-
-   Changes from draft-ietf-sieve-3028bis-01.txt
-    1. Remove ban on side effects
-    2. Remove definition of the 'reject' action, as it is being moved
-       to the doc that also defines the 'refuse' action
-    3. Update capability registrations to reference the mailing list
-    4. Add Tim back as an editor
-    5. Refer to the zero-length string ("") as "empty" instead of
-       "null"
-
-   Changes from draft-ietf-sieve-3028bis-00.txt
-    1. More grammar corrections:
-       - permit /***/,
-       - remove ambiguity in finding end of bracket comment,
-       - require valid UTF-8,
-       - express quoting in the grammar
-       - ban bare CR and LF in all locations
-    2. Correct a bunch of whitespace and linewrapping nits
-    3. Update IMAIL and SMTP references to RFC 2822 and RFC 2821
-    4. Require support for en;ascii-casemap comparator as well as the
-
-
-
-Guenther & Showalter         Standards Track                   [Page 44]
-
-Internet-Draft     Sieve: An Email Filtering Language      February 2007
-
-
-       old i;ascii-casemap.  As with the old one, you do not need to
-       use 'require' to use the new comparator
-    5. Update IANA considerations to update the existing registrations
-       to point at this doc instead of 3028
-    6. Scripts SHOULD NOT contain superfluous backslashes
-    7. Update Acknowledgments
-
-   Changes from RFC 3028
-    1. Split references into normative and informative
-    2. Update references to current versions of DSN, IMAP, MDN, and
-       UTF-8 RFCs
-    3. Replace "e-mail" with "email"
-    4. Incorporate RFC 3028 errata
-    5. The "reject" action cancels the implicit keep
-    6. Replace references to ACAP with references to the i18n-comparator
-       draft.  Further work is needed to completely sync with that
-       draft
-    7. Start to update grammar to only permit legal UTF-8 (incomplete)
-       and correct various other errors and typos
-    8. Update IPR broilerplate to RFC 3978/3979
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Guenther & Showalter         Standards Track                   [Page 45]
-