views:

279

answers:

1

In a Java program, what is the best way of determining if an SMTP server is ready to accept and send an email?

+4  A: 

You can use JavaMail API and try to send an email.

If you don't want to actually send the email, you can open a TCP socket to port number 25 of your mail server and send the following commands:

HELO yourdomain.com
MAIL FROM: [email protected]
RCPT TO: [email protected]

Make sure you check all server responses after each command issued. If you don't see any errors until that point, then probably you will be able to send emails with that SMTP server.

And, as Jordan Stewart kindly appointed:

You'll also want to make sure that the HELO domain has a complementary A / PTR dns record pair, with the IP address the domain is mapped to being the IP address you're connecting from. The domain also needs at least one MX record. I.e. if the server you're connecting from is 123.45.67.89 then you'd need an A record mapping yourdomain.com to 123.45.67.89 and a PTR ("reverse DNS") record mapping 123.45.67.89 back to yourdomain.com. If any of these conditions aren't met you'll run into problems with some mail servers as checks for these things are anti-spam measures.

Pablo Santa Cruz
@Pablo - you should mention that you need to check the responses from each of those commands.
Stephen C
You'll also want to make sure that the HELO domain has a complementary A / PTR dns record pair, with the IP address the domain is mapped to being the IP address you're connecting from. The domain also needs at least one MX record. I.e. if the server you're connecting from is 123.45.67.89 then you'd need an A record mapping yourdomain.com to 123.45.67.89 and a PTR ("reverse DNS") record mapping 123.45.67.89 back to yourdomain.com. If any of these conditions aren't met you'll run into problems with some mail servers as checks for these things are anti-spam measures.
Jordan Stewart