From daf8c4bad32292f85cbf4e5c902bbc38fe6533ce Mon Sep 17 00:00:00 2001 From: Pierre Jaury Date: Thu, 18 Aug 2016 20:09:11 +0200 Subject: [PATCH] Honor per-user spam settings, fixes #21 --- dovecot/conf/pigeonhole-sieve.dict | 14 ++++++++++++++ dovecot/sieve/after.sieve | 14 ++++++++++---- rmilter/rmilter.conf | 2 ++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/dovecot/conf/pigeonhole-sieve.dict b/dovecot/conf/pigeonhole-sieve.dict index 911f47da..e446490b 100644 --- a/dovecot/conf/pigeonhole-sieve.dict +++ b/dovecot/conf/pigeonhole-sieve.dict @@ -1,5 +1,19 @@ connect = /data/freeposte.db +map { + pattern = priv/spam_enabled + table = user + username_field = email + value_field = spam_enabled +} + +map { + pattern = priv/spam_threshold + table = user + username_field = email + value_field = spam_threshold +} + map { pattern = priv/reply_enabled table = user diff --git a/dovecot/sieve/after.sieve b/dovecot/sieve/after.sieve index c0690980..44d62265 100644 --- a/dovecot/sieve/after.sieve +++ b/dovecot/sieve/after.sieve @@ -1,6 +1,12 @@ -require ["fileinto", "envelope", "mailbox", "imap4flags"]; +require ["variables", "fileinto", "envelope", "mailbox", "imap4flags", "regex", "relational", "comparator-i;ascii-numeric", "vnd.dovecot.extdata"]; -if header :contains "X-Spam" "YES" { - setflag "\\seen"; - fileinto :create "Junk"; + +if string :is "${extdata.spam_enabled}" "1" { + if header :matches "X-Spam-Status" "* score=*" { + if string :value "ge" :comparator "i;ascii-numeric" "${2}" "${extdata.spam_threshold}" { + setflag "\\seen"; + fileinto :create "Junk"; + stop; + } + } } diff --git a/rmilter/rmilter.conf b/rmilter/rmilter.conf index 8671b8e5..ed00a750 100644 --- a/rmilter/rmilter.conf +++ b/rmilter/rmilter.conf @@ -59,6 +59,8 @@ spamd { rspamd_metric = "default"; # Do not reject, add header spamd_never_reject = yes; + # Add extended spam headers + extended_spam_headers = yes; }; redis {