Sieve Rule: What am I missing here?
Stephan Bosch
stephan at rename-it.nl
Thu Apr 30 21:00:23 UTC 2015
On 4/30/2015 9:15 PM, Larry Rosenman wrote:
> I have a rule that sends all mail from root to a mailbox, but I want it to
> NOT send mail from mailing-lists there.
>
> if allof (address :contains :localpart "From" "root",
> not anyof(exists ["List-Id","List-ID","Mailing-List",
> "X-List-Name","List-Post"]))
> {
> fileinto "root-mail";
> stop;
> }
>
>
> What am I missing in the AnyOf part? Or am I totally messed up?
A trace of the script shows the following for the provided example message:
"
$ sieve-test -t - -Tlevel=matching ~/script.sieve ~/message.eml
## Started executing script 'script'
3: address test
3: starting `:contains' match with `i;ascii-casemap' comparator:
3: extracting `From' headers from message
3: parsing address header value `m.de.groot <m.de.groot at dmdg.nl>'
3: extracting `localpart' part from address <m.de.groot at dmdg.nl>
3: matching value `m.de.groot'
3: with key `root' => 1
3: finishing match with result: matched
3: jump if result is false
3: not jumping
4: exists test
4: header `List-Id' exists
4: header `List-ID' exists
4: header `Mailing-List' is missing
4: headers are missing
5: jump if result is true
5: not jumping
7: fileinto action
7: store message in mailbox `root-mail'
8: stop command; end all script execution
## Finished executing script 'frop'
Performed actions:
* store message in folder: root-mail
Implicit keep:
(none)
sieve-test(stephan): Info: final result: success
"
So, the "exists" test returns false, because not all listed headers
exist, which conforms to the specification:
RFC 5228:
"
5.5. Test exists
Usage: exists <header-names: string-list>
The "exists" test is true if the headers listed in the header-names
argument exist within the message. All of the headers must exist or
the test is false.
"
Also, your use of "anyof" is useless. The following should work:
"
require "fileinto";
if allof (address :contains :localpart "From" "root",
not anyof(
exists "List-Id",
exists "List-ID",
exists "Mailing-List",
exists "X-List-Name",
exists "List-Post"))
{
fileinto "root-mail";
stop;
}
"
Regards,
Stephan.
More information about the dovecot
mailing list