Dovecot /
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
.