I have just recently implemented per-user whitelisting and blacklisting (and also per-domain) on our mail server. Blacklisting is simple enough, but whitelisting was somewhat more problematic.
I was wondering if either I missed something, or whether there are plans to develop some functionality to assist this.
Basically what I've done is
1. Check white list in acl_smtp_rcpt, if the recipient has whitelisted the sender, then I add the recipient's address to $acl_m9
2. After SPAM filtering in acl_smtp_data, before rejecting the message due to a high score, I check $acl_m9 is blank, if it isn't I accept the message.
3. I added a router which has the condition that the message is spam, $acl_m9 is not blank and that the original recpient is not found in the list $acl_m9. The router is a redirect with data set to :fail: (and various flags etc set to make sure it works properly with verify...)
BLURB:
It would be nice (!) if an extra option or two was added so that in the acl_smtp_rcpt you can construct a whitelist without resorting to custom vars and then when you deny a message, you can specify an additional option that means that the message isn't rejected, but any non-whitelisted recipients are "marked" so that the message is bounced immediately by the routing engine.