Linux – Exim4: Configure catchall on multiple domains to forward mail to external addresses

emaileximlinuxmail-forwardingUbuntu

UPDATE: Thanks for responses on this but I'm going to drop exim and try Postfix.


My question is pretty similar to this one. I want to configure exim4 (on ubuntu 10.04) to forward/redirect all e-mail on a domain to an external address. My server hosts multiple domains. This is a pretty straight forward setup but I'm struggling to get it working.

Example:

*@domain-a.com > whatever@gmail.com

*@domain-b.com > mr_bob@hotmail.com

*@domain-c.com > fred@flintstone.com

I tried adding the following to /etc/exim4/exim4.conf.template but the director isn't matching:

domaina_director:
  driver = redirect
  domains = dsearch;/etc/exim4/fwd_domains
  data = ${lookup{$local_part}lsearch{/etc/exim4/fwd_domains/$domain}}
  no_more

I've created the directory /etc/exim4/fwd_domains and in that, the file domain-a.com:

# cat domain-a.com 
*: whatever@gmail.com

Update: I'm not convinced this syntax is correct. More importantly, my director doesn't seem to be picked up before reaching this point.

Run update-exim4.conf & restart exim4.

Send test e-mail:

# mail fred@domain-a.com
Subject: jdhfdjks
dsfhjdshf
.
Cc: 

This appears in /var/log/exim4/mainlog:

2010-07-07 22:21:51 1OWd03-0002Zv-Kx <= root@primarydomain U=root P=local S=332
2010-07-07 22:21:51 1OWd03-0002Zv-Kx ** fred@domain-a.com: Unrouteable address
2010-07-07 22:21:51 1OWd03-0002Zx-MB <= <> R=1OWd03-0002Zv-Kx U=Debian-exim P=local S=1111
2010-07-07 22:21:51 1OWd03-0002Zv-Kx Completed
2010-07-07 22:21:51 1OWd03-0002Zx-MB => /var/mail/mail <root@primarydomain> R=mail4root T=address_file
2010-07-07 22:21:51 1OWd03-0002Zx-MB Completed

My director doesn't fire and the e-mail ends up in root's mailbox. Any ideas?

Best Answer

Use a wildcard search 'lsearch*' instead of 'lsearch'. This will match the wildcards.

domain_aliases:
  driver = redirect
  domains = dsearch;/etc/exim4/fwd_domains
  data = ${lookup{$local_part}lsearch*{/etc/exim4/fwd_domains/$domain}}
  no_more

Alternatively you can put your aliases in /etc/aliases and use a router like this. You can change the domains option as appropriate for your configuration. The above dseach would be appropriate.

domain_aliases:
  driver = redirect
  domains = ! +local_domains : +relay_to_domains
  data = ${lookup{$local_part@domain}lsearch*{/etc/aliases}}
  no_more

This requires aliases like:

*@domain-a.com : whatever@gmail.com
*@domain-b.com : mr_bob@hotmail.com
*@domain-c.com : fred@flintstone.com