forms: use dnspython to check mx entry in EmailWidget (#59264)
This commit is contained in:
parent
a9f601400c
commit
f3e79b259a
|
@ -39,9 +39,9 @@ except ImportError:
|
|||
import bleach
|
||||
|
||||
try:
|
||||
import DNS
|
||||
import dns
|
||||
except (ImportError, OSError):
|
||||
DNS = None
|
||||
dns = None
|
||||
|
||||
try:
|
||||
import magic
|
||||
|
@ -965,17 +965,17 @@ class EmailWidget(StringWidget):
|
|||
return
|
||||
if domain == 'localhost':
|
||||
return
|
||||
if DNS is not None:
|
||||
DNS.ParseResolvConf()
|
||||
if dns is not None:
|
||||
try:
|
||||
if not DNS.mxlookup(force_str(domain), timeout=7):
|
||||
self.error = _('invalid address domain')
|
||||
except DNS.DNSError:
|
||||
dns.resolver.query(force_str(domain), 'MX')
|
||||
except dns.resolver.NXDOMAIN:
|
||||
self.error = _('invalid address domain')
|
||||
except UnicodeDecodeError:
|
||||
# internal DNS mxlookup bug, probably because the
|
||||
# zone was somehow invalid, don't blame user for that.
|
||||
pass
|
||||
except dns.resolver.NoAnswer:
|
||||
self.error = _('dns answer does not contain the response')
|
||||
except dns.resolver.NoNameservers:
|
||||
self.error = _('all name servers failed to answer the query')
|
||||
except dns.exception.DNSException:
|
||||
self.error = _('an error occurred while query MX entry for domain %s') % domain
|
||||
|
||||
|
||||
class OptGroup:
|
||||
|
|
Loading…
Reference in New Issue