Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #
- # Teach SpamAssassin from Maildirs
- # Junk and Inbox folders.
- #
- MYSQL_HOST="localhost"
- MYSQL_DATABASE="mail"
- MYSQL_USERNAME="username"
- MYSQL_PASSWORD="password"
- MYSQL_BIN="/usr/bin/mysql"
- SALEARNBIN="/usr/bin/sa-learn"
- MAILDIR="/var/mail/virtual"
- JUNKDIR=".Junk"
- echo "Updating SpamAssassin Bayesian spam/ham filter"
- # Get all enabled domains from the MySQL database
- ${MYSQL_BIN} --skip-column-names -u${MYSQL_USERNAME} -p${MYSQL_PASSWORD} -h${MYSQL_HOST} ${MYSQL_DATABASE} -e "SELECT domain FROM domain WHERE enabled='1'" | while read DOMAIN; do
- # Check if the domain exists and hold useraccounts.
- if [[ "$(ls -A ${MAILDIR}/${DOMAIN} 2>/dev/null)" ]]; then
- echo "Will go through all accounts in ${MAILDIR}/${DOMAIN}."
- ACCOUNTS=(`ls -A ${MAILDIR}/${DOMAIN}`)
- for USER in "${ACCOUNTS[@]}"; do
- # Check if ${USER} have a ${JUNKDIR} folder.
- if [[ -e "${MAILDIR}/${DOMAIN}/${USER}/${JUNKDIR}" ]]; then
- # Learning HAM and SPAM!
- echo "Will teach SpamAssassin from \"${USER}\" ${JUNKDIR}-folder!"
- HAM=${MAILDIR}/${DOMAIN}/${USER}/{cur,new}
- SPAM=${MAILDIR}/${DOMAIN}/${USER}/${JUNKDIR}/{cur,new}
- ${SALEARNBIN} --no-sync --spam ${SPAM} | while read LINE; do
- echo "${LINE}"
- done
- ${SALEARNBIN} --no-sync --ham ${HAM} | while read LINE; do
- echo "${LINE}"
- done
- else
- # Learning HAM only!
- echo "User \"${USER}\" does not have any ${JUNKDIR}-folder yet."
- HAM=${MAILDIR}/${DOMAIN}/${USER}/{cur,new}
- ${SALEARNBIN} --no-sync --ham ${HAM} | while read LINE; do
- echo "${LINE}"
- done
- fi
- done
- else
- echo "Domain ${DOMAIN} exist, but doesn't seem to hold any useraccounts."
- fi
- done
- echo ""
- echo "Syncing..."
- ${SALEARNBIN} --sync | while read LINE; do
- echo "${LINE}"
- done
- echo ""
- echo "Statistics:"
- sa-learn --dump magic | while read LINE; do
- echo "${LINE}"
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement