[Dovecot] Sieve script problem (don't know if is it possible to do this)

Yanko Hernández Álvarez yhdezalvarez at gmail.com
Fri Nov 15 16:20:57 EET 2013


> This should solve the first two:
>
> require "fileinto";
> require "relational";
>
> if address :is :domain "To" "dept.example.com" {
>     fileinto "Dept";
> }
>
> if allof (
>   address :value "ne" :domain "To" "dept.example.com",
>   anyof (
>     address :matches :domain "To" "*.example.com",
>     address :is :domain "To" "example.com")) {
>     fileinto "Company";
> }

It doesn't work...
----------------------------
$ cat > Test.eml
From: Yanko Hdez Alvarez <myuser at dept.example.com>
To: Jorge Naranjo <otheruser at dept.example.com>, The Boss
<boss at example.com>, Yanko Hernandez Alvarez <yhdezalvarez at gmail.com>
Subject: This is a Test

This is a test
^d
$  cat > Test.sieve
require "fileinto";
require "relational";

if address :is :domain "To" "dept.example.com" {
    fileinto "Dept";
}

if allof (
  address :value "ne" :domain "To" "dept.example.com",
  anyof (
    address :matches :domain "To" "*.example.com",
    address :is :domain "To" "example.com")) {
    fileinto "Company";
}
^d
$ sieve-test -t- -Tlevel=matching Test.sieve Test.eml

      ## Started executing script 'Test'
   4: address test
   4:   starting `:is' match with `i;ascii-casemap' comparator:
   4:   extracting `To' headers from message
   4:   parsing address header value `Jorge Naranjo
<otheruser at dept.example.com>, The Boss <boss at example.com>, Yank...'
   4:   extracting `domain' part from address `otheruser at dept.example.com'
   4:   matching value `dept.example.com'
   4:     with key `dept.example.com' => 1
   4:   finishing match with result: matched
   4: jump if result is false
   4:   not jumping
   5: fileinto action
   5:   store message in mailbox `Dept'
   8: address test
   8:   starting `:value-ne' match with `i;ascii-casemap' comparator:
   8:   extracting `To' headers from message
   8:   parsing address header value `Jorge Naranjo
<otheruser at dept.example.com>, The Boss <boss at example.com>, Yank...'
   8:   extracting `domain' part from address `otheruser at dept.example.com'
   8:   matching value `dept.example.com'
   8:     with key `dept.example.com' => 0
(8a):  extracting `domain' part from address `boss at example.com'
   8:   matching value `example.com'
(8b):    with key `dept.example.com' => 1
   8:   finishing match with result: matched
   9: jump if result is false
   9:   not jumping
  11: address test
  11:   starting `:matches' match with `i;ascii-casemap' comparator:
  11:   extracting `To' headers from message
  11:   parsing address header value `Jorge Naranjo
<otheruser at dept.example.com>, The Boss <boss at example.com>, Yank...'
(11a):  extracting `domain' part from address `otheruser at dept.example.com'
  11:   matching value `dept.example.com'
(11b):     with key `*.example.com' => 1
  11:   finishing match with result: matched
  11: jump if result is true
  11:   jumping to line 13
  13: fileinto action
  13:   store message in mailbox `Company'
        ## Finished executing script 'Test'


Performed actions:

 * store message in folder: Dept
 * store message in folder: Company

Implicit keep:

  (none)

sieve-test(root): Info: final result: success
----------------------------
the rule (address :value "ne" :domain "To" "dept.example.com") is
tested against `boss at example.com' (8a) successfully (8b), but the
(address :matches :domain "To" "*.example.com") is not, is instead
tested against `otheruser at dept.example.com' (11a) with success (11b),
but is not what we intended... ("To: Jorge Naranjo
<otheruser at dept.example.com>, Yanko Hernandez Alvarez
<yhdezalvarez at gmail.com>" would defeat this sieve script)...


More information about the dovecot mailing list