You should start with SpamBouncer. You’ll be very happy with the results.
After that, consider SpamProbe. Create a nonspam and spam folder and train spamprobe by moving true positives and true negatives into those folders. Also give it definite negative folders (like your Archive folder) for training.
Of course, be sure you’re using IMAP. Then use Mozilla Thunderbird. I have Thunderbird stamp my mail as spam/nonspam, but I do NOT have it sort it. This lets me review my IMAP spam folder and quickly spot false positives.
Also consider building textfile lists (whitelists, bulk lists, etc.) and use procmail to scan through these lists. This is much easier than building static procmail rules over and over again. Try something like this (replace STAR with *):# Assume this message is NOT whitelisted
TEDWHITE=no
:0
STAR ? ${TEST} -f ${TEDWHITELIST}
{
:0
STAR ? ${FORMAIL} -zxCc: \
-zxDelivered-To: \
-zxFrom: \
-zxList-ID: \
-zxList-Post: \
-zxList-Unsubscribe: \
-zxMailing-List: \
-zxResent-By: \
-zxResent-From: \
-zxResent-Sender: \
-zxResent-To: \
-zxReply-To: \
-zxSender: \
-zxTo: \
-zxX-Apparently-To: \
-zxX-BeenThere: \
-zxX-List: \
-zxX-Mailing-List: \
| ${GREP} -i -f ${TEDWHITELIST}
{ TEDWHITE=yes }
}
That snippet was basically stolen from SpamBouncer. Below, in your procmail config, use something like:
:0
STAR TEDWHITE ?? yes
{
:0 f
| ${FORMAIL} -A”X-TedProcmailRC: INBOX (White listed)”
:0:
”$INBOX”
}
Of course, you’ll need to define things like $FORMAIL, $GREP, $INBOX, $TEDWHITELIST, and $TEST.
I hope that helps. I think SpamBouncer, SpamProbe, and your own blacklists, whitelists, and bulk lists will do a great job at keeping spam out of your inbox. I get thousands of spam per week, and it’s rare (only a few times a month) that any spam gets into my inbox (and false positives are also rare too).

