Debian – Sending mail from multiple hosts on one instance using Amazon SES and Exim4

amazon ec2amazon-sesdebianexim

Suppose that I have some instance running in Amazon EC2:

 somehost.example.com

This instance hosts some number of applications or websites for other domains:

 www.example.com
 web.example.org
 etc.

This host is configured to use exim4 to interface with Amazon SES for sending mail. In Amazon SES, each domain is separately allowed as a valid sender:

www.example.com
web.example.org
etc.

However, as one would expect, the FQDN of the instance and the executing user are being used as the sender of each email, so all emails appear to originate from:

www-data@somehost.example.com

I can certainly configure Amazon SES to allow mails from somehost.example.com, and I can further add a 'From: "Whoever" <whoever@example.com>' envelope to the emails at the application level.

What I am wondering is, (a) is this an acceptable solution, and if not, (b) what configuration might I explore to show that mail for each domain (e.g. example.com) appears to originate directly from a "something.example.com" server rather than the actual host. I assume this involves creating a hostname.example.com DNS entry and pointing it to the server, but beyond that I am lost in how to set up exim or the application to allow this.

Best Answer

You can configure exim to hide the local mail name in outgoing mail. In addition you should configure your main exim server to use a smarthost, in this case the amazon SES thing.

Let's assume each site runs on its own virtual server, www.example.com (192.0.2.1) and web.example.com (192.0.2.2) and your email server is on yet another virtual server, smtp.example.com (192.0.2.10).

To reconfigure exim4 you can run:

dpkg-reconfigure exim4-config

On the main email server smtp.example.com configure it as follows (I only listed the relevant ones):

  • General type of mail configuration: mail sent by smarthost; received via SMTP or fetchmail

  • System mail name: smtp.example.com

  • Machines to relay mail for: 192.0.2.1;192.0.2.2

  • IP address or host name of the outgoing smarthost: THE_AMAZON_SES_IP

  • Hide local mail name in outgoing mail? Yes

  • Visible domain name for local users: example.com

On the other servers configure exim like this, using www.example.com as example host:

  • General type of mail configuration: mail sent by smarthost; no local mail

  • System mail name: www.example.com

  • Other destinations for which mail is accepted: LEAVE_EMPTY <-- this will cause "The option to hide the local mail name in outgoing mail was enabled"

  • Visible domain name for local users: www.example.com

  • IP address or host name of the outgoing smarthost: 192.0.2.10

In case you do only have one server, then just ignore the second step. Your main server should send out emails hiding the local server name and send them out as coming from example.com.