The script below requires a mail transfer agent such as Dovcot that is set up to place mailboxes under the user's home directories in /home
. Upon referencing this script from crontab, it will periodically scan all user mailboxes for the Junk
folder and then automatically train the Spamassassin bayes filter.
#!/bin/sh ########################################################################### ## Copyright (C) Wizardry and Steamworks 2017 - License: GNU GPLv3 ## ########################################################################### # A script to make amavis / spamassassin learn spam mail through bayes # # from all the mailboxes present on the system. # # # # For this script to work, a mail-server must be configured by enabling # # IMAP mailboxes stored in the user's home directory, users should have a # # virtual mailbox "Junk" created into which they can place spam E-Mails. # # After that, you can configure the script and reference it in crontab. # ########################################################################### ########################################################################### # CONFIGURATION # ########################################################################### # The name of the Junk folder - under Dovecot, this is commonly "Junk" JUNK_FOLDER="Junk" # The path to the spamassassin database. SPAMASSASSIN_DATABASE="/var/lib/amavis/.spamassassin" # The mailbox type can be either: Maildir, mail or sdbox MAILBOX_TYPE="sdbox" ########################################################################### # INTERNALS # ########################################################################### # Train spam from junk folder. for i in `find /home/*/$MAILBOX_TYPE/ -type d -name "$JUNK_FOLDER"`; do HOME_FOLDER=`echo $i | awk -F"/" '{ print $3 }'` sa-learn --use-ignores \ --dbpath "$SPAMASSASSIN_DATABASE" \ -p "/home/$HOME_FOLDER/.spamassassin/user_prefs" \ --spam "$i" > /dev/null 2>&1 done # Sync databases sa-learn --dbpath "$SPAMASSASSIN_DATABASE" --sync > /dev/null 2>&1