Exim: Change sender address when sending mails out of local network

We have a working exim setup at a site, where users can send and receive mails. We are trying to setup a server to send some warnings and errors using email to an address that is outside the local network.

The problem is:

The program that sends the mails sends them using the username it runs under and the local hostname of the server. This cause the mails to have a sender of format: [email protected]. Exim sends these mails to the ISP's SMTP server, which rejects the mails as they have an illegal or unverifiable sender (the internal address).

I'm thinking I should configure exim to rewrite the sender when:

  • sender's domain is on the local network
  • receiver's domain is outside the local network

I tried setting some kind of rewriting in the exim config, but did not manage to get it to work. I'd show what I have tried, but I ran out of time on the last visit to the site, and had to revert to the original version losing all the changes I tried.


Solution 1:

begin rewrite
[email protected]   [email protected]   SFfrs

The flags have the following meanings:

  1. S - Do all rewriting at SMTP time. This means that all of the following flags are done immediately as the data they apply to is coming in, not delayed until later.
  2. F - Rewrite the envelope from field.
  3. f - Rewrite the From: header field.
  4. r - Rewrite the Reply-To: header field.
  5. s - Rewrite the Sender-To: header field.

Read Chapter 31 of the Exim Specification for more detail on message rewriting

Solution 2:

The file /etc/email-addresses should handle the problem. This is a standard part of the Exim distribution. You will need to configure one record for each local user sending email.

Try a line to /etc/email-addresses like:

 myapp:   [email protected]

On your MX server add an alias like:

 donotreply:    :blackhole:

Use a Reply-to: header to allow the recipient to reply to the message.

The file /etc/email-addresses is used the following rewrite code, which should be at the start of the rewrite section of the configuration file.

*@+local_domains "${lookup{${local_part}}lsearch{/etc/email-addresses}\
                  {$value}fail}" Ffrs