SendGrid with Exim on cPanel Server

Setting up your cPanel server to send through a third-party mail server is very easy to do, if you understand the basics of how cPanel builds its Exim configs. You never want to edit your exim.conf file directly – your changes will be wiped out any time a cPanel update runs or someone makes a change via the Exim Configuration Editor in WHM.  Below is a quick guide on setting up a custom mail router with a provider like SendGrid, which in turn will route all outbound email through the external mail service.

The below instructions cover how to do this via command line.  If you prefer WHM, simply go to WHM -> Exim Configuration Manager -> Advanced Editor and alter the sections indicated.

First, open up your /etc/exim.conf.local file in an editor and look for the @AUTH@ section.  Modify it to look like this:

driver = plaintext
public_name = LOGIN
client_send = : <user> : <password>

Of course, replace <user> with your SendGrid username and <password> with your SendGrid account password.  If you already have something in the AUTH section, simply add this block of text below it.

Now look for the @PREROUTERS@ section, and modify it to look like this:

driver = manualroute
domains = ! +local_domains
transport = sendgrid_smtp
route_list = "* byname"
host_find_failed = defer

The last modification should be to the @TRANSPORTSTART@ section:

driver = smtp
hosts =
hosts_require_auth =
hosts_require_tls =

Now save the file, and apply the changes:


service exim restart

To test whether things are working, send an email out from your server, and look for it in /var/log/exim_mainlog. You should see something like this in your log entry:

2013-10-08 19:37:29 1VTjeS-0000Ac-O3 -> my@email R=send_via_sendgrid T=sendgrid_smtp [x.x.x.x] X=TLSv1:DHE-RSA-AES256-SHA:256

If you have SPF records, you’ll need to add the hostname of the SMTP server to the record itself to allow the third-party mail server to send email on behalf of your domain.  Sendgrid will provide the hostname you should use.

lowest numbered MX record points to local host

For some reason, when you create new accounts in WHM the file /etc/localdomains may not get updated. That file is important for for email delivery if the MX entry of the domain is pointing to localhost, or you’re using a local mailserver.

So in order to fix this login WHM, then “Edit DNS Zone”, select the domain you want to fix, click “Edit” and then save the zone. Clicking “Save”, will automatically put the entry in the localdomains, if that doesn’t work out you could always access your server via ssh as root and edit /etc/localdomains manually.