Commit 80b367ab authored by Joshua Tauberer's avatar Joshua Tauberer

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

parent 63ef8f7b
...@@ -38,13 +38,18 @@ server.starttls() ...@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment