Pigeonhole
This is useful in combination with rspamd
Copied from here
Installation
$ doas pkg_add dovecot-pigeonhole
Setup
On /etc/dovecot/20-imap.conf
:
protocol imap {
mail_plugins = $mail_plugins imap_sieve
}
On /etc/dovecot/90-plugin.conf
:
plugin {
sieve_plugins = sieve_imapsieve sieve_extprograms
sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.environment
imapsieve_mailbox1_name = Junk
imapsieve_mailbox1_causes = COPY APPEND
imapsieve_mailbox1_before = file:/usr/local/lib/dovecot/sieve/report-spam.sieve
imapsieve_mailbox2_name = *
imapsieve_mailbox2_from = Junk
imapsieve_mailbox2_causes = COPY
imapsieve_mailbox2_before = file:/usr/local/lib/dovecot/sieve/report-ham.sieve
imapsieve_mailbox3_name = Inbox
imapsieve_mailbox3_causes = APPEND
imapsieve_mailbox3_before = file:/usr/local/lib/dovecot/sieve/report-ham.sieve
sieve_pipe_bin_dir = /usr/local/lib/dovecot/sieve
}
On /usr/local/lib/dovecot/sieve/report-ham.sieve
:
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if environment :matches "imap.mailbox" "*" {
set "mailbox" "${1}";
}
if string "${mailbox}" "Trash" {
stop;
}
if environment :matches "imap.user" "*" {
set "username" "${1}";
}
pipe :copy "sa-learn-ham.sh" [ "${username}" ];
On /usr/local/lib/dovecot/sieve/report-spam.sieve
:
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if environment :matches "imap.user" "*" {
set "username" "${1}";
}
pipe :copy "sa-learn-spam.sh" [ "${username}" ];
On /usr/local/lib/dovecot/sieve/sa-learn-ham.sh
:
#!/bin/sh
exec /usr/local/bin/rspamc -d "${1}" learn_ham
On /usr/local/lib/dovecot/sieve/sa-learn-spam.sh
#!/bin/sh
exec /usr/local/bin/rspamc -d "${1}" learn_ham
Grant mode 755 for the above shell scripts
Grant +w mode for the sieve directory (with -R)
Change directory to the sieve directory and run as root:
$ doas sievec report-ham.sieve
$ doas sievec report-spam.sieve
Restart dovecot with rcctl restart dovecot
.