Test validity of email address from the command line with exim

While trying to troubleshoot why email wasn’t being delivered to one of my mail aliases on a new server this morning, I discovered a nifty little trick for testing the deliverability of an email address using exim from the command line.

exim -bt command line flag

From the command line enter "exim -bt" followed by the email address to test as shown in the example below, where I was testing the email address minerva@nz1.minervamail.com:

exim -bt minerva@nz1.minervamail.com

Mail to that domain was handled by the localhost and there was a system alias set up to send all mail to the "minerva" user to my email address. Unfortunately I had mis-typed my own email address in the /etc/aliases file so got the following result:

R: system_aliases for minerva@nz1.minervamail.com
R: dnslookup for chris@isavvy.co.nc
chris@isavvy.co.nc is undeliverable: Unrouteable address
    <-- minerva@nz1.minervamail.com

Until I worked out how to do this, I had been confused about why mail was bouncing as the mail system appeared to be all set up correctly. It was only when doing this test that I saw it was actually the forwarding address causing the error.

After correcting the alias, running newaliases and trying again:

R: system_aliases for minerva@nz1.minervamail.com
R: dnslookup for chris@isavvy.co.nz
    <-- minerva@nz1.minervamail.com
  router = dnslookup, transport = remote_smtp
  host aspmx.l.google.com      []  MX=10
  host alt1.aspmx.l.google.com []  MX=20
  host alt2.aspmx.l.google.com [] MX=20
  host aspmx3.googlemail.com   []  MX=30
  host aspmx5.googlemail.com   [] MX=30
  host aspmx4.googlemail.com   [] MX=30
  host aspmx2.googlemail.com   []  MX=30

Some other examples

You can also use it for testing deliverability of remote addresses to, e.g.:

$ exim -bt test@example.com
R: dnslookup for test@example.com
  router = dnslookup, transport = remote_smtp
  host example.com [2001:500:88:200::10] 
  host example.com []   

and an invalid format address:

$ exim -bt test@@example.com
syntax error: domain missing or malformed

and another example:

$ exim -bt test@test@example.com
syntax error: malformed address: @example.com may not follow test@test

and finally an example where MX records aren’t set up for the host:

$ exim -bt foo@bar.com 
R: dnslookup for foo@bar.com
foo@bar.com is undeliverable: all relevant MX records point to non-existent hosts