...or, "How I know who the dirty rotten bastard is that sold my email address."
Postfix has a feature called "address extensions." What does this mean?
Suppose I have an email address, foo@example.com. Address Extensions mean that you can send email to foo+bar@example.com, and I'll receive it, but it shows 'To: foo+bar@example.com' instead of 'To: foo@example.com'.
So, what's the big deal? Well, when I register for a website, say, wesellemail.com, I can register with the address foo+wesellemail@example.com, and then when I start receiving spam addressed to foo+wesellemail@example.com, I'll know who it was that sold my email address to spammers.
The problem with this is that a lot of websites won't believe that you can have a '+' in an email address. Well, fine. I'll just make postfix use '-' as well, right?
WRONG. Postfix can only handle one address extension delimiter, and I don't want to break backwards compatibility by changing it to something that's not '+'.
This is where recipient canonical maps come into play. Basically, these maps translate recipient addresses (either on incoming or outgoing mail) according to a map file.
"But, Patrick," you say, "The nice thing about address extensions is that they're ad hoc, and you don't have to update a file every time you make up a new one! Surely canonical maps can't do that?"
To which I say, "Ah, but Postfix has regular expression maps, which support replacement with positional parameters." So, simply:
/etc/postfix/main.cf:
recipient_canonical_maps = regexp:/etc/postfix/canonical
/etc/postfix/canonical:
/pdbogen-(.*)/ pdbogen+${1}
...And voila. Any mail received for pdbogen-foo is rewritten as pdbogen+foo, and all is right in the world.