A quick summary of how I fit all these together on a BSD system.
First install each from ports. Then configure fetchmail to fetch your mail from whereever it is, my .fetchmailrc file looks something like this:
# Fetchmailrc
#
poll mail.mailserver.com protocol pop3 no dns
user myusername
pass mypassword
mda "/usr/local/bin/maildrop -d %T"
no keep
fetchall
Notice the mda line which will invoke maildrop as the Mail Delivery Agent. Then write your maildrop filter. Mine is pretty simple, all it does is invoke Spam Assassin's client to scan the mail. I use pine to filter the messages into different folders so I don't have any more rules :
xfilter "/usr/local/bin/spamc"
And finally make sure Spam Assassin is running as a daemon, add this line to /etc/rc.conf:
spamd_enable="YES"
and then start the daemon:
/usr/local/etc/rc.d/sa-spamd.sh start
Then all you have to do is run fetchmail to get your mail, and your mail client to read it. Oh, and add filters to your mail client to actually filter the spam. I'll leave that exercise to the reader.