telnet localhost 25
Result
Trying 127.0.0.1… Connected to localhost. Escape character is ‘^]’. 220 mail.sharewiz.net ESMTP exim ehlo client 250-mail.sharewiz.net 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
% openssl s_client -starttls smtp -connect mail.sharewiz.net:25
Result
250 DSN ehlo client 250-mail.sharewiz.net 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN auth login 334 VXNlcm5hbWU6 Y2xlbWVudEBmb3J1bWFuYWxvZ3VlLmZy 334 UGFzc3dvcmQ6 Q2xlbWVudDAx DONE
apt-get install swaks libnet-ssleay-perl
Test the connection:
swaks -a -tls -q HELO -s localhost -au your_user -ap '<>'
Result
=== Trying localhost:25... === Connected to localhost. <- 220 debianwb ESMTP Exim 4.76 Thu, 04 Aug 2011 14:22:02 +0600 -> EHLO debianwb <- 250-debianwb Hello localhost [127.0.0.1] <- 250-SIZE 52428800 <- 250-PIPELINING <- 250-STARTTLS <- 250 HELP -> STARTTLS <- 220 TLS go ahead === TLS started w/ cipher DHE-RSA-AES256-SHA ~> EHLO debianwb <~ 250-debianwb Hello localhost [127.0.0.1] <~ 250-SIZE 52428800 <~ 250-PIPELINING <~ 250 HELP ~> QUIT <~ 221 evie closing connection
Note that above we are sending an empty password while testing with the swaks tool.
Sending a mail from command line with:
echo "Test" | mail -s Testmail foo.bar@gmail.com
or
exim -bt recipient@address
to see what Exim thinks should be done with a particular address, and add -d to the command-line to get more debugging information (but beware that there can be a lot to pick through).
Succesful logs would have something like
2011-01-01 20:45:24 1PZ7OG-0001Vp-Rx <= root@gustav U=root P=local S=360 2011-01-01 20:45:26 1PZ7OG-0001Vp-Rx => foo.bar@gmail.com R=dnslookup T=remote_smtp H=gmail-smtp-in.l.google.com [209.85.229.27] X=TLS1.0:RSA_ARCFOUR_MD5:16 DN="C=US,ST=California,L=Mountain View,O=Google Inc,CN=mx.google.com" 2011-01-01 20:45:26 1PZ7OG-0001Vp-Rx Completed
Unsuccessful logs would have something like:
2011-01-01 20:50:08 1PZ7Sq-0001X9-L4 <= <> R=1PZ7Sq-0001X7-Jo U=Debian-exim P=local S=1780 2011-01-01 20:50:11 1PZ7Sq-0001X9-L4 => newsletter@foo.bar R=dnslookup T=remote_smtp H=mx1.emailsrvr.com [98.129.184.3] X=TLS1.0:RSA_AES_256_CBC_SHA1:32 DN="C=US,O=mx1.emailsrvr.com,OU=GT21850092,OU=See www.geotrust.com/resources/cps (c)08,OU=Domain Control Validated - QuickSSL(R),CN=mx1.emailsrvr.com" 2011-01-01 20:50:11 1PZ7Sq-0001X9-L4 Completed
The R= is saying that this item is a bounce and the message-id given in the R= part is the original message-id which failed. You'll need to look at the log-entry for that to see what recipient address was generated and why it failed.
IPs may be different so run dig smtp.sharewiz.net and use the IPs it returns instead.
Add this to bind or into /etc/hosts
123.123.123.123 smtp.sharewiz.net
Save this to a PHP file, replacing test@example.com with an email address you control.
#!/usr/local/bin/php <?php while (true) { mail('test@example.com', 'Test email deletethiswithafilter', 'test ' . time()); usleep(500000); }
If the earlier dig command returned multiple IPs then save this to a PHP file and run it while the above is running also. Every 5ms - 15ms it will toggle the entry in the hosts file for smtp.sharewiz.net between the two IPs that it resolves to for example 123.123.123.123 and 234.234.234.234.
#!/usr/local/bin/php <?php while (true) { passthru('new_hosts_file_contents=`cat /etc/hosts | sed \'s/123.123.123.123/ip123/g\' | sed \'s/234.234.234.234/ip234/g\' | sed \'s/ip123/234.234.234.234/g\' | sed \'s/ip234/123.123.123.123/g\'`; echo "$new_hosts_file_contents" > /etc/hosts 2>&1'); usleep(10000 + rand(-5000,5000)); }
NOTE: hosts_require_auth = * and hosts_require_tls = * also works if IPv6 support isn't needed.