rfc3028.txt (73582B)
1 2 3 4 5 6 7 Network Working Group T. Showalter 8 Request for Comments: 3028 Mirapoint, Inc. 9 Category: Standards Track January 2001 10 11 12 Sieve: A Mail Filtering Language 13 14 Status of this Memo 15 16 This document specifies an Internet standards track protocol for the 17 Internet community, and requests discussion and suggestions for 18 improvements. Please refer to the current edition of the "Internet 19 Official Protocol Standards" (STD 1) for the standardization state 20 and status of this protocol. Distribution of this memo is unlimited. 21 22 Copyright Notice 23 24 Copyright (C) The Internet Society (2001). All Rights Reserved. 25 26 Abstract 27 28 This document describes a language for filtering e-mail messages at 29 time of final delivery. It is designed to be implementable on either 30 a mail client or mail server. It is meant to be extensible, simple, 31 and independent of access protocol, mail architecture, and operating 32 system. It is suitable for running on a mail server where users may 33 not be allowed to execute arbitrary programs, such as on black box 34 Internet Message Access Protocol (IMAP) servers, as it has no 35 variables, loops, or ability to shell out to external programs. 36 37 Table of Contents 38 39 1. Introduction ........................................... 3 40 1.1. Conventions Used in This Document ..................... 4 41 1.2. Example mail messages ................................. 4 42 2. Design ................................................. 5 43 2.1. Form of the Language .................................. 5 44 2.2. Whitespace ............................................ 5 45 2.3. Comments .............................................. 6 46 2.4. Literal Data .......................................... 6 47 2.4.1. Numbers ............................................... 6 48 2.4.2. Strings ............................................... 7 49 2.4.2.1. String Lists .......................................... 7 50 2.4.2.2. Headers ............................................... 8 51 2.4.2.3. Addresses ............................................. 8 52 2.4.2.4. MIME Parts ............................................ 9 53 2.5. Tests ................................................. 9 54 2.5.1. Test Lists ............................................ 9 55 56 57 58 Showalter Standards Track [Page 1] 59 60 RFC 3028 Sieve: A Mail Filtering Language January 2001 61 62 63 2.6. Arguments ............................................. 9 64 2.6.1. Positional Arguments .................................. 9 65 2.6.2. Tagged Arguments ...................................... 10 66 2.6.3. Optional Arguments .................................... 10 67 2.6.4. Types of Arguments .................................... 10 68 2.7. String Comparison ..................................... 11 69 2.7.1. Match Type ............................................ 11 70 2.7.2. Comparisons Across Character Sets ..................... 12 71 2.7.3. Comparators ........................................... 12 72 2.7.4. Comparisons Against Addresses ......................... 13 73 2.8. Blocks ................................................ 14 74 2.9. Commands .............................................. 14 75 2.10. Evaluation ............................................ 15 76 2.10.1. Action Interaction .................................... 15 77 2.10.2. Implicit Keep ......................................... 15 78 2.10.3. Message Uniqueness in a Mailbox ....................... 15 79 2.10.4. Limits on Numbers of Actions .......................... 16 80 2.10.5. Extensions and Optional Features ...................... 16 81 2.10.6. Errors ................................................ 17 82 2.10.7. Limits on Execution ................................... 17 83 3. Control Commands ....................................... 17 84 3.1. Control Structure If .................................. 18 85 3.2. Control Structure Require ............................. 19 86 3.3. Control Structure Stop ................................ 19 87 4. Action Commands ........................................ 19 88 4.1. Action reject ......................................... 20 89 4.2. Action fileinto ....................................... 20 90 4.3. Action redirect ....................................... 21 91 4.4. Action keep ........................................... 21 92 4.5. Action discard ........................................ 22 93 5. Test Commands .......................................... 22 94 5.1. Test address .......................................... 23 95 5.2. Test allof ............................................ 23 96 5.3. Test anyof ............................................ 24 97 5.4. Test envelope ......................................... 24 98 5.5. Test exists ........................................... 25 99 5.6. Test false ............................................ 25 100 5.7. Test header ........................................... 25 101 5.8. Test not .............................................. 26 102 5.9. Test size ............................................. 26 103 5.10. Test true ............................................. 26 104 6. Extensibility .......................................... 26 105 6.1. Capability String ..................................... 27 106 6.2. IANA Considerations ................................... 28 107 6.2.1. Template for Capability Registrations ................. 28 108 6.2.2. Initial Capability Registrations ...................... 28 109 6.3. Capability Transport .................................. 29 110 7. Transmission ........................................... 29 111 112 113 114 Showalter Standards Track [Page 2] 115 116 RFC 3028 Sieve: A Mail Filtering Language January 2001 117 118 119 8. Parsing ................................................ 30 120 8.1. Lexical Tokens ........................................ 30 121 8.2. Grammar ............................................... 31 122 9. Extended Example ....................................... 32 123 10. Security Considerations ................................ 34 124 11. Acknowledgments ........................................ 34 125 12. Author's Address ....................................... 34 126 13. References ............................................. 34 127 14. Full Copyright Statement ............................... 36 128 129 1. Introduction 130 131 This memo documents a language that can be used to create filters for 132 electronic mail. It is not tied to any particular operating system or 133 mail architecture. It requires the use of [IMAIL]-compliant 134 messages, but should otherwise generalize to many systems. 135 136 The language is powerful enough to be useful but limited in order to 137 allow for a safe server-side filtering system. The intention is to 138 make it impossible for users to do anything more complex (and 139 dangerous) than write simple mail filters, along with facilitating 140 the use of GUIs for filter creation and manipulation. The language is 141 not Turing-complete: it provides no way to write a loop or a function 142 and variables are not provided. 143 144 Scripts written in Sieve are executed during final delivery, when the 145 message is moved to the user-accessible mailbox. In systems where 146 the MTA does final delivery, such as traditional Unix mail, it is 147 reasonable to sort when the MTA deposits mail into the user's 148 mailbox. 149 150 There are a number of reasons to use a filtering system. Mail 151 traffic for most users has been increasing due to increased usage of 152 e-mail, the emergence of unsolicited email as a form of advertising, 153 and increased usage of mailing lists. 154 155 Experience at Carnegie Mellon has shown that if a filtering system is 156 made available to users, many will make use of it in order to file 157 messages from specific users or mailing lists. However, many others 158 did not make use of the Andrew system's FLAMES filtering language 159 [FLAMES] due to difficulty in setting it up. 160 161 Because of the expectation that users will make use of filtering if 162 it is offered and easy to use, this language has been made simple 163 enough to allow many users to make use of it, but rich enough that it 164 can be used productively. However, it is expected that GUI-based 165 editors will be the preferred way of editing filters for a large 166 number of users. 167 168 169 170 Showalter Standards Track [Page 3] 171 172 RFC 3028 Sieve: A Mail Filtering Language January 2001 173 174 175 1.1. Conventions Used in This Document 176 177 In the sections of this document that discuss the requirements of 178 various keywords and operators, the following conventions have been 179 adopted. 180 181 The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and 182 "MAY" in this document are to be interpreted as defined in 183 [KEYWORDS]. 184 185 Each section on a command (test, action, or control structure) has a 186 line labeled "Syntax:". This line describes the syntax of the 187 command, including its name and its arguments. Required arguments 188 are listed inside angle brackets ("<" and ">"). Optional arguments 189 are listed inside square brackets ("[" and "]"). Each argument is 190 followed by its type, so "<key: string>" represents an argument 191 called "key" that is a string. Literal strings are represented with 192 double-quoted strings. Alternatives are separated with slashes, and 193 parenthesis are used for grouping, similar to [ABNF]. 194 195 In the "Syntax" line, there are three special pieces of syntax that 196 are frequently repeated, MATCH-TYPE, COMPARATOR, and ADDRESS-PART. 197 These are discussed in sections 2.7.1, 2.7.3, and 2.7.4, 198 respectively. 199 200 The formal grammar for these commands in section 10 and is the 201 authoritative reference on how to construct commands, but the formal 202 grammar does not specify the order, semantics, number or types of 203 arguments to commands, nor the legal command names. The intent is to 204 allow for extension without changing the grammar. 205 206 1.2. Example mail messages 207 208 The following mail messages will be used throughout this document in 209 examples. 210 211 Message A 212 ----------------------------------------------------------- 213 Date: Tue, 1 Apr 1997 09:06:31 -0800 (PST) 214 From: coyote@desert.example.org 215 To: roadrunner@acme.example.com 216 Subject: I have a present for you 217 218 Look, I'm sorry about the whole anvil thing, and I really 219 didn't mean to try and drop it on you from the top of the 220 cliff. I want to try to make it up to you. I've got some 221 great birdseed over here at my place--top of the line 222 223 224 225 226 Showalter Standards Track [Page 4] 227 228 RFC 3028 Sieve: A Mail Filtering Language January 2001 229 230 231 stuff--and if you come by, I'll have it all wrapped up 232 for you. I'm really sorry for all the problems I've caused 233 for you over the years, but I know we can work this out. 234 -- 235 Wile E. Coyote "Super Genius" coyote@desert.example.org 236 ----------------------------------------------------------- 237 238 Message B 239 ----------------------------------------------------------- 240 From: youcouldberich!@reply-by-postal-mail.invalid 241 Sender: b1ff@de.res.example.com 242 To: rube@landru.example.edu 243 Date: Mon, 31 Mar 1997 18:26:10 -0800 244 Subject: $$$ YOU, TOO, CAN BE A MILLIONAIRE! $$$ 245 246 YOU MAY HAVE ALREADY WON TEN MILLION DOLLARS, BUT I DOUBT 247 IT! SO JUST POST THIS TO SIX HUNDRED NEWSGROUPS! IT WILL 248 GUARANTEE THAT YOU GET AT LEAST FIVE RESPONSES WITH MONEY! 249 MONEY! MONEY! COLD HARD CASH! YOU WILL RECEIVE OVER 250 $20,000 IN LESS THAN TWO MONTHS! AND IT'S LEGAL!!!!!!!!! 251 !!!!!!!!!!!!!!!!!!111111111!!!!!!!11111111111!!1 JUST 252 SEND $5 IN SMALL, UNMARKED BILLS TO THE ADDRESSES BELOW! 253 ----------------------------------------------------------- 254 255 2. Design 256 257 2.1. Form of the Language 258 259 The language consists of a set of commands. Each command consists of 260 a set of tokens delimited by whitespace. The command identifier is 261 the first token and it is followed by zero or more argument tokens. 262 Arguments may be literal data, tags, blocks of commands, or test 263 commands. 264 265 The language is represented in UTF-8, as specified in [UTF-8]. 266 267 Tokens in the ASCII range are considered case-insensitive. 268 269 2.2. Whitespace 270 271 Whitespace is used to separate tokens. Whitespace is made up of 272 tabs, newlines (CRLF, never just CR or LF), and the space character. 273 The amount of whitespace used is not significant. 274 275 276 277 278 279 280 281 282 Showalter Standards Track [Page 5] 283 284 RFC 3028 Sieve: A Mail Filtering Language January 2001 285 286 287 2.3. Comments 288 289 Two types of comments are offered. Comments are semantically 290 equivalent to whitespace and can be used anyplace that whitespace is 291 (with one exception in multi-line strings, as described in the 292 grammar). 293 294 Hash comments begin with a "#" character that is not contained within 295 a string and continue until the next CRLF. 296 297 Example: if size :over 100K { # this is a comment 298 discard; 299 } 300 301 Bracketed comments begin with the token "/*" and end with "*/" outside 302 of a string. Bracketed comments may span multiple lines. Bracketed 303 comments do not nest. 304 305 Example: if size :over 100K { /* this is a comment 306 this is still a comment */ discard /* this is a comment 307 */ ; 308 } 309 310 2.4. Literal Data 311 312 Literal data means data that is not executed, merely evaluated "as 313 is", to be used as arguments to commands. Literal data is limited to 314 numbers and strings. 315 316 2.4.1. Numbers 317 318 Numbers are given as ordinary decimal numbers. However, those 319 numbers that have a tendency to be fairly large, such as message 320 sizes, MAY have a "K", "M", or "G" appended to indicate a multiple of 321 a power of two. To be comparable with the power-of-two-based 322 versions of SI units that computers frequently use, K specifies 323 kibi-, or 1,024 (2^10) times the value of the number; M specifies 324 mebi-, or 1,048,576 (2^20) times the value of the number; and G 325 specifies tebi-, or 1,073,741,824 (2^30) times the value of the 326 number [BINARY-SI]. 327 328 Implementations MUST provide 31 bits of magnitude in numbers, but MAY 329 provide more. 330 331 Only positive integers are permitted by this specification. 332 333 334 335 336 337 338 Showalter Standards Track [Page 6] 339 340 RFC 3028 Sieve: A Mail Filtering Language January 2001 341 342 343 2.4.2. Strings 344 345 Scripts involve large numbers of strings as they are used for pattern 346 matching, addresses, textual bodies, etc. Typically, short quoted 347 strings suffice for most uses, but a more convenient form is provided 348 for longer strings such as bodies of messages. 349 350 A quoted string starts and ends with a single double quote (the <"> 351 character, ASCII 34). A backslash ("\", ASCII 92) inside of a quoted 352 string is followed by either another backslash or a double quote. 353 This two-character sequence represents a single backslash or double- 354 quote within the string, respectively. 355 356 No other characters should be escaped with a single backslash. 357 358 An undefined escape sequence (such as "\a" in a context where "a" has 359 no special meaning) is interpreted as if there were no backslash (in 360 this case, "\a" is just "a"). 361 362 Non-printing characters such as tabs, CR and LF, and control 363 characters are permitted in quoted strings. Quoted strings MAY span 364 multiple lines. NUL (ASCII 0) is not allowed in strings. 365 366 For entering larger amounts of text, such as an email message, a 367 multi-line form is allowed. It starts with the keyword "text:", 368 followed by a CRLF, and ends with the sequence of a CRLF, a single 369 period, and another CRLF. In order to allow the message to contain 370 lines with a single-dot, lines are dot-stuffed. That is, when 371 composing a message body, an extra `.' is added before each line 372 which begins with a `.'. When the server interprets the script, 373 these extra dots are removed. Note that a line that begins with a 374 dot followed by a non-dot character is not interpreted dot-stuffed; 375 that is, ".foo" is interpreted as ".foo". However, because this is 376 potentially ambiguous, scripts SHOULD be properly dot-stuffed so such 377 lines do not appear. 378 379 Note that a hashed comment or whitespace may occur in between the 380 "text:" and the CRLF, but not within the string itself. Bracketed 381 comments are not allowed here. 382 383 2.4.2.1. String Lists 384 385 When matching patterns, it is frequently convenient to match against 386 groups of strings instead of single strings. For this reason, a list 387 of strings is allowed in many tests, implying that if the test is 388 true using any one of the strings, then the test is true. 389 Implementations are encouraged to use short-circuit evaluation in 390 these cases. 391 392 393 394 Showalter Standards Track [Page 7] 395 396 RFC 3028 Sieve: A Mail Filtering Language January 2001 397 398 399 For instance, the test `header :contains ["To", "Cc"] 400 ["me@example.com", "me00@landru.example.edu"]' is true if either the 401 To header or Cc header of the input message contains either of the 402 e-mail addresses "me@example.com" or "me00@landru.example.edu". 403 404 Conversely, in any case where a list of strings is appropriate, a 405 single string is allowed without being a member of a list: it is 406 equivalent to a list with a single member. This means that the test 407 `exists "To"' is equivalent to the test `exists ["To"]'. 408 409 2.4.2.2. Headers 410 411 Headers are a subset of strings. In the Internet Message 412 Specification [IMAIL] [RFC1123], each header line is allowed to have 413 whitespace nearly anywhere in the line, including after the field 414 name and before the subsequent colon. Extra spaces between the 415 header name and the ":" in a header field are ignored. 416 417 A header name never contains a colon. The "From" header refers to a 418 line beginning "From:" (or "From :", etc.). No header will match 419 the string "From:" due to the trailing colon. 420 421 Folding of long header lines (as described in [IMAIL] 3.4.8) is 422 removed prior to interpretation of the data. The folding syntax (the 423 CRLF that ends a line plus any leading whitespace at the beginning of 424 the next line that indicates folding) are interpreted as if they were 425 a single space. 426 427 2.4.2.3. Addresses 428 429 A number of commands call for email addresses, which are also a 430 subset of strings. When these addresses are used in outbound 431 contexts, addresses must be compliant with [IMAIL], but are further 432 constrained. Using the symbols defined in [IMAIL], section 6.1, the 433 syntax of an address is: 434 435 sieve-address = addr-spec ; simple address 436 / phrase "<" addr-spec ">" ; name & addr-spec 437 438 That is, routes and group syntax are not permitted. If multiple 439 addresses are required, use a string list. Named groups are not used 440 here. 441 442 Implementations MUST ensure that the addresses are syntactically 443 valid, but need not ensure that they actually identify an email 444 recipient. 445 446 447 448 449 450 Showalter Standards Track [Page 8] 451 452 RFC 3028 Sieve: A Mail Filtering Language January 2001 453 454 455 2.4.2.4. MIME Parts 456 457 In a few places, [MIME] body parts are represented as strings. These 458 parts include MIME headers and the body. This provides a way of 459 embedding typed data within a Sieve script so that, among other 460 things, character sets other than UTF-8 can be used for output 461 messages. 462 463 2.5. Tests 464 465 Tests are given as arguments to commands in order to control their 466 actions. In this document, tests are given to if/elsif/else to 467 decide which block of code is run. 468 469 Tests MUST NOT have side effects. That is, a test cannot affect the 470 state of the filter or message. No tests in this specification have 471 side effects, and side effects are forbidden in extension tests as 472 well. 473 474 The rationale for this is that tests with side effects impair 475 readability and maintainability and are difficult to represent in a 476 graphic interface for generating scripts. Side effects are confined 477 to actions where they are clearer. 478 479 2.5.1. Test Lists 480 481 Some tests ("allof" and "anyof", which implement logical "and" and 482 logical "or", respectively) may require more than a single test as an 483 argument. The test-list syntax element provides a way of grouping 484 tests. 485 486 Example: if anyof (not exists ["From", "Date"], 487 header :contains "from" "fool@example.edu") { 488 discard; 489 } 490 491 2.6. Arguments 492 493 In order to specify what to do, most commands take arguments. There 494 are three types of arguments: positional, tagged, and optional. 495 496 2.6.1. Positional Arguments 497 498 Positional arguments are given to a command which discerns their 499 meaning based on their order. When a command takes positional 500 arguments, all positional arguments must be supplied and must be in 501 the order prescribed. 502 503 504 505 506 Showalter Standards Track [Page 9] 507 508 RFC 3028 Sieve: A Mail Filtering Language January 2001 509 510 511 2.6.2. Tagged Arguments 512 513 This document provides for tagged arguments in the style of 514 CommonLISP. These are also similar to flags given to commands in 515 most command-line systems. 516 517 A tagged argument is an argument for a command that begins with ":" 518 followed by a tag naming the argument, such as ":contains". This 519 argument means that zero or more of the next tokens have some 520 particular meaning depending on the argument. These next tokens may 521 be numbers or strings but they are never blocks. 522 523 Tagged arguments are similar to positional arguments, except that 524 instead of the meaning being derived from the command, it is derived 525 from the tag. 526 527 Tagged arguments must appear before positional arguments, but they 528 may appear in any order with other tagged arguments. For simplicity 529 of the specification, this is not expressed in the syntax definitions 530 with commands, but they still may be reordered arbitrarily provided 531 they appear before positional arguments. Tagged arguments may be 532 mixed with optional arguments. 533 534 To simplify this specification, tagged arguments SHOULD NOT take 535 tagged arguments as arguments. 536 537 2.6.3. Optional Arguments 538 539 Optional arguments are exactly like tagged arguments except that they 540 may be left out, in which case a default value is implied. Because 541 optional arguments tend to result in shorter scripts, they have been 542 used far more than tagged arguments. 543 544 One particularly noteworthy case is the ":comparator" argument, which 545 allows the user to specify which [ACAP] comparator will be used to 546 compare two strings, since different languages may impose different 547 orderings on UTF-8 [UTF-8] characters. 548 549 2.6.4. Types of Arguments 550 551 Abstractly, arguments may be literal data, tests, or blocks of 552 commands. In this way, an "if" control structure is merely a command 553 that happens to take a test and a block as arguments and may execute 554 the block of code. 555 556 However, this abstraction is ambiguous from a parsing standpoint. 557 The grammar in section 9.2 presents a parsable version of this: 558 Arguments are string-lists, numbers, and tags, which may be followed 559 560 561 562 Showalter Standards Track [Page 10] 563 564 RFC 3028 Sieve: A Mail Filtering Language January 2001 565 566 567 by a test or a test-list, which may be followed by a block of 568 commands. No more than one test or test list, nor more than one 569 block of commands, may be used, and commands that end with blocks of 570 commands do not end with semicolons. 571 572 2.7. String Comparison 573 574 When matching one string against another, there are a number of ways 575 of performing the match operation. These are accomplished with three 576 types of matches: an exact match, a substring match, and a wildcard 577 glob-style match. These are described below. 578 579 In order to provide for matches between character sets and case 580 insensitivity, Sieve borrows ACAP's comparator registry. 581 582 However, when a string represents the name of a header, the 583 comparator is never user-specified. Header comparisons are always 584 done with the "i;ascii-casemap" operator, i.e., case-insensitive 585 comparisons, because this is the way things are defined in the 586 message specification [IMAIL]. 587 588 2.7.1. Match Type 589 590 There are three match types describing the matching used in this 591 specification: ":is", ":contains", and ":matches". Match type 592 arguments are supplied to those commands which allow them to specify 593 what kind of match is to be performed. 594 595 These are used as tagged arguments to tests that perform string 596 comparison. 597 598 The ":contains" match type describes a substring match. If the value 599 argument contains the key argument as a substring, the match is true. 600 For instance, the string "frobnitzm" contains "frob" and "nit", but 601 not "fbm". The null key ("") is contained in all values. 602 603 The ":is" match type describes an absolute match; if the contents of 604 the first string are absolutely the same as the contents of the 605 second string, they match. Only the string "frobnitzm" is the string 606 "frobnitzm". The null key ":is" and only ":is" the null value. 607 608 The ":matches" version specifies a wildcard match using the 609 characters "*" and "?". "*" matches zero or more characters, and "?" 610 matches a single character. "?" and "*" may be escaped as "\\?" and 611 "\\*" in strings to match against themselves. The first backslash 612 escapes the second backslash; together, they escape the "*". This is 613 awkward, but it is commonplace in several programming languages that 614 use globs and regular expressions. 615 616 617 618 Showalter Standards Track [Page 11] 619 620 RFC 3028 Sieve: A Mail Filtering Language January 2001 621 622 623 In order to specify what type of match is supposed to happen, 624 commands that support matching take optional tagged arguments 625 ":matches", ":is", and ":contains". Commands default to using ":is" 626 matching if no match type argument is supplied. Note that these 627 modifiers may interact with comparators; in particular, some 628 comparators are not suitable for matching with ":contains" or 629 ":matches". It is an error to use a comparator with ":contains" or 630 ":matches" that is not compatible with it. 631 632 It is an error to give more than one of these arguments to a given 633 command. 634 635 For convenience, the "MATCH-TYPE" syntax element is defined here as 636 follows: 637 638 Syntax: ":is" / ":contains" / ":matches" 639 640 2.7.2. Comparisons Across Character Sets 641 642 All Sieve scripts are represented in UTF-8, but messages may involve 643 a number of character sets. In order for comparisons to work across 644 character sets, implementations SHOULD implement the following 645 behavior: 646 647 Implementations decode header charsets to UTF-8. Two strings are 648 considered equal if their UTF-8 representations are identical. 649 Implementations should decode charsets represented in the forms 650 specified by [MIME] for both message headers and bodies. 651 Implementations must be capable of decoding US-ASCII, ISO-8859-1, 652 the ASCII subset of ISO-8859-* character sets, and UTF-8. 653 654 If implementations fail to support the above behavior, they MUST 655 conform to the following: 656 657 No two strings can be considered equal if one contains octets 658 greater than 127. 659 660 2.7.3. Comparators 661 662 In order to allow for language-independent, case-independent matches, 663 the match type may be coupled with a comparator name. Comparators 664 are described for [ACAP]; a registry is defined for ACAP, and this 665 specification uses that registry. 666 667 ACAP defines multiple comparator types. Only equality types are used 668 in this specification. 669 670 671 672 673 674 Showalter Standards Track [Page 12] 675 676 RFC 3028 Sieve: A Mail Filtering Language January 2001 677 678 679 All implementations MUST support the "i;octet" comparator (simply 680 compares octets) and the "i;ascii-casemap" comparator (which treats 681 uppercase and lowercase characters in the ASCII subset of UTF-8 as 682 the same). If left unspecified, the default is "i;ascii-casemap". 683 684 Some comparators may not be usable with substring matches; that is, 685 they may only work with ":is". It is an error to try and use a 686 comparator with ":matches" or ":contains" that is not compatible with 687 it. 688 689 A comparator is specified by the ":comparator" option with commands 690 that support matching. This option is followed by a string providing 691 the name of the comparator to be used. For convenience, the syntax 692 of a comparator is abbreviated to "COMPARATOR", and (repeated in 693 several tests) is as follows: 694 695 Syntax: ":comparator" <comparator-name: string> 696 697 So in this example, 698 699 Example: if header :contains :comparator "i;octet" "Subject" 700 "MAKE MONEY FAST" { 701 discard; 702 } 703 704 would discard any message with subjects like "You can MAKE MONEY 705 FAST", but not "You can Make Money Fast", since the comparator used 706 is case-sensitive. 707 708 Comparators other than i;octet and i;ascii-casemap must be declared 709 with require, as they are extensions. If a comparator declared with 710 require is not known, it is an error, and execution fails. If the 711 comparator is not declared with require, it is also an error, even if 712 the comparator is supported. (See 2.10.5.) 713 714 Both ":matches" and ":contains" match types are compatible with the 715 "i;octet" and "i;ascii-casemap" comparators and may be used with 716 them. 717 718 It is an error to give more than one of these arguments to a given 719 command. 720 721 2.7.4. Comparisons Against Addresses 722 723 Addresses are one of the most frequent things represented as strings. 724 These are structured, and being able to compare against the local- 725 part or the domain of an address is useful, so some tests that act 726 727 728 729 730 Showalter Standards Track [Page 13] 731 732 RFC 3028 Sieve: A Mail Filtering Language January 2001 733 734 735 exclusively on addresses take an additional optional argument that 736 specifies what the test acts on. 737 738 These optional arguments are ":localpart", ":domain", and ":all", 739 which act on the local-part (left-side), the domain part (right- 740 side), and the whole address. 741 742 The kind of comparison done, such as whether or not the test done is 743 case-insensitive, is specified as a comparator argument to the test. 744 745 If an optional address-part is omitted, the default is ":all". 746 747 It is an error to give more than one of these arguments to a given 748 command. 749 750 For convenience, the "ADDRESS-PART" syntax element is defined here as 751 follows: 752 753 Syntax: ":localpart" / ":domain" / ":all" 754 755 2.8. Blocks 756 757 Blocks are sets of commands enclosed within curly braces. Blocks are 758 supplied to commands so that the commands can implement control 759 commands. 760 761 A control structure is a command that happens to take a test and a 762 block as one of its arguments; depending on the result of the test 763 supplied as another argument, it runs the code in the block some 764 number of times. 765 766 With the commands supplied in this memo, there are no loops. The 767 control structures supplied--if, elsif, and else--run a block either 768 once or not at all. So there are two arguments, the test and the 769 block. 770 771 2.9. Commands 772 773 Sieve scripts are sequences of commands. Commands can take any of 774 the tokens above as arguments, and arguments may be either tagged or 775 positional arguments. Not all commands take all arguments. 776 777 There are three kinds of commands: test commands, action commands, 778 and control commands. 779 780 The simplest is an action command. An action command is an 781 identifier followed by zero or more arguments, terminated by a 782 semicolon. Action commands do not take tests or blocks as arguments. 783 784 785 786 Showalter Standards Track [Page 14] 787 788 RFC 3028 Sieve: A Mail Filtering Language January 2001 789 790 791 A control command is similar, but it takes a test as an argument, and 792 ends with a block instead of a semicolon. 793 794 A test command is used as part of a control command. It is used to 795 specify whether or not the block of code given to the control command 796 is executed. 797 798 2.10. Evaluation 799 800 2.10.1. Action Interaction 801 802 Some actions cannot be used with other actions because the result 803 would be absurd. These restrictions are noted throughout this memo. 804 805 Extension actions MUST state how they interact with actions defined 806 in this specification. 807 808 2.10.2. Implicit Keep 809 810 Previous experience with filtering systems suggests that cases tend 811 to be missed in scripts. To prevent errors, Sieve has an "implicit 812 keep". 813 814 An implicit keep is a keep action (see 4.4) performed in absence of 815 any action that cancels the implicit keep. 816 817 An implicit keep is performed if a message is not written to a 818 mailbox, redirected to a new address, or explicitly thrown out. That 819 is, if a fileinto, a keep, a redirect, or a discard is performed, an 820 implicit keep is not. 821 822 Some actions may be defined to not cancel the implicit keep. These 823 actions may not directly affect the delivery of a message, and are 824 used for their side effects. None of the actions specified in this 825 document meet that criteria, but extension actions will. 826 827 For instance, with any of the short messages offered above, the 828 following script produces no actions. 829 830 Example: if size :over 500K { discard; } 831 832 As a result, the implicit keep is taken. 833 834 2.10.3. Message Uniqueness in a Mailbox 835 836 Implementations SHOULD NOT deliver a message to the same folder more 837 than once, even if a script explicitly asks for a message to be 838 written to a mailbox twice. 839 840 841 842 Showalter Standards Track [Page 15] 843 844 RFC 3028 Sieve: A Mail Filtering Language January 2001 845 846 847 The test for equality of two messages is implementation-defined. 848 849 If a script asks for a message to be written to a mailbox twice, it 850 MUST NOT be treated as an error. 851 852 2.10.4. Limits on Numbers of Actions 853 854 Site policy MAY limit numbers of actions taken and MAY impose 855 restrictions on which actions can be used together. In the event 856 that a script hits a policy limit on the number of actions taken for 857 a particular message, an error occurs. 858 859 Implementations MUST prohibit more than one reject. 860 861 Implementations MUST allow at least one keep or one fileinto. If 862 fileinto is not implemented, implementations MUST allow at least one 863 keep. 864 865 Implementations SHOULD prohibit reject when used with other actions. 866 867 2.10.5. Extensions and Optional Features 868 869 Because of the differing capabilities of many mail systems, several 870 features of this specification are optional. Before any of these 871 extensions can be executed, they must be declared with the "require" 872 action. 873 874 If an extension is not enabled with "require", implementations MUST 875 treat it as if they did not support it at all. 876 877 If a script does not understand an extension declared with require, 878 the script must not be used at all. Implementations MUST NOT execute 879 scripts which require unknown capability names. 880 881 Note: The reason for this restriction is that prior experiences with 882 languages such as LISP and Tcl suggest that this is a workable 883 way of noting that a given script uses an extension. 884 885 Experience with PostScript suggests that mechanisms that allow 886 a script to work around missing extensions are not used in 887 practice. 888 889 Extensions which define actions MUST state how they interact with 890 actions discussed in the base specification. 891 892 893 894 895 896 897 898 Showalter Standards Track [Page 16] 899 900 RFC 3028 Sieve: A Mail Filtering Language January 2001 901 902 903 2.10.6. Errors 904 905 In any programming language, there are compile-time and run-time 906 errors. 907 908 Compile-time errors are ones in syntax that are detectable if a 909 syntax check is done. 910 911 Run-time errors are not detectable until the script is run. This 912 includes transient failures like disk full conditions, but also 913 includes issues like invalid combinations of actions. 914 915 When an error occurs in a Sieve script, all processing stops. 916 917 Implementations MAY choose to do a full parse, then evaluate the 918 script, then do all actions. Implementations might even go so far as 919 to ensure that execution is atomic (either all actions are executed 920 or none are executed). 921 922 Other implementations may choose to parse and run at the same time. 923 Such implementations are simpler, but have issues with partial 924 failure (some actions happen, others don't). 925 926 Implementations might even go so far as to ensure that scripts can 927 never execute an invalid set of actions (e.g., reject + fileinto) 928 before execution, although this could involve solving the Halting 929 Problem. 930 931 This specification allows any of these approaches. Solving the 932 Halting Problem is considered extra credit. 933 934 When an error happens, implementations MUST notify the user that an 935 error occurred, which actions (if any) were taken, and do an implicit 936 keep. 937 938 2.10.7. Limits on Execution 939 940 Implementations may limit certain constructs. However, this 941 specification places a lower bound on some of these limits. 942 943 Implementations MUST support fifteen levels of nested blocks. 944 945 Implementations MUST support fifteen levels of nested test lists. 946 947 3. Control Commands 948 949 Control structures are needed to allow for multiple and conditional 950 actions. 951 952 953 954 Showalter Standards Track [Page 17] 955 956 RFC 3028 Sieve: A Mail Filtering Language January 2001 957 958 959 3.1. Control Structure If 960 961 There are three pieces to if: "if", "elsif", and "else". Each is 962 actually a separate command in terms of the grammar. However, an 963 elsif MUST only follow an if, and an else MUST follow only either an 964 if or an elsif. An error occurs if these conditions are not met. 965 966 Syntax: if <test1: test> <block1: block> 967 968 Syntax: elsif <test2: test> <block2: block> 969 970 Syntax: else <block> 971 972 The semantics are similar to those of any of the many other 973 programming languages these control commands appear in. When the 974 interpreter sees an "if", it evaluates the test associated with it. 975 If the test is true, it executes the block associated with it. 976 977 If the test of the "if" is false, it evaluates the test of the first 978 "elsif" (if any). If the test of "elsif" is true, it runs the 979 elsif's block. An elsif may be followed by an elsif, in which case, 980 the interpreter repeats this process until it runs out of elsifs. 981 982 When the interpreter runs out of elsifs, there may be an "else" case. 983 If there is, and none of the if or elsif tests were true, the 984 interpreter runs the else case. 985 986 This provides a way of performing exactly one of the blocks in the 987 chain. 988 989 In the following example, both Message A and B are dropped. 990 991 Example: require "fileinto"; 992 if header :contains "from" "coyote" { 993 discard; 994 } elsif header :contains ["subject"] ["$$$"] { 995 discard; 996 } else { 997 fileinto "INBOX"; 998 } 999 1000 1001 When the script below is run over message A, it redirects the message 1002 to acm@example.edu; message B, to postmaster@example.edu; any other 1003 message is redirected to field@example.edu. 1004 1005 1006 1007 1008 1009 1010 Showalter Standards Track [Page 18] 1011 1012 RFC 3028 Sieve: A Mail Filtering Language January 2001 1013 1014 1015 Example: if header :contains ["From"] ["coyote"] { 1016 redirect "acm@example.edu"; 1017 } elsif header :contains "Subject" "$$$" { 1018 redirect "postmaster@example.edu"; 1019 } else { 1020 redirect "field@example.edu"; 1021 } 1022 1023 Note that this definition prohibits the "... else if ..." sequence 1024 used by C. This is intentional, because this construct produces a 1025 shift-reduce conflict. 1026 1027 3.2. Control Structure Require 1028 1029 Syntax: require <capabilities: string-list> 1030 1031 The require action notes that a script makes use of a certain 1032 extension. Such a declaration is required to use the extension, as 1033 discussed in section 2.10.5. Multiple capabilities can be declared 1034 with a single require. 1035 1036 The require command, if present, MUST be used before anything other 1037 than a require can be used. An error occurs if a require appears 1038 after a command other than require. 1039 1040 Example: require ["fileinto", "reject"]; 1041 1042 Example: require "fileinto"; 1043 require "vacation"; 1044 1045 3.3. Control Structure Stop 1046 1047 Syntax: stop 1048 1049 The "stop" action ends all processing. If no actions have been 1050 executed, then the keep action is taken. 1051 1052 4. Action Commands 1053 1054 This document supplies five actions that may be taken on a message: 1055 keep, fileinto, redirect, reject, and discard. 1056 1057 Implementations MUST support the "keep", "discard", and "redirect" 1058 actions. 1059 1060 Implementations SHOULD support "reject" and "fileinto". 1061 1062 1063 1064 1065 1066 Showalter Standards Track [Page 19] 1067 1068 RFC 3028 Sieve: A Mail Filtering Language January 2001 1069 1070 1071 Implementations MAY limit the number of certain actions taken (see 1072 section 2.10.4). 1073 1074 4.1. Action reject 1075 1076 Syntax: reject <reason: string> 1077 1078 The optional "reject" action refuses delivery of a message by sending 1079 back an [MDN] to the sender. It resends the message to the sender, 1080 wrapping it in a "reject" form, noting that it was rejected by the 1081 recipient. In the following script, message A is rejected and 1082 returned to the sender. 1083 1084 Example: if header :contains "from" "coyote@desert.example.org" { 1085 reject "I am not taking mail from you, and I don't want 1086 your birdseed, either!"; 1087 } 1088 1089 A reject message MUST take the form of a failure MDN as specified by 1090 [MDN]. The human-readable portion of the message, the first 1091 component of the MDN, contains the human readable message describing 1092 the error, and it SHOULD contain additional text alerting the 1093 original sender that mail was refused by a filter. This part of the 1094 MDN might appear as follows: 1095 1096 ------------------------------------------------------------ 1097 Message was refused by recipient's mail filtering program. Reason 1098 given was as follows: 1099 1100 I am not taking mail from you, and I don't want your birdseed, 1101 either! 1102 ------------------------------------------------------------ 1103 1104 The MDN action-value field as defined in the MDN specification MUST 1105 be "deleted" and MUST have the MDN-sent-automatically and automatic- 1106 action modes set. 1107 1108 Because some implementations can not or will not implement the reject 1109 command, it is optional. The capability string to be used with the 1110 require command is "reject". 1111 1112 4.2. Action fileinto 1113 1114 Syntax: fileinto <folder: string> 1115 1116 The "fileinto" action delivers the message into the specified folder. 1117 Implementations SHOULD support fileinto, but in some environments 1118 this may be impossible. 1119 1120 1121 1122 Showalter Standards Track [Page 20] 1123 1124 RFC 3028 Sieve: A Mail Filtering Language January 2001 1125 1126 1127 The capability string for use with the require command is "fileinto". 1128 1129 In the following script, message A is filed into folder 1130 "INBOX.harassment". 1131 1132 Example: require "fileinto"; 1133 if header :contains ["from"] "coyote" { 1134 fileinto "INBOX.harassment"; 1135 } 1136 1137 4.3. Action redirect 1138 1139 Syntax: redirect <address: string> 1140 1141 The "redirect" action is used to send the message to another user at 1142 a supplied address, as a mail forwarding feature does. The 1143 "redirect" action makes no changes to the message body or existing 1144 headers, but it may add new headers. The "redirect" modifies the 1145 envelope recipient. 1146 1147 The redirect command performs an MTA-style "forward"--that is, what 1148 you get from a .forward file using sendmail under UNIX. The address 1149 on the SMTP envelope is replaced with the one on the redirect command 1150 and the message is sent back out. (This is not an MUA-style forward, 1151 which creates a new message with a different sender and message ID, 1152 wrapping the old message in a new one.) 1153 1154 A simple script can be used for redirecting all mail: 1155 1156 Example: redirect "bart@example.edu"; 1157 1158 Implementations SHOULD take measures to implement loop control, 1159 possibly including adding headers to the message or counting received 1160 headers. If an implementation detects a loop, it causes an error. 1161 1162 4.4. Action keep 1163 1164 Syntax: keep 1165 1166 The "keep" action is whatever action is taken in lieu of all other 1167 actions, if no filtering happens at all; generally, this simply means 1168 to file the message into the user's main mailbox. This command 1169 provides a way to execute this action without needing to know the 1170 name of the user's main mailbox, providing a way to call it without 1171 needing to understand the user's setup, or the underlying mail 1172 system. 1173 1174 1175 1176 1177 1178 Showalter Standards Track [Page 21] 1179 1180 RFC 3028 Sieve: A Mail Filtering Language January 2001 1181 1182 1183 For instance, in an implementation where the IMAP server is running 1184 scripts on behalf of the user at time of delivery, a keep command is 1185 equivalent to a fileinto "INBOX". 1186 1187 Example: if size :under 1M { keep; } else { discard; } 1188 1189 Note that the above script is identical to the one below. 1190 1191 Example: if not size :under 1M { discard; } 1192 1193 4.5. Action discard 1194 1195 Syntax: discard 1196 1197 Discard is used to silently throw away the message. It does so by 1198 simply canceling the implicit keep. If discard is used with other 1199 actions, the other actions still happen. Discard is compatible with 1200 all other actions. (For instance fileinto+discard is equivalent to 1201 fileinto.) 1202 1203 Discard MUST be silent; that is, it MUST NOT return a non-delivery 1204 notification of any kind ([DSN], [MDN], or otherwise). 1205 1206 In the following script, any mail from "idiot@example.edu" is thrown 1207 out. 1208 1209 Example: if header :contains ["from"] ["idiot@example.edu"] { 1210 discard; 1211 } 1212 1213 While an important part of this language, "discard" has the potential 1214 to create serious problems for users: Students who leave themselves 1215 logged in to an unattended machine in a public computer lab may find 1216 their script changed to just "discard". In order to protect users in 1217 this situation (along with similar situations), implementations MAY 1218 keep messages destroyed by a script for an indefinite period, and MAY 1219 disallow scripts that throw out all mail. 1220 1221 5. Test Commands 1222 1223 Tests are used in conditionals to decide which part(s) of the 1224 conditional to execute. 1225 1226 Implementations MUST support these tests: "address", "allof", 1227 "anyof", "exists", "false", "header", "not", "size", and "true". 1228 1229 Implementations SHOULD support the "envelope" test. 1230 1231 1232 1233 1234 Showalter Standards Track [Page 22] 1235 1236 RFC 3028 Sieve: A Mail Filtering Language January 2001 1237 1238 1239 5.1. Test address 1240 1241 Syntax: address [ADDRESS-PART] [COMPARATOR] [MATCH-TYPE] 1242 <header-list: string-list> <key-list: string-list> 1243 1244 The address test matches Internet addresses in structured headers 1245 that contain addresses. It returns true if any header contains any 1246 key in the specified part of the address, as modified by the 1247 comparator and the match keyword. 1248 1249 Like envelope and header, this test returns true if any combination 1250 of the header-list and key-list arguments match. 1251 1252 Internet email addresses [IMAIL] have the somewhat awkward 1253 characteristic that the local-part to the left of the at-sign is 1254 considered case sensitive, and the domain-part to the right of the 1255 at-sign is case insensitive. The "address" command does not deal 1256 with this itself, but provides the ADDRESS-PART argument for allowing 1257 users to deal with it. 1258 1259 The address primitive never acts on the phrase part of an email 1260 address, nor on comments within that address. It also never acts on 1261 group names, although it does act on the addresses within the group 1262 construct. 1263 1264 Implementations MUST restrict the address test to headers that 1265 contain addresses, but MUST include at least From, To, Cc, Bcc, 1266 Sender, Resent-From, Resent-To, and SHOULD include any other header 1267 that utilizes an "address-list" structured header body. 1268 1269 Example: if address :is :all "from" "tim@example.com" { 1270 discard; 1271 1272 5.2. Test allof 1273 1274 Syntax: allof <tests: test-list> 1275 1276 The allof test performs a logical AND on the tests supplied to it. 1277 1278 Example: allof (false, false) => false 1279 allof (false, true) => false 1280 allof (true, true) => true 1281 1282 The allof test takes as its argument a test-list. 1283 1284 1285 1286 1287 1288 1289 1290 Showalter Standards Track [Page 23] 1291 1292 RFC 3028 Sieve: A Mail Filtering Language January 2001 1293 1294 1295 5.3. Test anyof 1296 1297 Syntax: anyof <tests: test-list> 1298 1299 The anyof test performs a logical OR on the tests supplied to it. 1300 1301 Example: anyof (false, false) => false 1302 anyof (false, true) => true 1303 anyof (true, true) => true 1304 1305 5.4. Test envelope 1306 1307 Syntax: envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] 1308 <envelope-part: string-list> <key-list: string-list> 1309 1310 The "envelope" test is true if the specified part of the SMTP (or 1311 equivalent) envelope matches the specified key. 1312 1313 If one of the envelope-part strings is (case insensitive) "from", 1314 then matching occurs against the FROM address used in the SMTP MAIL 1315 command. 1316 1317 If one of the envelope-part strings is (case insensitive) "to", then 1318 matching occurs against the TO address used in the SMTP RCPT command 1319 that resulted in this message getting delivered to this user. Note 1320 that only the most recent TO is available, and only the one relevant 1321 to this user. 1322 1323 The envelope-part is a string list and may contain more than one 1324 parameter, in which case all of the strings specified in the key-list 1325 are matched against all parts given in the envelope-part list. 1326 1327 Like address and header, this test returns true if any combination of 1328 the envelope-part and key-list arguments is true. 1329 1330 All tests against envelopes MUST drop source routes. 1331 1332 If the SMTP transaction involved several RCPT commands, only the data 1333 from the RCPT command that caused delivery to this user is available 1334 in the "to" part of the envelope. 1335 1336 If a protocol other than SMTP is used for message transport, 1337 implementations are expected to adapt this command appropriately. 1338 1339 The envelope command is optional. Implementations SHOULD support it, 1340 but the necessary information may not be available in all cases. 1341 1342 1343 1344 1345 1346 Showalter Standards Track [Page 24] 1347 1348 RFC 3028 Sieve: A Mail Filtering Language January 2001 1349 1350 1351 Example: require "envelope"; 1352 if envelope :all :is "from" "tim@example.com" { 1353 discard; 1354 } 1355 1356 5.5. Test exists 1357 1358 Syntax: exists <header-names: string-list> 1359 1360 The "exists" test is true if the headers listed in the header-names 1361 argument exist within the message. All of the headers must exist or 1362 the test is false. 1363 1364 The following example throws out mail that doesn't have a From header 1365 and a Date header. 1366 1367 Example: if not exists ["From","Date"] { 1368 discard; 1369 } 1370 1371 5.6. Test false 1372 1373 Syntax: false 1374 1375 The "false" test always evaluates to false. 1376 1377 5.7. Test header 1378 1379 Syntax: header [COMPARATOR] [MATCH-TYPE] 1380 <header-names: string-list> <key-list: string-list> 1381 1382 The "header" test evaluates to true if any header name matches any 1383 key. The type of match is specified by the optional match argument, 1384 which defaults to ":is" if not specified, as specified in section 1385 2.6. 1386 1387 Like address and envelope, this test returns true if any combination 1388 of the string-list and key-list arguments match. 1389 1390 If a header listed in the header-names argument exists, it contains 1391 the null key (""). However, if the named header is not present, it 1392 does not contain the null key. So if a message contained the header 1393 1394 X-Caffeine: C8H10N4O2 1395 1396 1397 1398 1399 1400 1401 1402 Showalter Standards Track [Page 25] 1403 1404 RFC 3028 Sieve: A Mail Filtering Language January 2001 1405 1406 1407 these tests on that header evaluate as follows: 1408 1409 header :is ["X-Caffeine"] [""] => false 1410 header :contains ["X-Caffeine"] [""] => true 1411 1412 5.8. Test not 1413 1414 Syntax: not <test> 1415 1416 The "not" test takes some other test as an argument, and yields the 1417 opposite result. "not false" evaluates to "true" and "not true" 1418 evaluates to "false". 1419 1420 5.9. Test size 1421 1422 Syntax: size <":over" / ":under"> <limit: number> 1423 1424 The "size" test deals with the size of a message. It takes either a 1425 tagged argument of ":over" or ":under", followed by a number 1426 representing the size of the message. 1427 1428 If the argument is ":over", and the size of the message is greater 1429 than the number provided, the test is true; otherwise, it is false. 1430 1431 If the argument is ":under", and the size of the message is less than 1432 the number provided, the test is true; otherwise, it is false. 1433 1434 Exactly one of ":over" or ":under" must be specified, and anything 1435 else is an error. 1436 1437 The size of a message is defined to be the number of octets from the 1438 initial header until the last character in the message body. 1439 1440 Note that for a message that is exactly 4,000 octets, the message is 1441 neither ":over" 4000 octets or ":under" 4000 octets. 1442 1443 5.10. Test true 1444 1445 Syntax: true 1446 1447 The "true" test always evaluates to true. 1448 1449 6. Extensibility 1450 1451 New control structures, actions, and tests can be added to the 1452 language. Sites must make these features known to their users; this 1453 document does not define a way to discover the list of extensions 1454 supported by the server. 1455 1456 1457 1458 Showalter Standards Track [Page 26] 1459 1460 RFC 3028 Sieve: A Mail Filtering Language January 2001 1461 1462 1463 Any extensions to this language MUST define a capability string that 1464 uniquely identifies that extension. If a new version of an extension 1465 changes the functionality of a previously defined extension, it MUST 1466 use a different name. 1467 1468 In a situation where there is a submission protocol and an extension 1469 advertisement mechanism aware of the details of this language, 1470 scripts submitted can be checked against the mail server to prevent 1471 use of an extension that the server does not support. 1472 1473 Extensions MUST state how they interact with constraints defined in 1474 section 2.10, e.g., whether they cancel the implicit keep, and which 1475 actions they are compatible and incompatible with. 1476 1477 6.1. Capability String 1478 1479 Capability strings are typically short strings describing what 1480 capabilities are supported by the server. 1481 1482 Capability strings beginning with "vnd." represent vendor-defined 1483 extensions. Such extensions are not defined by Internet standards or 1484 RFCs, but are still registered with IANA in order to prevent 1485 conflicts. Extensions starting with "vnd." SHOULD be followed by the 1486 name of the vendor and product, such as "vnd.acme.rocket-sled". 1487 1488 The following capability strings are defined by this document: 1489 1490 envelope The string "envelope" indicates that the implementation 1491 supports the "envelope" command. 1492 1493 fileinto The string "fileinto" indicates that the implementation 1494 supports the "fileinto" command. 1495 1496 reject The string "reject" indicates that the implementation 1497 supports the "reject" command. 1498 1499 comparator- The string "comparator-elbonia" is provided if the 1500 implementation supports the "elbonia" comparator. 1501 Therefore, all implementations have at least the 1502 "comparator-i;octet" and "comparator-i;ascii-casemap" 1503 capabilities. However, these comparators may be used 1504 without being declared with require. 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 Showalter Standards Track [Page 27] 1515 1516 RFC 3028 Sieve: A Mail Filtering Language January 2001 1517 1518 1519 6.2. IANA Considerations 1520 1521 In order to provide a standard set of extensions, a registry is 1522 provided by IANA. Capability names may be registered on a first- 1523 come, first-served basis. Extensions designed for interoperable use 1524 SHOULD be defined as standards track or IESG approved experimental 1525 RFCs. 1526 1527 6.2.1. Template for Capability Registrations 1528 1529 The following template is to be used for registering new Sieve 1530 extensions with IANA. 1531 1532 To: iana@iana.org 1533 Subject: Registration of new Sieve extension 1534 1535 Capability name: 1536 Capability keyword: 1537 Capability arguments: 1538 Standards Track/IESG-approved experimental RFC number: 1539 Person and email address to contact for further information: 1540 1541 6.2.2. Initial Capability Registrations 1542 1543 The following are to be added to the IANA registry for Sieve 1544 extensions as the initial contents of the capability registry. 1545 1546 Capability name: fileinto 1547 Capability keyword: fileinto 1548 Capability arguments: fileinto <folder: string> 1549 Standards Track/IESG-approved experimental RFC number: 1550 RFC 3028 (Sieve base spec) 1551 Person and email address to contact for further information: 1552 Tim Showalter 1553 tjs@mirapoint.com 1554 1555 Capability name: reject 1556 Capability keyword: reject 1557 Capability arguments: reject <reason: string> 1558 Standards Track/IESG-approved experimental RFC number: 1559 RFC 3028 (Sieve base spec) 1560 Person and email address to contact for further information: 1561 Tim Showalter 1562 tjs@mirapoint.com 1563 1564 1565 1566 1567 1568 1569 1570 Showalter Standards Track [Page 28] 1571 1572 RFC 3028 Sieve: A Mail Filtering Language January 2001 1573 1574 1575 Capability name: envelope 1576 Capability keyword: envelope 1577 Capability arguments: 1578 envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] 1579 <envelope-part: string-list> <key-list: string-list> 1580 Standards Track/IESG-approved experimental RFC number: 1581 RFC 3028 (Sieve base spec) 1582 Person and email address to contact for further information: 1583 Tim Showalter 1584 tjs@mirapoint.com 1585 1586 Capability name: comparator-* 1587 Capability keyword: 1588 comparator-* (anything starting with "comparator-") 1589 Capability arguments: (none) 1590 Standards Track/IESG-approved experimental RFC number: 1591 RFC 3028, Sieve, by reference of 1592 RFC 2244, Application Configuration Access Protocol 1593 Person and email address to contact for further information: 1594 Tim Showalter 1595 tjs@mirapoint.com 1596 1597 6.3. Capability Transport 1598 1599 As the range of mail systems that this document is intended to apply 1600 to is quite varied, a method of advertising which capabilities an 1601 implementation supports is difficult due to the wide range of 1602 possible implementations. Such a mechanism, however, should have 1603 property that the implementation can advertise the complete set of 1604 extensions that it supports. 1605 1606 7. Transmission 1607 1608 The MIME type for a Sieve script is "application/sieve". 1609 1610 The registration of this type for RFC 2048 requirements is as 1611 follows: 1612 1613 Subject: Registration of MIME media type application/sieve 1614 1615 MIME media type name: application 1616 MIME subtype name: sieve 1617 Required parameters: none 1618 Optional parameters: none 1619 Encoding considerations: Most sieve scripts will be textual, 1620 written in UTF-8. When non-7bit characters are used, 1621 quoted-printable is appropriate for transport systems 1622 that require 7bit encoding. 1623 1624 1625 1626 Showalter Standards Track [Page 29] 1627 1628 RFC 3028 Sieve: A Mail Filtering Language January 2001 1629 1630 1631 Security considerations: Discussed in section 10 of RFC 3028. 1632 Interoperability considerations: Discussed in section 2.10.5 1633 of RFC 3028. 1634 Published specification: RFC 3028. 1635 Applications which use this media type: sieve-enabled mail servers 1636 Additional information: 1637 Magic number(s): 1638 File extension(s): .siv 1639 Macintosh File Type Code(s): 1640 Person & email address to contact for further information: 1641 See the discussion list at ietf-mta-filters@imc.org. 1642 Intended usage: 1643 COMMON 1644 Author/Change controller: 1645 See Author information in RFC 3028. 1646 1647 8. Parsing 1648 1649 The Sieve grammar is separated into tokens and a separate grammar as 1650 most programming languages are. 1651 1652 8.1. Lexical Tokens 1653 1654 Sieve scripts are encoded in UTF-8. The following assumes a valid 1655 UTF-8 encoding; special characters in Sieve scripts are all ASCII. 1656 1657 The following are tokens in Sieve: 1658 1659 - identifiers 1660 - tags 1661 - numbers 1662 - quoted strings 1663 - multi-line strings 1664 - other separators 1665 1666 Blanks, horizontal tabs, CRLFs, and comments ("white space") are 1667 ignored except as they separate tokens. Some white space is required 1668 to separate otherwise adjacent tokens and in specific places in the 1669 multi-line strings. 1670 1671 The other separators are single individual characters, and are 1672 mentioned explicitly in the grammar. 1673 1674 The lexical structure of sieve is defined in the following BNF (as 1675 described in [ABNF]): 1676 1677 1678 1679 1680 1681 1682 Showalter Standards Track [Page 30] 1683 1684 RFC 3028 Sieve: A Mail Filtering Language January 2001 1685 1686 1687 bracket-comment = "/*" *(CHAR-NOT-STAR / ("*" CHAR-NOT-SLASH)) "*/" 1688 ;; No */ allowed inside a comment. 1689 ;; (No * is allowed unless it is the last character, 1690 ;; or unless it is followed by a character that isn't a 1691 ;; slash.) 1692 1693 CHAR-NOT-DOT = (%x01-09 / %x0b-0c / %x0e-2d / %x2f-ff) 1694 ;; no dots, no CRLFs 1695 1696 CHAR-NOT-CRLF = (%x01-09 / %x0b-0c / %x0e-ff) 1697 1698 CHAR-NOT-SLASH = (%x00-57 / %x58-ff) 1699 1700 CHAR-NOT-STAR = (%x00-51 / %x53-ff) 1701 1702 comment = bracket-comment / hash-comment 1703 1704 hash-comment = ( "#" *CHAR-NOT-CRLF CRLF ) 1705 1706 identifier = (ALPHA / "_") *(ALPHA DIGIT "_") 1707 1708 tag = ":" identifier 1709 1710 number = 1*DIGIT [QUANTIFIER] 1711 1712 QUANTIFIER = "K" / "M" / "G" 1713 1714 quoted-string = DQUOTE *CHAR DQUOTE 1715 ;; in general, \ CHAR inside a string maps to CHAR 1716 ;; so \" maps to " and \\ maps to \ 1717 ;; note that newlines and other characters are all allowed 1718 ;; strings 1719 1720 multi-line = "text:" *(SP / HTAB) (hash-comment / CRLF) 1721 *(multi-line-literal / multi-line-dotstuff) 1722 "." CRLF 1723 multi-line-literal = [CHAR-NOT-DOT *CHAR-NOT-CRLF] CRLF 1724 multi-line-dotstuff = "." 1*CHAR-NOT-CRLF CRLF 1725 ;; A line containing only "." ends the multi-line. 1726 ;; Remove a leading '.' if followed by another '.'. 1727 1728 white-space = 1*(SP / CRLF / HTAB) / comment 1729 1730 8.2. Grammar 1731 1732 The following is the grammar of Sieve after it has been lexically 1733 interpreted. No white space or comments appear below. The start 1734 symbol is "start". 1735 1736 1737 1738 Showalter Standards Track [Page 31] 1739 1740 RFC 3028 Sieve: A Mail Filtering Language January 2001 1741 1742 1743 argument = string-list / number / tag 1744 1745 arguments = *argument [test / test-list] 1746 1747 block = "{" commands "}" 1748 1749 command = identifier arguments ( ";" / block ) 1750 1751 commands = *command 1752 1753 start = commands 1754 1755 string = quoted-string / multi-line 1756 1757 string-list = "[" string *("," string) "]" / string ;; if 1758 there is only a single string, the brackets are optional 1759 1760 test = identifier arguments 1761 1762 test-list = "(" test *("," test) ")" 1763 1764 9. Extended Example 1765 1766 The following is an extended example of a Sieve script. Note that it 1767 does not make use of the implicit keep. 1768 1769 # 1770 # Example Sieve Filter 1771 # Declare any optional features or extension used by the script 1772 # 1773 require ["fileinto", "reject"]; 1774 1775 # 1776 # Reject any large messages (note that the four leading dots get 1777 # "stuffed" to three) 1778 # 1779 if size :over 1M 1780 { 1781 reject text: 1782 Please do not send me large attachments. 1783 Put your file on a server and send me the URL. 1784 Thank you. 1785 .... Fred 1786 . 1787 ; 1788 stop; 1789 } 1790 # 1791 1792 1793 1794 Showalter Standards Track [Page 32] 1795 1796 RFC 3028 Sieve: A Mail Filtering Language January 2001 1797 1798 1799 # Handle messages from known mailing lists 1800 # Move messages from IETF filter discussion list to filter folder 1801 # 1802 if header :is "Sender" "owner-ietf-mta-filters@imc.org" 1803 { 1804 fileinto "filter"; # move to "filter" folder 1805 } 1806 # 1807 # Keep all messages to or from people in my company 1808 # 1809 elsif address :domain :is ["From", "To"] "example.com" 1810 { 1811 keep; # keep in "In" folder 1812 } 1813 1814 # 1815 # Try and catch unsolicited email. If a message is not to me, 1816 # or it contains a subject known to be spam, file it away. 1817 # 1818 elsif anyof (not address :all :contains 1819 ["To", "Cc", "Bcc"] "me@example.com", 1820 header :matches "subject" 1821 ["*make*money*fast*", "*university*dipl*mas*"]) 1822 { 1823 # If message header does not contain my address, 1824 # it's from a list. 1825 fileinto "spam"; # move to "spam" folder 1826 } 1827 else 1828 { 1829 # Move all other (non-company) mail to "personal" 1830 # folder. 1831 fileinto "personal"; 1832 } 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 Showalter Standards Track [Page 33] 1851 1852 RFC 3028 Sieve: A Mail Filtering Language January 2001 1853 1854 1855 10. Security Considerations 1856 1857 Users must get their mail. It is imperative that whatever method 1858 implementations use to store the user-defined filtering scripts be 1859 secure. 1860 1861 It is equally important that implementations sanity-check the user's 1862 scripts, and not allow users to create on-demand mailbombs. For 1863 instance, an implementation that allows a user to reject or redirect 1864 multiple times to a single message might also allow a user to create 1865 a mailbomb triggered by mail from a specific user. Site- or 1866 implementation-defined limits on actions are useful for this. 1867 1868 Several commands, such as "discard", "redirect", and "fileinto" allow 1869 for actions to be taken that are potentially very dangerous. 1870 1871 Implementations SHOULD take measures to prevent languages from 1872 looping. 1873 1874 11. Acknowledgments 1875 1876 I am very thankful to Chris Newman for his support and his ABNF 1877 syntax checker, to John Myers and Steve Hole for outlining the 1878 requirements for the original drafts, to Larry Greenfield for nagging 1879 me about the grammar and finally fixing it, to Greg Sereda for 1880 repeatedly fixing and providing examples, to Ned Freed for fixing 1881 everything else, to Rob Earhart for an early implementation and a 1882 great deal of help, and to Randall Gellens for endless amounts of 1883 proofreading. I am grateful to Carnegie Mellon University where most 1884 of the work on this document was done. I am also indebted to all of 1885 the readers of the ietf-mta-filters@imc.org mailing list. 1886 1887 12. Author's Address 1888 1889 Tim Showalter 1890 Mirapoint, Inc. 1891 909 Hermosa Court 1892 Sunnyvale, CA 94085 1893 1894 EMail: tjs@mirapoint.com 1895 1896 13. References 1897 1898 [ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax 1899 Specifications: ABNF", RFC 2234, November 1997. 1900 1901 1902 1903 1904 1905 1906 Showalter Standards Track [Page 34] 1907 1908 RFC 3028 Sieve: A Mail Filtering Language January 2001 1909 1910 1911 [ACAP] Newman, C. and J. G. Myers, "ACAP -- Application 1912 Configuration Access Protocol", RFC 2244, November 1997. 1913 1914 [BINARY-SI] "Standard IEC 60027-2: Letter symbols to be used in 1915 electrical technology - Part 2: Telecommunications and 1916 electronics", January 1999. 1917 1918 [DSN] Moore, K. and G. Vaudreuil, "An Extensible Message Format 1919 for Delivery Status Notifications", RFC 1894, January 1920 1996. 1921 1922 [FLAMES] Borenstein, N, and C. Thyberg, "Power, Ease of Use, and 1923 Cooperative Work in a Practical Multimedia Message 1924 System", Int. J. of Man-Machine Studies, April, 1991. 1925 Reprinted in Computer-Supported Cooperative Work and 1926 Groupware, Saul Greenberg, editor, Harcourt Brace 1927 Jovanovich, 1991. Reprinted in Readings in Groupware and 1928 Computer-Supported Cooperative Work, Ronald Baecker, 1929 editor, Morgan Kaufmann, 1993. 1930 1931 [KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate 1932 Requirement Levels", BCP 14, RFC 2119, March 1997. 1933 1934 [IMAP] Crispin, M., "Internet Message Access Protocol - version 1935 4rev1", RFC 2060, December 1996. 1936 1937 [IMAIL] Crocker, D., "Standard for the Format of ARPA Internet 1938 Text Messages", STD 11, RFC 822, August 1982. 1939 1940 [MIME] Freed, N. and N. Borenstein, "Multipurpose Internet Mail 1941 Extensions (MIME) Part One: Format of Internet Message 1942 Bodies", RFC 2045, November 1996. 1943 1944 [MDN] Fajman, R., "An Extensible Message Format for Message 1945 Disposition Notifications", RFC 2298, March 1998. 1946 1947 [RFC1123] Braden, R., "Requirements for Internet Hosts -- 1948 Application and Support", STD 3, RFC 1123, November 1989. 1949 1950 [SMTP] Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC 1951 821, August 1982. 1952 1953 [UTF-8] Yergeau, F., "UTF-8, a transformation format of Unicode 1954 and ISO 10646", RFC 2044, October 1996. 1955 1956 1957 1958 1959 1960 1961 1962 Showalter Standards Track [Page 35] 1963 1964 RFC 3028 Sieve: A Mail Filtering Language January 2001 1965 1966 1967 14. Full Copyright Statement 1968 1969 Copyright (C) The Internet Society (2001). All Rights Reserved. 1970 1971 This document and translations of it may be copied and furnished to 1972 others, and derivative works that comment on or otherwise explain it 1973 or assist in its implementation may be prepared, copied, published 1974 and distributed, in whole or in part, without restriction of any 1975 kind, provided that the above copyright notice and this paragraph are 1976 included on all such copies and derivative works. However, this 1977 document itself may not be modified in any way, such as by removing 1978 the copyright notice or references to the Internet Society or other 1979 Internet organizations, except as needed for the purpose of 1980 developing Internet standards in which case the procedures for 1981 copyrights defined in the Internet Standards process must be 1982 followed, or as required to translate it into languages other than 1983 English. 1984 1985 The limited permissions granted above are perpetual and will not be 1986 revoked by the Internet Society or its successors or assigns. 1987 1988 This document and the information contained herein is provided on an 1989 "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING 1990 TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 1991 BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 1992 HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 1993 MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 1994 1995 Acknowledgement 1996 1997 Funding for the RFC Editor function is currently provided by the 1998 Internet Society. 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 Showalter Standards Track [Page 36] 2019