通过Sendgrid发送邮件失败-无法获取mx信息:无法从PTR记录中获取IP:查找<nil>:无法识别的地址。

17
根据如何从Azure函数应用程序发送电子邮件,我们无法直接从Azure函数发送电子邮件,因此我们使用SendGrid API来发送电子邮件。(SendGrid对我们来说运作良好,并且我们可以通过我们的Azure订阅获得免费帐户)
虽然大多数电子邮件都能正常发送,但仍有少数未被投递。SendGrid活动记录显示其中的几个状态是Block,详细的错误消息为:
unable to get mx info: failed to get IPs from PTR record: lookup <nil>: unrecognized address

Sendgrid活动显示,包括错误信息细节

由于大多数邮件都已发送成功,我们认为问题不在于我们的代码。我们已经按照SendGrid域身份验证步骤进行了操作,验证了我们的域名,将DKIM密钥添加到了DNS中,并将SendGrid主机添加到了SPF记录中。但是出现了一些问题,而我们似乎无法在SendGrid帮助文件中找到有关错误的任何信息。

我们正在使用的代码(Python)大部分是来自SendGrid Python示例,以防有助于解决问题,但是当我们发送时不会报告任何错误。

from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

def sendEmail(toaddress, subject, message):
   logging.info("Sending email to <%s> - %s", toaddress, subject)

   message = Mail(
      from_email=settings.emailFrom(),
      to_emails=toaddress,
      subject=subject,
      plain_text_content=message)
   try:
      sg = SendGridAPIClient(settings.sendgridAPIKey())
      response = sg.send(message)
      logging.info("Email sent via SendGrid: %d - %s", response.status_code, response.body)
   except Exception as e:
      logging.error(e.message)
1个回答

16

TL;DR - 检查域名是否存在拼写错误!

.

事实证明,SendGrid中显示的错误消息实际上包含了答案,但有点神秘,不太符合我们期望看到的实际错误。

unable to get mx info: failed to get IPs from PTR record: lookup <nil>: unrecognized address

发出的电子邮件中域名是正确的。

但是,有问题的电子邮件中域名存在一个字符的拼写错误,足够接近以至于不易被发现......

这个带有错别字的域名确实存在并已注册。 但是,它没有定义任何DNS条目-没有@ A 记录和 MX 记录。

SendGrid遵循RFC,尝试查找该域的 MX 记录,但没有找到,然后退回到该域的 A 记录,但也不存在。 这导致SendGrid记录错误并放弃。

因此,对于这种精确错误,请仔细检查域名是否存在拼写错误!


除了收件人的电子邮件拼写错误之外,可能还有其他情况 - 看起来配置错误的DNSSEC也可能导致这种情况发生。 - tschumann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接