I am a bit at a loss here with Sieve (pigeonhole) and the spamtest extension. I am using Dovecot 2.1.7 (backported to Debian squeeze), which comes with Pigeonhole 0.3.0. Messages are scanned with SpamAssassin, which adds a header like X-Spam-Status: Yes, score=84.6 required=5.0 tests=? and so I configured spamtest in conf.d/90-plugin.conf like so: sieve_spamtest_status_type = score sieve_spamtest_status_header = X-Spam-Status: [^,]*, score=(-?[[:digit:]]+\.[[:digit:]]).* sieve_spamtest_max_header = X-Spam-Status: [^,]*, score=[^[:space:]]+ required=(-?[[:digit:]]+\.[[:digit:]]).* I tested those regular expressions with sed -r, e.g. % sed -rne "s@^X-Spam-Status: [^,]*, score=-?[[:digit:]]+\.[[:digit:]] required=(-?[[:digit:]]+\.[[:digit:]]).*@\1 at p" mailfile 5.0 and they work. Unfortunately, in sieve scripts, the spamtest value is always 0, which is indicative of the spamtest "not having run", which in this case I assume means that the regular expression didn't match. Am I right in assuming that the matching happens at the time of evaluation, and so adding the headers using vnd.dovecot.filter just before works? Or does the spamtest matching happen before the sieve scripts are executed? Can you see any other reason why spamtest always yields a value of 0? Thanks, -- martin | http://madduck.net/ | http://two.sentenc.es/ "those who are faithful know only the trivial side of love: it is the faithless who know love's tragedies." -- oscar wilde spamtraps: madduck.bogus at madduck.net -------------- next part -------------- A non-text attachment was scrubbed... Name: digital_signature_gpg.asc Type: application/pgp-signature Size: 1124 bytes Desc: Digital signature (see http://martin-krafft.net/gpg/sig-policy/999bbcc4/current) URL: <http://dovecot.org/pipermail/dovecot/attachments/20131227/334f4a67/attachment.bin>
also sprach martin f krafft <madduck at madduck.net> [2013-12-27 18:04 +1300]:> I tested those regular expressions with sed -r, e.g. > > % sed -rne "s@^X-Spam-Status: [^,]*, score=-?[[:digit:]]+\.[[:digit:]] required=(-?[[:digit:]]+\.[[:digit:]]).*@\1 at p" mailfile > 5.0 > > and they work. > > Unfortunately, in sieve scripts, the spamtest value is always 0, > which is indicative of the spamtest "not having run", which in this > case I assume means that the regular expression didn't match.The documentation talks about "POSIX regular expressions", but the examples use extended regexps. This should probably be clarified. However, even if I remove the -r in the above sed call and escape the characters +?(), it does not work. Character classes, such as [:digit:] are available in regular POSIX regexps, to my knowledge. So: the documentation needs clarification, but my problem remains. Yes, I could just "text"-match against X-Spam-Flag (which I now do), but I'd prefer it if the user could match against a spam probability, e.g. already filter if SpamAssassin assigns 6 out of 10 required points. Thanks, -- martin | http://madduck.net/ | http://two.sentenc.es/ "geld ist das brecheisen der macht." - friedrich nietzsche spamtraps: madduck.bogus at madduck.net -------------- next part -------------- A non-text attachment was scrubbed... Name: digital_signature_gpg.asc Type: application/pgp-signature Size: 1124 bytes Desc: Digital signature (see http://martin-krafft.net/gpg/sig-policy/999bbcc4/current) URL: <http://dovecot.org/pipermail/dovecot/attachments/20131228/c72f652a/attachment.bin>
On 12/27/2013 6:04 AM, martin f krafft wrote:> X-Spam-Status: Yes, score=84.6 required=5.0 tests=? > > and so I configured spamtest in conf.d/90-plugin.conf like so: > > sieve_spamtest_status_type = score > sieve_spamtest_status_header = X-Spam-Status: [^,]*,score=(-?[[:digit:]]+\.[[:digit:]]).* This configuration is incomplete. Your logs should show an error about that. Testing with sieve-test shows: stephan at klara:~/src/devel$ sieve-test ~/frop.sieve ~/frop.eml sieve-test(stephan): Error: sieve: spamtest: none of sieve_spamtest_max_header or sieve_spamtest_max_value is configured sieve-test(stephan): Error: sieve: spamtest: none of sieve_spamtest_max_header or sieve_spamtest_max_value is configured [...] For example, your config should look like this (with max value 10; i.e., the value beyond which it is spam with 100% certainty): sieve_spamtest_status_type = score sieve_spamtest_status_header = X-Spam-Status: [^,]*, score=(-?[[:digit:]]+\.[[:digit:]]).* sieve_spamtest_max_value = 10 The sieve-test tool can be used to verify: stephan at klara:~/src/devel$ sieve-test -t - -Tlevel=matching ~/frop.sieve ~/frop.eml ## Started executing script 'frop' 3: spamtest test [percent=false] 3: extracted score=84.600, max=10.000, ratio=100 % 3: starting `:is' match with `i;ascii-casemap' comparator: 3: matching value `10' 3: with key `0' => 0 3: finishing match with result: not matched 3: jump if result is false 3: jumping to line 4 ## Finished executing script 'frop' [...] Regards, Stephan.