When hosting e-mail, you'll have to deal with spam unfortunately. We use Amavis with spamassassin and ClamAV antivirus. This setup works great fo 95% of the time but there are always some spam messages that pass the spamfilter. For this you can train spamassassin to recognize the spam better.
I came across a nice dovecot plugin that is very simple to implement. Users can classify messages as spam simply by moving the messages into the spam folder. Taking messages out of the spam folder tells spamassassin that this message was in fact not spam.
Here's a short how to on the installation. I assume you have dovecot+spamasssin running already:
$ apt-get install dovecot-antispam
Add the "antispam" plugin to /etc/dovecot/conf.d/20-imap.conf (your plugins list may be different):
mail_plugins = $mail_plugins quota imap_quota antispam
Add the following to /etc/dovecot/conf.d/90-plugin.conf:
plugin {
antispam_backend = pipe
antispam_debug_target = syslog
antispam_verbose_debug = 1
antispam_signature= X-Spam-Status
antispam_signature_missing= move
antispam_mail_sendmail_args= --username=%u
antispam_mail_spam = --spam
antispam_mail_notspam = --ham
antispam_mail_sendmail = /usr/bin/sa-learn-pipe.sh
antispam_spam = SPAM;Spam
antispam_unsure = Virus
antispam_trash = Trash;trash
}
Create /usr/bin/sa-learn-pipe.sh:
#!/bin/bash
echo /usr/bin/sa-learn $* /tmp/sendmail-msg-$$.txt
echo "$$-start ($*)" >> /tmp/sa-learn-pipe.log
#echo $* > /tmp/sendmail-parms.txt
cat<&0 >> /tmp/sendmail-msg-$$.txt
/usr/bin/sa-learn $* /tmp/sendmail-msg-$$.txt
rm -f /tmp/sendmail-msg-$$.txt
#echo "$$-end" >> /tmp/sa-learn-pipe.log
exit 0
Make this script executable
$ chmod +x /usr/bin/sa-learn-pipe.sh
Restart dovecot
$ service dovecot restart
Now move a message into the spam folder and watch /var/log/syslog. It should have something like this:
Oct 21 15:16:25 debian imap: antispam: mail copy: src spam: 0, dst spam: 1, src unsure: 0
Oct 21 15:16:25 debian imap: antispam: running mailtrain backend program /usr/bin/sa-learn-pipe.sh
Oct 21 15:16:25 debian imap: antispam: running mailtrain backend program /usr/bin/sa-learn-pipe.sh
Oct 21 15:16:25 debian imap: antispam: running mailtrain backend program parameter 1 --username=admin@intermesh.dev
Oct 21 15:16:25 debian imap: antispam: running mailtrain backend program parameter 2 --spam
After this test you should disable debugging in /etc/dovecot/conf.d/90-plugin.conf