def _ebMX(self, failure, domain):
"""
Attempt to use the name of the domain directly when mail exchange
lookup fails.
@type failure: L{Failure}
@param failure: The reason for the lookup failure.
@type domain: L{bytes}
@param domain: The domain name.
@rtype: L{Record_MX <twisted.names.dns.Record_MX>} or L{Failure}
@return: An MX record for the domain or a failure if the fallback to
domain option is not in effect and an error, other than not
finding an MX record, occurred during lookup.
@raise IOError: When no MX record could be found and the fallback to
domain option is not in effect.
@raise DNSLookupError: When no MX record could be found and the
fallback to domain option is in effect but no address for the
domain could be found.
"""
from twisted.names import error, dns
if self.fallbackToDomain:
failure.trap(error.DNSNameError)
log.msg("MX lookup failed; attempting to use hostname (%s) directly" % (domain,))
# Alright, I admit, this is a bit icky.
d = self.resolver.getHostByName(domain)
def cbResolved(addr):
return dns.Record_MX(name=addr)
def ebResolved(err):
err.trap(error.DNSNameError)
raise DNSLookupError()
d.addCallbacks(cbResolved, ebResolved)
return d
elif failure.check(error.DNSNameError):
raise IOError("No MX found for %r" % (domain,))
return failure
评论列表
文章目录