Second rule isn't apply when first rule matches

daniel_1983 at protonmail.com daniel_1983 at protonmail.com
Mon May 28 15:18:24 EEST 2018


Dear list,
I want to define two concurrent rules : 
1. I want to flag an e-mail containing the word "cloud" in the body
2. I want to move mail sent explicitly to me (as opposed to mail sent to an alias I am part of) going to "INOBX.I must answere this"

If I put rule (1) first, everything works as expected. If put rule (2) first, only that rule applies.

Here's a small test case you should be able to reproduce on your setup. 

Let's work on this fake test e-mail :

$ cat testmail.eml

Date: Mon, 28 May 2018 12:41:53 +0100
From: friend at otherdomain.tld
To: me at mydomain.tld
Subject: dur dur la vie

mon frère, le cloud c'est le top du top


Here's the first, broken version of the script

$ cat test.sieve

require ["body","fileinto","imap4flags","vacation"];

# rule:[Mail about me]                                                                                                                                                                                                                       
if anyof (header :contains "to" "me at mydomain.tld", body :text :contains "ahmed")
{
  fileinto "INBOX.I must answere this";
}

# rule:[Mail about the Cloud]                                                                                                                                                                                                                
if body :text :contains "cloud"
{
        addflag "\\Flagged";
}


Let's test it out, the two rules should be applied : 


$ sieve-test test.sieve testmail.eml 

Performed actions:

 * store message in folder: INBOX.I must answere

Implicit keep:

  (none)

sieve-test(root): Info: final result: success
$ 



Notice that the last rule isn't applied although it matches. Now we invert the order of the rules and apply the script on the same test e-mail : 


$ cat test.sieve

require ["body","fileinto","imap4flags","vacation"];
# rule:[Mail about the Cloud]                                                                                                                                                                                                                
if body :text :contains "cloud"
{
        addflag "\\Flagged";
}

# rule:[Mail about me]                                                                                                                                                                                                                       
if anyof (header :contains "to" "me at mydomain.tld", body :text :contains "ahmed")
{
  fileinto "INBOX.I must answere this";
}



Running the test again : 

$ sieve-test test.sieve testmail.eml 

Performed actions:

 * store message in folder: INBOX.I must answere
        + add IMAP flags: \flagged

Implicit keep:

  (none)

sieve-test(root): Info: final result: success
$

The IMAP flag was set !


Any ideas ?



More information about the dovecot mailing list