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 {