Gag*_*arr 6 python sendgrid sendgrid-api-v3
根据如何从 Azure 函数应用发送电子邮件,我们无法直接从 Azure 函数发送电子邮件,因此我们使用 SendGrid API 发送电子邮件。(SendGrid 似乎对我们很有效,我们通过 Azure 订阅获得了一个免费帐户)
虽然大多数电子邮件都可以正常发送,但有少数电子邮件没有送达。SendGrid 活动提要显示Block这些的状态。详细的错误信息是
unable to get mx info: failed to get IPs from PTR record: lookup <nil>: unrecognized address
Run Code Online (Sandbox Code Playgroud)
由于大多数电子邮件确实会发送出去,因此我们认为这不是我们代码的问题。我们已经完成了 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)
Run Code Online (Sandbox Code Playgroud)
TL;DR - 检查域是否有拼写错误!
.
事实证明,SendGrid 中显示的错误消息确实包含了有效的答案,但有点神秘,并不是我们期望看到的实际错误
unable to get mx info: failed to get IPs from PTR record: lookup <nil>: unrecognized address
Run Code Online (Sandbox Code Playgroud)
发出的电子邮件中包含正确的域。
然而,问题电子邮件在域中都有一个单一字符的拼写错误,足够接近而不会被发现......
这个打错字的域名确实存在,并且已经注册。但是,它没有定义 DNS 条目——没有@ A记录,也没有MX记录。
SendGrid 遵循 RFC,尝试MX为该域查找记录,但没有记录,然后返回到A该域的记录,但该记录也不存在。这导致 SendGrid 记录错误并放弃。
因此,对于这个确切的错误,请仔细检查域是否有拼写错误!