Here's a patch that will cause spamc to return the failure code when -x is specified, regardless of the -e flag:
--- spamassassin-3.1.7/spamc/spamc.c 2006-09-29 06:06:44.000000000 -0700 +++ spamassassin-3.1.7-new/spamc/spamc.c 2007-01-11 18:59:32.594271748 -0800 @@ -819,6 +819,9 @@ } free(username); + if (ret != EX_OK && (flags & SPAMC_SAFE_FALLBACK) == 0) + goto finish; + /* FAIL: */ get_output_fd(&out_fd); Now, one COULD just use a line like this in master.cf: spamassassin unix - n n - - pipe flags=q user=nobody argv=/usr/local/bin/spamc -x -u $(recipient) -e /usr/sbin/sendmail -oi -f $(sender) $(recipient) HOWEVER, this will cause mail to bounce if your spamd is unavailable. This is because spamc can return any one of several error codes. Postfix will only queue mail if the return code is specifically EX_TEMPFAIL. I prefer all mail to queue up if spamd is down for some reason. So, I wrote a script that does that: /usr/local/bin/spam_filter: #!/bin/bash RECIPIENT=$1 SENDER=$2 EX_OK=0 EX_TEMPFAIL=75 if /usr/local/bin/spamc -x -u "$RECIPIENT" -e /usr/sbin/sendmail -oi -f "$SENDER" "$RECIPIENT"; then exit $EX_OK; else exit $EX_TEMPFAIL; fi Then I use a line like this in master.cf: spamassassin unix - n n - - pipe flags=q user=nobody argv=/usr/local/bin/spam_filter $(recipient) $(sender) Hope this helps! -- Kevin