#!/bin/bash #Copyright 2003 William Stearns #GPL'd. #Is razor-report enough, or do we need to do some equivalent of spamassassin -r -d -a? if [ -z "$HOME" ]; then HOME="/home/wstearns/" fi LOCKFILE=$HOME/learnspam.lock [ -f "$LOCKFILE" ] && exit 0 trap "rm -f $LOCKFILE" EXIT touch $LOCKFILE renice +15 -p $$ >/dev/null 2>&1 #User settings: #wildcards OK, relative dirs, OK, absolute dirs aren't. SpamFolders="verified-spam" #wildcards OK, relative dirs, OK, absolute dirs aren't. HamFolders="verified-ham" #The following are the machines (and optional usernames) to which we'll #ssh to learn these spams into their respective bayesian databases. #The user we ssh under needs to have ssh set up, and needs write #privileges to the (we assume shared) bayesian and whitelist databases. ReportServers="localhost spamtrap@somemachine spam@somebox.domain.org" MailDir="$HOME/mail/" ArchiveDir="$HOME/mail/archives/" #End of user settings if [ -f $HOME/agent ]; then . $HOME/agent export SSH_AUTH_SOCK SSH_AGENT_PID SSH_ASKPASS else echo SSH agent info not in $HOME/agent, please place there. fi export LC_ALL=C cd "$MailDir" #So wildcards work for OneFolder in $SpamFolders ; do if [ -f "$MailDir/$OneFolder" ]; then echo "Reporting $MailDir/$OneFolder to the razor database." razor-report "$MailDir/$OneFolder" #I used to have pyzor grab the mailbox directly (with --mbox), #but it crashes on some messages, so any following ones never #get reported. This uses more forks, but gets almost all reported. formail -s pyzor report <"$MailDir/$OneFolder" formail -s dccproc -t many -o /dev/null <"$MailDir/$OneFolder" fi done for Server in $ReportServers ; do for OneFolder in $HamFolders ; do if [ -f "$MailDir/$OneFolder" ]; then echo "========== $Server: HHHH $OneFolder" #sa-learn --no-rebuild --showdots --mbox --ham "$MailDir/$OneFolder" cat "$MailDir/$OneFolder" | ssh -o BatchMode=yes -o Compression=yes $Server \ 'export TF=`mktemp -q /tmp/ham.XXXXXX >$TF && nice sa-learn --no-rebuild --showdots --mbox --ham $TF 2>&1 && [ -f $TF ] && rm -f $TF && echo Successful.' 2>/dev/null fi done for OneFolder in $SpamFolders ; do if [ -f "$MailDir/$OneFolder" ]; then echo "========== $Server: SSSS $OneFolder" #sa-learn --no-rebuild --showdots --mbox --spam "$MailDir/$OneFolder" cat "$MailDir/$OneFolder" | ssh -o BatchMode=yes -o Compression=yes $Server \ 'export TF=`mktemp -q /tmp/spam.XXXXXX >$TF && nice sa-learn --no-rebuild --showdots --mbox --spam $TF 2>&1 && [ -f $TF ] && rm -f $TF && echo Successful.' 2>/dev/null fi done echo "========== $Server: rebuild" #sa-learn --rebuild ssh -o BatchMode=yes $Server 'sa-learn --rebuild 2>&1' 2>/dev/null done DateStamp=`date +%Y%m%d%H%M` for OneFolder in $SpamFolders $HamFolders ; do if [ -f "$MailDir/$OneFolder" ]; then echo "Saving to $OneFolder.$DateStamp" mv "$MailDir/$OneFolder" "$ArchiveDir/$OneFolder.$DateStamp" bzip2 -9 "$ArchiveDir/$OneFolder.$DateStamp" fi done