test_mail: gracefully handled when the server has no reverse DNS available

This commit is contained in:
Joshua Tauberer 2014-05-06 10:02:29 -04:00
parent 63ef8f7b04
commit 80b367ab07
1 changed files with 12 additions and 7 deletions

View File

@ -38,13 +38,18 @@ server.starttls()
# Verify that the EHLO name matches the server's reverse DNS. # Verify that the EHLO name matches the server's reverse DNS.
ipaddr = socket.gethostbyname(host) # IPv4 only! ipaddr = socket.gethostbyname(host) # IPv4 only!
reverse_ip = dns.reversename.from_address(ipaddr) # e.g. "1.0.0.127.in-addr.arpa." reverse_ip = dns.reversename.from_address(ipaddr) # e.g. "1.0.0.127.in-addr.arpa."
reverse_dns = dns.resolver.query(reverse_ip, 'PTR')[0].target.to_text(omit_final_dot=True) # => hostname try:
server.ehlo_or_helo_if_needed() # must send EHLO before getting the server's EHLO name reverse_dns = dns.resolver.query(reverse_ip, 'PTR')[0].target.to_text(omit_final_dot=True) # => hostname
helo_name = server.ehlo_resp.decode("utf8").split("\n")[0] # first line is the EHLO name except dns.resolver.NXDOMAIN:
if helo_name != reverse_dns: print("Reverse DNS lookup failed for %s. SMTP EHLO name check skipped." % ipaddr)
reverse_dns = None
if reverse_dns is not None:
server.ehlo_or_helo_if_needed() # must send EHLO before getting the server's EHLO name
helo_name = server.ehlo_resp.decode("utf8").split("\n")[0] # first line is the EHLO name
if helo_name != reverse_dns:
print("The server's EHLO name does not match its reverse hostname. Check DNS settings.") print("The server's EHLO name does not match its reverse hostname. Check DNS settings.")
sys.exit(1) sys.exit(1)
print("SMTP EHLO name (%s) is OK." % helo_name) print("SMTP EHLO name (%s) is OK." % helo_name)
# Login and send a test email. # Login and send a test email.
server.login(emailaddress, pw) server.login(emailaddress, pw)