You may find yourself in a situation where you may need to implement a “catch all” email address, i.e. every email that is directed to your domain regardless whether the user exits or not, not to be rejected but instead directed to a single mailbox. There are various approaches to the problem, and we will see some here:
First, the easy way:
Using FEATURE(`virtusertable’) one can do that in a single line:
@example.com catch-all@delivery.host.name
You can even exclude some addresses and have email delivered to their own mailbox instead of catch-all:
user1@example.com user1@delivery.host.name user2@example.com user2@delivery.host.name @example.com catch-all@delivery.host.name
The sendmail.mc way:
Normally the above trick which is adequately described in cf/README and the bat book, should be enough. But there may be cases that it is not the solution that you want, or simply because it-is-not-invented-here. For example you may want to redirect to catch-all all email directed to existing users of the system, as opposed to the virtusertable trick which does this unconditionally:
LOCAL_CONFIG Kuser user -m -a.FOUND LOCAL_RULE_0 R$- < @ $=w . > $* $: $(user $1 $) < @ $2 . > $3 R$- . FOUND < @ $=w . > $* $@ catch-all < @ $2 . > $3
Or, you may want to redirect to the catch-all address all email directed to non-existing users of the system:
MODIFY_MAILER_FLAGS(`LOCAL', `-w')dnl FEATURE(`local_procmail')dnl MAILER(`smtp')dnl LOCAL_CONFIG Kuser user -m -a.FOUND LOCAL_RULE_0 R$- < @ $=w . > $* $(user $1 $) R$- . FOUND $#local $: $1 R$- $#local $: bit-bucket
In fact (with bit-bucket aliased to /dev/null) the above example silently discards every email not directed to an existing user.