home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / drafts / draft_s_z / draft-showalter-sieve-00.txt < prev    next >
Text File  |  1997-04-18  |  36KB  |  1,065 lines

  1.  
  2.  
  3.  
  4. Network Working Group                                       T. Showalter
  5. Internet Draft                                           Carnegie Mellon
  6. Document: draft-showalter-sieve-00.txt                        April 1997
  7. Expire in six months (10/97)
  8.  
  9.                     SIEVE: A Mail Filtering Language
  10.  
  11. Status of this Memo
  12.  
  13.    This document is an Internet-Draft.  Internet-Drafts are working
  14.    documents of the Internet Engineering Task Force (IETF), its areas,
  15.    and its working groups.  Note that other groups may also distribute
  16.    working documents as Internet-Drafts.
  17.  
  18.    Internet-Drafts are draft documents valid for a maximum of six months
  19.    and may be updated, replaced, or obsoleted by other documents at any
  20.    time.  It is inappropriate to use Internet-Drafts as reference
  21.    material or to cite them other than as ``work in progress.''
  22.  
  23.    To learn the current status of any Internet-Draft, please check the
  24.    ``1id-abstracts.txt'' listing contained in the Internet-Drafts Shadow
  25.    Directories on ftp.is.co.za (Africa), ftp.nordu.net (Europe),
  26.    munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or
  27.    ftp.isi.edu (US West Coast).
  28.  
  29.    The protocol discussed in this document is experimental and subject
  30.    to change.  Persons planning on either implementing or using this
  31.    protocol are STRONGLY URGED to get in touch with the author before
  32.    embarking on such a project.
  33.  
  34. Abstract
  35.  
  36.    This document describes a mail filtering language for filtering
  37.    messages at time of final delivery.  It is designed to be independent
  38.    of protocol, and implementable on either a mail client or mail server
  39.    which uses multiple folders.  It is meant to be extensible, simple,
  40.    and independent of access protocol, mail architecture, and operating
  41.    systems used to implement it.
  42.  
  43.    Mail filtering systems are widely used for a variety of reasons,
  44.    including organization of messages (filtering out mailing list
  45.    messages for separate reading).  They are becoming increasingly
  46.    useful in avoiding unsolicited mail.  Existing languages are not
  47.    consistant across client, server, or operating system, and are
  48.    frequently difficult for users to use.  This language is not tied to
  49.    any particular system or mail architecture and is suitable for
  50.    running on a mail server where users may not be allowed to execute
  51.    arbitrary programs, such as on black box IMAP servers.
  52.  
  53.  
  54.  
  55. Showalter                                                       [Page 1]
  56.  
  57. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  58.  
  59.  
  60.    Table of Contents
  61.  
  62.    This document is content-free.
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111. Showalter                                                       [Page 2]
  112.  
  113. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  114.  
  115.  
  116. 0.   Unfinished
  117.  
  118.    0.1. Known Weaknesses
  119.  
  120.    The following suggestions have been made, and will probably be
  121.    addressed by extensions.
  122.  
  123.    An extension for regular expressions will be written.  While regular
  124.    expressions are of questionable usefulness for users, the programmers
  125.    writing implementations desperately want regular expressions.
  126.  
  127.    Envelope-matching commands are not readily supported by all mail
  128.    systems, and putting them in the draft will result in a system that
  129.    cannot be implemented by a mail architecture that does not adequately
  130.    store envelopes.
  131.  
  132.    "Detailed" addressing or "subaddressing" (i.e., the "fmh" in an
  133.    address "tjs+fmh@andrew.cmu.edu") is not handled, and will be moved
  134.    to an extension for those systems that offer it.
  135.  
  136.    The newline problem is relatively, but not completely, solved.  We'll
  137.    be arguing this until the end of time.
  138.  
  139.    A previous version included a "valid" test.  I have tentatively
  140.    removed it because Randy had noted it was too fuzzy to implement, and
  141.    that's probably true.
  142.  
  143.    The formal grammar is not complete, and needs to be revised to make
  144.    the best use of ABNF, whatever its final state is.
  145.  
  146.    My knowledge of email is not comprehensive, and as a result, there
  147.    might be a better way to express some of the concepts in here.
  148.  
  149.    An "include" command is not included, but has been suggested for an
  150.    extension.
  151.  
  152.    I need to run a spelling checker on this document.
  153.  
  154.    I hate nroff.
  155.  
  156.    0.2. Open Issues
  157.  
  158.    Do "fileinto" commands need to be moved to a separate document?
  159.  
  160. 1.   Introduction
  161.  
  162.    There are a number of reasons to use a filtering system.  Mail
  163.    traffic for most users has been increasing due both to increased
  164.  
  165.  
  166.  
  167. Showalter                                                       [Page 3]
  168.  
  169. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  170.  
  171.  
  172.    usage of e-mail, the emergence of unsolicited email as a form of
  173.    advertising, and increased usage of mailing lists.
  174.  
  175.    This language is offered in order to try and provide a standard
  176.    language that can be used to create filters for e-mail.  It is not
  177.    tied to any particular operating system or mail architecture.  It
  178.    requires the use of [IMAIL]-compliant messages and support of
  179.    multiple folders, but should work with a wide variety of systems that
  180.    support these criteria.
  181.  
  182.    The language is powerful enough to be useful, but limited in power in
  183.    order to allow for a reasonably bulletproof server-side filtering
  184.    system.  The language is not Turing-complete, and provides no way to
  185.    write a loop or a function, nor are variables are provided.  The
  186.    intention is to make it impossible for users to do anything more
  187.    complex than write simple mail filters.
  188.  
  189.    Implementations of the language are expected to take place at time of
  190.    final delivery.  In systems where the MTA does final delivery --
  191.    IMAP4 and traditional UNIX mail, for instance, it is reasonable to
  192.    sort when the MTA deposits mail into the user's mailbox.  If the MTA
  193.    does not do final delivery, or lacks the power to sort into separate
  194.    mailboxes (as is the case under POP3), the MUA must do filtering into
  195.    local filters.
  196.  
  197.    Experience at Carnegie Mellon has shown that if a filtering system is
  198.    made available to users, many will make use of it in order to file
  199.    messages from specific users or mailing lists.  However, many users
  200.    did not make use of the Andrew system's FLAMES filtering language due
  201.    to difficulty in programming it.  Due to this expectation, this
  202.    language has been made simple enough to allow many users to make use
  203.    of it.
  204.  
  205. 1.1. Conventions used in this document
  206.  
  207.    Line breaks have been inserted for readability.
  208.  
  209.    In the sections of this document that discuss the requirements of
  210.    various keywords and operators, the following conventions have been
  211.    adopted.
  212.  
  213.    Each section on an test, action, or conditional has a line labeled
  214.    "Syntax:".  This line describes the arguments each command requires.
  215.    Required arguments are listed inside angle brackets ("<" and ">").
  216.    Optional arguments are listed inside square brackets ("[" and "]").
  217.    The formal grammar for these commands is described in section 10 and
  218.    is the authoritative reference on how to construct these commands.
  219.  
  220.  
  221.  
  222.  
  223. Showalter                                                       [Page 4]
  224.  
  225. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  226.  
  227.  
  228.    The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", "CAN", and
  229.    "MAY" in this document are to be interpreted as defined in
  230.    [KEYWORDS].
  231.  
  232. 1.2. Example mail messages
  233.  
  234.    The following mail messages will be used throughout this document in
  235.    examples.
  236.  
  237.    Message A
  238.    -----------------------------------------------------------
  239.    Date: Tue, 1 Apr 1997 09:06:31 -0800 (PST)
  240.    From: coyote@anvil.dementia.org
  241.    To: roadrunner@birdseed.thekeep.org
  242.    Subject: I have a present for you
  243.  
  244.    Look, I'm sorry about the whole anvil thing, but I can make
  245.    it up to you.  I've got some great birdseed over here at
  246.    my place -- top of the line stuff -- and if you come by,
  247.    I'll have it all wrapped up for you.  I'm really sorry for
  248.    all the problems I've caused for you over the years, and
  249.    I know we can work this out.
  250.    -----------------------------------------------------------
  251.  
  252.    Message B
  253.    -----------------------------------------------------------
  254.    From: youcouldberich!@reply-by-postal-mail
  255.    Sender: b1ff@znic.net
  256.    To: rube@znic.net
  257.    Date:  Mon, 31 Mar 1997 18:26:10 -0800 (PST)
  258.    Subject: $$$ YOU, TOO, CAN BE A MILLIONAIRE! $$$
  259.  
  260.    YOU MAY HAVE ALREADY WON TEN MILLION DOLLARS, BUT I DOUBT
  261.    IT!  SO JUST POST THIS TO SIX HUNDRED NEWSGROUPS!  IT WILL
  262.    GUARANTEE THAT YOU GET AT LEAST FIVE RESPONSES WITH MONEY!
  263.    MONEY! MONEY! COLD HARD CASH!  YOU WILL RECEIVE OVER
  264.    $20,000 IN LESS THAN TWO MONTHS!  AND IT'S LEGAL!!!!!!!!!
  265.    !!!!!!!!!!!!!!!!!!111111111!!!!!!!11111111111!!1  JUST
  266.    SEND $5 IN SMALL, UNMARKED BILLS TO THE ADDRESSES BELOW!
  267.    -----------------------------------------------------------
  268.  
  269. 2.   Design
  270.  
  271. 2.1. Form of the language
  272.  
  273.    This language is made up as a set of commands.  Each command is
  274.    either an action or a conditional.  Each conditional contains a test;
  275.    depending on the results of the test, one set of commands in a
  276.  
  277.  
  278.  
  279. Showalter                                                       [Page 5]
  280.  
  281. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  282.  
  283.  
  284.    control structure is taken.
  285.  
  286. 2.2. Whitespace
  287.  
  288.    Whitespace is used to separate commands.  Whitespace is made up of
  289.    tabs, newlines (which can be CR, LF, or both), and the space
  290.    character.  The amount of whitespace used is not significant.
  291.  
  292. 2.3. Comments
  293.  
  294.    Comments begin with a "#" character that is not contained within a
  295.    string and continue until the next newline.
  296.  
  297.  
  298.    Example:    if size over 100K then # this is a comment
  299.                     toss
  300.                endif
  301.  
  302. 2.4. Numbers
  303.  
  304.                Numbers are normally given as ordinary decimal numbers.
  305.                However, those numbers that have a tendency to be fairly
  306.                large, such as message sizes, such as message sizes, may
  307.                have a "K", "M", or "G" appended to indicate a multiple
  308.                of a base-two number.  To be comparable with the power-
  309.                of-two-based versions of SI units that computers fre-
  310.                quently use, K specifies kilo, or 1,024 (2^10) times the
  311.                value of the number; M specifies mega, or 1,048,576
  312.                (2^20) times the value of the number; and G specifies
  313.                giga, or 1,073,741,824 (2^30) times the value of the
  314.                number.
  315.  
  316.                Numbers are limited to 32 bits by this specification.
  317.  
  318.                [OPEN: If numbers are limited to 32 bits, gigabit-sized
  319.                numbers probably aren't very useful.  Should I remove
  320.                them?]
  321.  
  322. 2.5. Strings
  323.  
  324.                Scripts involve large numbers of strings.  Typically,
  325.                short quoted strings suffice for most uses, but a more
  326.                convenient form is provided for longer strings.
  327.  
  328.                A quoted string starts and ends with a single double
  329.                quote (the " character).  A backslash ("\") inside of a
  330.                quoted string is followed by either another backslash or
  331.                a double quote.  This two-character sequence represents a
  332.  
  333.  
  334.  
  335. Showalter                                                       [Page 6]
  336.  
  337. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  338.  
  339.  
  340.                single backslash or double-quote within the string.  [If
  341.                there are missing words in the paragraph, I had problems
  342.                with nroff; please point it out to me.]
  343.  
  344.                For entering larger amounts of text, such as an email
  345.                message, a longer form is allowed, known as a "user-
  346.                message".  It starts with the keyword "message" and ends
  347.                with the sequence of a newline, a single period, and
  348.                another newline.  Any line that begins with ".." is con-
  349.                sidered to begin with ".".
  350.  
  351.                XXX this example needs formatting work
  352.  
  353.  
  354.    Example:    if any-of (header ("from") contains
  355.                          ("bart" "homer" "smithers" "burns" "lisa"),
  356.                     header ("subject") contains ("URGENT")) then
  357.                     fileinto "INBOX"
  358.                else
  359.                     reply message # multi-line message here:
  360.                You are not one of the people I regularly correspond with.
  361.                I have deleted your message due to the large volume of
  362.                email I regularly receive.  If you feel that you need to
  363.                speak with me directly, and cannot find your answer in my
  364.                web pages, please send mail with the word "URGENT" in the
  365.                subject line.  Thank you for your time.
  366.                , <-- XXX should be a "."  \.
  367.                endif
  368.  
  369.  
  370.    2.5.1. Headers
  371.  
  372.    [OPEN ISSUE: Is this section necessary or useful?]
  373.  
  374.    Headers are a subset of strings.  In the Internet Message Specifica-
  375.    tion [IMAIL], each header line is allowed to have whitespace nearly
  376.    anywhere in the line, including after the field name and before the
  377.    subsequent colon.  Thus, the lines "From: acm@andrew.cmu.edu" is
  378.    equivalent to "From    :    acm@andrew.cmu.edu".  Within a SIEVE
  379.    script, header names are never considered to have spaces.  Only the
  380.    "From" in the above headers is considered to be there.  While a
  381.    header can be listed as "From   " within a header list (say, for the
  382.    "header" command) such usage is absurd.  The following colon is never
  383.    specified; a header "From:", as well as a header ":From", is
  384.    guaranteed never to happen within a valid header.
  385.  
  386. 2.5.2. Addresses
  387.  
  388.  
  389.  
  390.  
  391. Showalter                                                       [Page 7]
  392.  
  393. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  394.  
  395.  
  396.    [OPEN ISSUE: Is this section necessary or useful?]
  397.  
  398.    A number of commands call for email addresses, which are also a sub-
  399.    set of strings.  These addresses must be compliant with [IMAIL].
  400.    Implementations MUST insure the addresses are syntactically valid,
  401.    and need not insure that they are actually deliverable.
  402.  
  403. 2.7. Evaluation
  404.  
  405.    If evaluation of the script fails to file the message into any mail-
  406.    box, as in the following script, the message is filed into INBOX.
  407.    With any of the short messages offered above, the following script
  408.    produces no actions.
  409.  
  410.    Example:    if size over 500K then toss endif
  411.  
  412.    then the "normal" action is taken.  The "normal" action is defined to
  413.    be the action that is taken normally, such as in a situation where
  414.    the user does no filtering.  Under most situations, the normal action
  415.    is to file into the user's main mailbox (such as "INBOX" under IMAP).
  416.  
  417.    Implementations define the specific meanings of actions.  Implementa-
  418.    tions may impose restrictions on the actions taken, such as only
  419.    honoring one "reply", "bounce", or "forward" per message.
  420.  
  421.    Precedence is not important in any of the commands in this base
  422.    specification.  However, as an extension might make it more impor-
  423.    tant, all rules MUST be evaluated in left-to-right order.  Those
  424.    operations that may implement short-circuit evaluation (such as the
  425.    "all-of" and "any-of" operators, which preform logical "and" and "or"
  426.    operations, respectively) SHOULD do so.
  427.  
  428. 3.   Conditionals and Control Structures
  429.  
  430.    In order for a script to do more than one set of actions, control
  431.    structures are needed.
  432.  
  433. 3.1. If
  434.  
  435.    Syntax:     if <test> then <commands>
  436.                [elsif <elsif-test> then <elsif-commands> [elsif ...]]
  437.                [else <else-commands>]
  438.                endif
  439.  
  440.    The "if" control structure is borrowed from any number of programming
  441.    languages.  It is evaluated in the usual way, as follows: if <test>
  442.    is true, then <commands> are evaluated.  If an elsif keyword exists,
  443.    and <next-test> is true, then <elsif-commands> are evaluated.  Any
  444.  
  445.  
  446.  
  447. Showalter                                                       [Page 8]
  448.  
  449. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  450.  
  451.  
  452.    number of elsif cases may be included, and are evaluated serially.
  453.    If <test> is false and the <elsif-test>s are false as well, then the
  454.    <else-commands> are evaluated.  The "if" block is terminated with an
  455.    "endif" keyword, which is required.
  456.  
  457.    In the following example, both Message A and B are dropped.
  458.  
  459.    Example:    if header ("from") contains ("coyote") then
  460.                toss
  461.                elsif header ("subject") contains ("$$$")
  462.                then toss
  463.                else fileinto "INBOX"
  464.                endif
  465.  
  466.    Only one set of commands  in an if ... elsif ... elsif ... else ...
  467.    endif block is executed.
  468.  
  469.    In the script below, when run over message A, forwards the message to
  470.    acm@andrew.cmu.edu; message B, to service@andrew.cmu.edu; any other
  471.    message is forwarded to postman@andrew.cmu.edu.
  472.  
  473.    Example:    if header ("") contains ("") then
  474.                     forward "acm@andrew.cmu.edu";
  475.                elsif header ("Subject") contains ("$$$") then
  476.                     forward "service@andrew.cmu.edu";
  477.                else
  478.                     forward "postman@andrew.cmu.edu";
  479.                endif
  480.  
  481.  
  482. 3.2. Require
  483.  
  484.    Syntax:     require <extension-name>
  485.  
  486.    Require SHOULD be declared in a user script before an extension is
  487.    used.  It instructs the evaluator that the extension named
  488.    extension-name, supplied as a string, MUST be present in order to
  489.    allow further processing.  If the string specifies an extension that
  490.    the evaluating mechanism supports, then processing continues.  Other-
  491.    wise, an error has been encountered, and the script should not be
  492.    evaluated.
  493.  
  494.    Require is intended to demand the use of an extension not present in
  495.    this document.
  496.  
  497.    The following example will fail on any server that does not implement
  498.    the extension known as DWIM.
  499.  
  500.  
  501.  
  502.  
  503. Showalter                                                       [Page 9]
  504.  
  505. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  506.  
  507.  
  508.    Example:    require "dwim"; if header ("subject") contains-nocase
  509.                ("the secret message") then
  510.                     dwim blurdybloop body;
  511.                endif stop
  512.  
  513.  
  514. 4.   Actions This document supplies six actions that may be taken on a
  515.    message: normal, fileinto, forward, bounce, toss, and stop.
  516.  
  517. 4.1. Action bounce
  518.  
  519.    Syntax:     bounce
  520.  
  521.    The "bounce" action resends the message to the sender, wrapping it in
  522.    a "bounce" form, noting that it was rejected by the recipient.  In
  523.    the following script, message A is bounced to the sender.
  524.  
  525.    Example:    if header ("from") contains ("coyote@anvil.dementia.org")
  526.                then
  527.                    bounce "I am not taking mail from you, you killer!"
  528.                endif
  529.  
  530.    4.2.   Action fileinto
  531.  
  532.    Syntax:     fileinto <folder>
  533.  
  534.    [OPEN ISSUE: I could be talked into making fileinto optional for POP3
  535.    server agents that wanted to simply throw mail out and then do user
  536.    filtering on the client.]
  537.  
  538.    The "fileinto" action drops the message into a named folder.  In the
  539.    following script, message A is filed into folder "INBOX.harassment".
  540.  
  541.    Example:    if header ("to") contains
  542.  
  543. 4.3. Action forward
  544.  
  545.    Syntax:     forward <address>
  546.  
  547.    The "forward" action is used to forward the message to another user
  548.    at the supplied address, as a mail forwarding feature does.  The
  549.    "forward" action makes no changes to the message body or headers, and
  550.    only modifies the envelope.
  551.  
  552.    A simple script can be used for forwarding:
  553.  
  554.    Example:    forward "tjs@andrew.cmu.edu"
  555.  
  556.  
  557.  
  558.  
  559. Showalter                                                      [Page 10]
  560.  
  561. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  562.  
  563.  
  564. 4.4. Action normal
  565.  
  566.    Syntax:     normal
  567.  
  568.    The "normal" action is whatever action is taken in lieu of all other
  569.    actions; generally, this simply means to drop the message into the
  570.    user's normal mailbox.  This command provides a way to execute this
  571.    action without naming it explicitly, providing a way to use it
  572.    independent of system.
  573.  
  574.    Syntax:     if size under 1M then normal else toss
  575.  
  576. 4.5. Action reply
  577.  
  578.    Syntax:     reply <message>
  579.  
  580.    The "reply" action is used to generate a form letter reply to the
  581.    original sender.  Message is a string to be sent as a reply message.
  582.    The multi-line <user-message> production described in the Formal
  583.    Grammar section is intended for this purpose.  In the following exam-
  584.    ple, any message over 500K (or 512,000 octets) would be thrown out;
  585.    otherwise, the message would be filed into INBOX.
  586.  
  587.    Example:    if size over 500K reply message
  588.                Your message was unnecessarily large.
  589.                I reject all large messages; you will need to contact me
  590.                directly.
  591.                toss
  592.                endif
  593.  
  594.    OPEN: Specify headers transmitted?
  595.  
  596.    OPEN: Specify way to do vacation?  A previous version of this had a
  597.    -days switch to specify number of days to do a new reply.
  598.  
  599. 4.6. Action stop The "stop" action ends all processing.  If no actions
  600.    have been executed, then the normal action is taken.
  601.  
  602.    In the following script, if the mail is from the address
  603.    "wall@andrew.cmu.edu" it is forwarded to "tjs@xanadu.wv.us"; other-
  604.    wise the mail receives a reply, and is thrown out.
  605.  
  606.    Example:    if (header ("from") matches ("wall@andrew.cmu.edu"))
  607.                     then forward "tjs@xanadu.wv.us"; stop
  608.                endif reply "I'm on vacation and not taking any messages;
  609.                try after Sunday.  I have thrown your message out.
  610.                Please resend it later." ; toss
  611.  
  612.  
  613.  
  614.  
  615. Showalter                                                      [Page 11]
  616.  
  617. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  618.  
  619.  
  620. 4.7. Action toss Toss drops the message.  In the following script, any
  621.    mail from "wall@andrew.cmu.edu" is thrown out.
  622.  
  623.    Example:    if header ("from") contains ("wall@andrew.cmu.edu") then
  624.                toss endif
  625.  
  626. 5.   Tests
  627.  
  628.    Tests are used in conditionals to decide which part(s) of the condi-
  629.    tional to execute.
  630.  
  631. 5.1. all-of
  632.  
  633.    Syntax:     all-of ( <test> [,] <test> [,] ... <test> )
  634.  
  635.    The all-of test preforms a logical AND on the tests supplied to it.
  636.  
  637.    The comma in between tests is optional.
  638.  
  639.  
  640.    Example:    all-of (false false)  =>   false
  641.                all-of (false true)   =>   false
  642.                all-of (true, true)   =>   true
  643.  
  644.  
  645.    5.2. any-of
  646.  
  647.    Syntax:     all-of ( <test> [,] <test> [,] ... <test> )
  648.  
  649.    The any-of test preforms a logical OR on the tests supplied to it.
  650.  
  651.    The comma in between tests is optional.
  652.  
  653.  
  654.    Example:    all-of (false false)  =>   false
  655.                all-of (false true)   =>   true
  656.                all-of (true, true)   =>   true
  657.  
  658.  
  659.    5.3. exists
  660.  
  661.    Syntax:     exists <header-name-list>
  662.  
  663.  
  664.    The "exists" test is true if the headers listed in the <header-name-
  665.    list> argument exist within the message.  All of the headers must
  666.    exist or the test is false.
  667.  
  668.  
  669.  
  670.  
  671. Showalter                                                      [Page 12]
  672.  
  673. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  674.  
  675.  
  676.    Example:    if not exists ("From" "Date" "Subject" "To" "Message-ID")
  677.                then
  678.                     toss
  679.                endif
  680.  
  681.  
  682. 5.4. false
  683.  
  684.    Syntax:     false
  685.  
  686.  
  687.    The "false" test always evaluates to false.
  688.  
  689. 5.5. header
  690.  
  691.    Syntax:     header <header-name-list>
  692.                <"contains"/"is"/"matches"/"contains-nocase" / "is-
  693.                nocase"/"matches-nocase"> <key-list>
  694.  
  695.    The "header" test evaluates to true if the header name matches key.
  696.    How the match is done is described by the second argument.  The basic
  697.    matching forms are case sensitive.  Each matching form has a
  698.    corresponding form ending in "-nocase"; these are not case sensitive.
  699.  
  700.    All matchings on header field names MUST be done in a case insensi-
  701.    tive manner.
  702.  
  703.    The "is" argument demands that one of the fields of the headers
  704.    listed in header-name-list can be found in the key-list.  It requires
  705.    an absolute match.  It is true if there are repeated arguments in the
  706.    header-name-list or the key-list.
  707.  
  708.    The "contains" argument demands that one of the values of the headers
  709.    named in header-name-list partially matches one of the values in
  710.    key-list.  It is true if there are repeated arguments in the header-
  711.    name-list or the key-list.  The string "" is contained in any header
  712.    that exists.
  713.  
  714.    The "matches" argument demands that one of the fields of the headers
  715.    listed in header-name-list matches a "glob" pattern described by one
  716.    of the members of key-list.  A glob pattern is a UNIX-style filename
  717.    glob, which has the following special characters:
  718.  
  719.            *     Match zero or more characters
  720.            ?     Match any single character
  721.                 Escape next character
  722.  
  723.    The string "" matches all strings that exist.  That is, if a message
  724.  
  725.  
  726.  
  727. Showalter                                                      [Page 13]
  728.  
  729. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  730.  
  731.  
  732.    contains the line [XXX formatted improperly]
  733.  
  734.            X-Blurdybloop: death to the heathens
  735.  
  736.    the tests on that header evaluate as follows:
  737.  
  738.            header ("X-Blurdyblop") is ("")         => false
  739.            header ("X-Blurdyblop") matches ("")    => true
  740.            header ("X-Blurdyblop") contains ("")   => true
  741.  
  742. 5.6. not
  743.  
  744.    Syntax:
  745.         not <test>
  746.  
  747.    The "not" test takes some other test, and returns the opposite
  748.    result.
  749.  
  750. 5.7. size
  751.  
  752.    Syntax:
  753.         size <"over" / "under"> <limit [quantifier]>
  754.  
  755.    The "size" test deals with the size of a message.  The test is true
  756.    only if the second argument is "over" and the size of the message is
  757.    strictly greater than the number of octets specified as limit.  If
  758.    the second argument is "under", then the test is true only if the
  759.    message size is strictly less than the number of octets specified as
  760.    limit.  In either case, if the message size is exactly the limit, the
  761.    test is false.
  762.  
  763.    The size of a message is defined to be the number of octets from the
  764.    initial header until the last character in the message body.
  765.  
  766. 5.8. support
  767.  
  768.    Syntax:
  769.         support <extension-name>
  770.  
  771.  
  772.    The "support" test evaluates to true if the extension named by
  773.    <extension-name> is supported.  In the following script, all mail is
  774.    filed into INBOX unless the "black-magic" extension is supported.
  775.    Otherwise, behavior is defined by the black-magic extension.
  776.  
  777.  
  778.    Syntax:
  779.         if support "black-magic" then
  780.  
  781.  
  782.  
  783. Showalter                                                      [Page 14]
  784.  
  785. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  786.  
  787.  
  788.              black-magic ("kgb@andrew.cmu.edu")
  789.         endif
  790.  
  791.  
  792. 5.9. true
  793.  
  794.    Syntax:
  795.         true
  796.  
  797.    The "true" test is always true.
  798.  
  799. 6.   Errors in Processing a Script
  800.  
  801.    In any sort of programming language, even a very simple one, errors
  802.    are inevitable.  In this case, users are expected to make errors --
  803.    even if the actual script is machine-generated, mailbox rights might
  804.    change to disallow users from writing to a mailbox, a mailbox may no
  805.    longer exist, or a variety of other problems.  It is imperative that
  806.    mail be allowed to get through in any case.
  807.  
  808.    If an error is found in a script, an implementation MUST make an
  809.    attempt to resolve the condition. Implementations SHOULD check a
  810.    script before it is run in order to insure that it is valid.  Imple-
  811.    mentations SHOULD NOT try and recover from a script with errors, and
  812.    should file mail into the user's primary mailbox.
  813.  
  814.    Users MUST be notified of errors in processing a script.  The method
  815.    by which users are notified is implementation defined, but a mail
  816.    message describing the error is suggested if a preferable alternative
  817.    cannot be found
  818.  
  819.    Implementations that allow for the script to be checked for syntax
  820.    errors in advance of mail receipt (i.e., client-based filtering, or
  821.    server-based filtering with a submission protocol aware of this
  822.    language) SHOULD notify the user of the error and refuse to accept a
  823.    syntactically invalid script, or one that makes use of extensions
  824.    that the server does not report.
  825.  
  826.    Implementations that allow server-based filtering (i.e., as part of
  827.    an IMAP server) MUST allow mail to be filed normally (i.e., for IMAP,
  828.    into the user's INBOX) in case of a syntax error in the script, and
  829.    MUST notify the user of an error in some form (such as sending the
  830.    user a mail message notifying them of the error).  Implementations
  831.    SHOULD avoid over-sending error messages to the user's mailbox.
  832.  
  833.    Implementations are REQUIRED to notify users of errors in filtering
  834.    scripts.  If there are errors in the script being used, mail SHOULD
  835.    be filed into INBOX.  Implementations MUST NOT discard mail.
  836.  
  837.  
  838.  
  839. Showalter                                                      [Page 15]
  840.  
  841. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  842.  
  843.  
  844. 7.   Extensibility
  845.  
  846.    New control structures, actions, and tests can be added to the
  847.    language.  Sites must make these features known to their users; an
  848.    extension negotiation mechanism is not defined by this document.
  849.  
  850.    For the formal grammar, an extension SHOULD define one of the symbols
  851.    beginning with "extension-".
  852.  
  853.    Any extensions to this language MUST define a unique string that
  854.    describes that extension.  Such strings SHOULD include a version
  855.    number.  The purpose of such a string is for the "require" and "sup-
  856.    port" conditionals, which mandates that script requires the use of
  857.    that extension.  Additionally, in a situation where there is a sub-
  858.    mission protocol and an extension advertisement mechanism, so that
  859.    scripts submitted can be checked against the mail server for valid
  860.    extensions.
  861.  
  862.    7.1. Capability Mechanism
  863.  
  864.    [A brief description of the capability string will be included here.]
  865.  
  866.    7.2. Registry
  867.  
  868.    [A registration mechanism will be included here.]
  869.  
  870.    7.3. Capability Transport
  871.  
  872.    [A brief description of what is required for a capability transport
  873.    will be defined here.  Transports will be defined in separate docu-
  874.    ments.]
  875.  
  876. 8.   Transmission
  877.  
  878.    This document does not define a method for accessing stored scripts
  879.    at run-time or as they are written, nor does it define a character
  880.    set encoding for scripts.
  881.  
  882.    If the method of handing a script off to the server allows for MIME-
  883.    typing of data as described in [MIME] and the data is encoded in
  884.    UTF-8 as described in [UTF-8], the MIME type for a SIEVE script is
  885.    XXX/XXX.
  886.  
  887.    Implementations SHOULD check a script before it is run in order to
  888.    insure that it is valid.  Implementations SHOULD NOT try and recover
  889.    from a script with errors, and should file mail into the user's pri-
  890.    mary mailbox.
  891.  
  892.  
  893.  
  894.  
  895. Showalter                                                      [Page 16]
  896.  
  897. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  898.  
  899.  
  900. 9.   Acknowledgments
  901.  
  902. 10.  Formal Grammar
  903.  
  904.    The grammar used in this section is the same as the ABNF described in
  905.    [ABNF] with one exception: the delimiter used with "#" is any amount
  906.    of whitespace (that is, CR, LF, spaces, and tabs), as described by
  907.    the "WSP" terminal, followed by a single comma, and additional whi-
  908.    tespace.  Two commas without something in between them is a protocol
  909.    error, and is prohibited.
  910.  
  911.    In the case of alternative or optional rules in which a later rule
  912.    overlaps an earlier rule, the rule which is listed earlier MUST take
  913.    priority.
  914.  
  915.    action = toss / fileinto / forward / bounce / reply / stop /
  916.        extension-action
  917.  
  918.    address = string
  919.            ;; any legal IMAIL address
  920.  
  921.    any-of = "any-of" WSP "(" [WSP] #(condition) [WSP] ")"
  922.  
  923.    all-of = "all-of" WSP "(" [WSP] #(condition) [WSP] ")"
  924.  
  925.    big-number = number [ UNIT ]
  926.  
  927.    bounce = "bounce" WSP string
  928.            ;; string is a text message to be sent with the bounce as the
  929.            ;; reason
  930.  
  931.    control-structure = if / extension-control-structure
  932.  
  933.    command = action [WSP] ";" [WSP] / control-structure
  934.  
  935.    commands = #(command)
  936.  
  937.    comment = "#" *CHAR newline
  938.  
  939.    fileinto = "fileinto" WSP string
  940.  
  941.    forward = "forward" WSP address
  942.  
  943.    if = "if" WSP test WSP "then" WSP commands WSP #("elsif" WSP
  944.        test WSP "then" WSP commands) [ "else" WSP commands WSP ]
  945.        "endif"
  946.            ;; if <cond> then <commands>
  947.            ;; [elsif <cond> then <commands> [elsif ...]]
  948.  
  949.  
  950.  
  951. Showalter                                                      [Page 17]
  952.  
  953. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  954.  
  955.  
  956.            ;; [else <commands>] endif
  957.  
  958.    header = "header" WSP string-list WSP match-keyword WSP string-list
  959.  
  960.    match-keyword = "contains" / "matches" / "is" / "contains-nocase" /
  961.        "contains-nocase" / "is-nocase"
  962.  
  963.    newline = CRLF / CR / LF
  964.            ;; A CRLF is ALWAYS one newline.
  965.  
  966.    number = 1*DIGIT
  967.  
  968.    or = condition WSP "or" WSP condition
  969.  
  970.    quoted-string = "
  971.            ;;
  972.            ;; \ inside a string maps to    ;; Note that newlines and other weird characters
  973.            ;; are all strings.
  974.  
  975.    size = "size" WSP ( "over" / "under" ) WSP big-number
  976.  
  977.    stop = "stop"
  978.  
  979.    string = quoted-string / user-message
  980.  
  981.    string-list = "(" [WSP] #(string) [WSP] ")"
  982.  
  983.    test = [WSP] any-of / all-of / exists / false / header /
  984.        not / size / extension-test [WSP]
  985.  
  986.    UNIT = "K" / "M" / "G"
  987.            ;; kilobytes, megabytes, or gigabytes
  988.  
  989.    user-message = "message" [WSP] newline "." newline
  990.            ;; note when used,
  991.            ;; a CR that is not followed by an LF becomes a CRLF;
  992.            ;; an LF that is not followed by a CR becomes a CRLF.
  993.            ;; a leading .. on a line is mapped to .
  994.  
  995.    WSP = " " / CR / LF / tab
  996.            ;; just whitespace
  997.  
  998.  
  999. 10.  Security Considerations Users must get their mail.  It is impera-
  1000.    tive that whatever method implementations use to store the user-
  1001.    defined filtering scripts be reasonably secure.
  1002.  
  1003.    It is equally important that implementations sanity-check the user's
  1004.  
  1005.  
  1006.  
  1007. Showalter                                                      [Page 18]
  1008.  
  1009. draft-showalter-sieve-00.txt     SIEVE                        April 1997
  1010.  
  1011.  
  1012.    scripts, and not allow users to create on-demand mailbombs.  For
  1013.    instance, an implementation that allows a user to bounce, forward, or
  1014.    reply multiple times to a single message might also allow a user to
  1015.    create a mailbomb triggered by mail from a specific user.
  1016.  
  1017. 11.  Author's Address
  1018.  
  1019.    Tim Showalter
  1020.    Carnegie Mellon University
  1021.    5000 Forbes Avenue
  1022.    Pittsburgh, PA 15213
  1023.  
  1024.    E-Mail: tjs@andrew.cmu.edu
  1025.  
  1026.    Appendix A.   References
  1027.  
  1028.    [ABNF] Crocker, D.,  "Augmented BNF for Syntax Specifications: ABNF",
  1029.    Internet Mail Consortium, Work in Progress.
  1030.  
  1031.    [KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate
  1032.    Requirement Levels", RFC 2119, Harvard University, March 1997.
  1033.  
  1034.    [IMAP] Crispin, M., "Internet Mail Access Protocol - version 4rev1",
  1035.    RFC 2060, University of Washington, December 1996.
  1036.  
  1037.    [IMAIL] Crocker, D., "Standard for the Format of ARPA Internet Text
  1038.    Messages", STD 11, RFC 822, University of Delaware, August 1982.
  1039.  
  1040.    [SMTP] Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC 821,
  1041.    USC/Information Sciences Institute, August 1982.
  1042.  
  1043.    [UTF-8] Yergeau, F. "UTF-8, a transformation format of Unicode and
  1044.    ISO 10646", RFC 2044, Alis Technologies, October 1996.
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063. Showalter                                                      [Page 19]
  1064.  
  1065.