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@dmdg.nl>'
3: extracting localpart' part from address <m.de.groot@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.