SendGrid返回202但未发送电子邮件。

57

我正在尝试让SendGrid的基本“Hello World”工作,但目前还没有成功。响应返回代码202,表明它将发送电子邮件,但电子邮件从未发送出去。有人知道发生了什么吗?

import sendgrid

sg = sendgrid.SendGridAPIClient(apikey='**my-api-key**')
data = {
  "personalizations": [
    {
      "to": [
        {
          "email": "me@gmail.com"
        }
      ],
      "subject": "Hello World from the SendGrid Python Library!"
    }
  ],
  "from": {
    "email": "me@gmail.com"
  },
  "content": [
    {
      "type": "text/plain",
      "value": "Hello, Email!"
    }
  ]
}
response = sg.client.mail.send.post(request_body=data)
print(response.status_code)

你有检查 SendGrid API 日志吗?如果它已经通过你的代码发送,日志应该列出原因。 - Neri Barakat
2
谢谢,我没有意识到那里有这个。这是一个接收域限制(DMARC)吗? - Matrym
你最终解决了吗?如果是,请分享一下,我这里情况相同,谢谢! - jmunozco
10个回答

32

我遇到了这个问题:我创建了一个SendGrid账户并尝试运行基本示例,API返回了202响应,但电子邮件从未发送,而SendGrid Web UI的活动记录上却没有显示任何活动。

提交了一个 SendGrid 支持工单,大约8小时后收到回复说他们已经禁用了我的帐户发送邮件的功能:

您好,

感谢您联系 SendGrid 支持团队!

看起来您的帐户已被我们的合规团队关闭,这就是问题的原因。

为了重新激活,请告诉我们有关您通过 SendGrid 发送的电子邮件的更多信息。请详细说明以下内容:

  1. 您的业务性质、提供的服务以及潜在客户群

  2. 您的发送频率和数量

  3. 您如何收集收件人地址(链接到订阅页面或注册过程)

  4. 您将如何让您的收件人选择不接收您的电子邮件(无论您是否计划使用 SendGrid 的一键退订功能,还是使用自己的方法)

  5. 您将发送哪些类型的消息(交易或营销)

请尽快回复以继续激活过程。感谢您的合作!


提交答案约15小时后,我收到了一封回复,说我的帐户已经“激活”:

您好,nathan.wailes,

感谢提供额外的信息!您的 SendGrid 帐户已经被激活,并可以用于发送电子邮件。要开始,请查看我们的入门指南

如果在设置过程中遇到任何问题,您可以在我们的知识库中找到常见问题和FAQ解决方案。

如果您有更多问题,请告诉我!

祝好,

Stevin O.

副支持工程师


随后我使用我的电子邮件地址作为收件人运行基本示例代码时,该电子邮件立即显示在我的Gmail收件箱中。


3
我也遇到了这个问题。被合规部门阻止了。 - Nick Zalutskiy
17
令人沮丧。这应该是一个403错误。 - Patrick Michaelsen
我遇到了同样的问题 - 我的账户被停用了。通过支持票务得到了帮助。 - proxysingleton

13

5
如果活动订阅内容为空怎么办?我按照https://sendgrid.com/docs/Integrate/Code_Examples/v3_Mail/nodejs.html的示例进行操作,没有出现错误,状态代码显示为202,但链接中仍然没有内容显示。 - Adam Freymiller
2
同样的问题,但是在我的情况下API日志也没有显示任何内容。 - Liquidgenius

8
从SendGrid返回的202已接受状态码并不真正表示消息已成功传递到收件人的收件箱中,而是表示该消息有效并已“排队等待投递”。现在,由接收服务器将此消息传递到收件人的收件箱,或将其发送到垃圾邮件,或仅丢弃该消息。
以下是返回从SendGrid返回202已接受状态代码的消息未实际传递到收件人收件箱的几个原因:
1. 无效的电子邮件地址:电子邮件地址可能不再有效(例如,当某个员工停止在某个公司工作时,其电子邮件可能会从公司系统中删除,从而无法接收任何电子邮件)。 2. 邮件被阻止:如果发送IP或域已被阻止,或者如果收件人的收件箱提供程序设置了一些筛选器,使您的电子邮件/活动邮件的某些特定内容被视为垃圾邮件并自动阻止。
还要注意的另一件事是,如果未正确设置域验证,则SendGrid可能会将邮件发送到垃圾邮件/垃圾邮件中。因此,请确保您的域已得到正确的认证。
这是SendGrid文档中对这些事件进行详细解释的链接:https://sendgrid.com/blog/delivered-bounced-blocked-and-deferred-emails-what-does-it-all-mean/

5

我曾遇到过同样的问题,并通过添加具有完全访问权限的新API密钥来解决它。


4

如果有人遇到类似问题需要答案,我通过确认DNS记录来解决了同样的问题 - 之后一切都像魔法般地运行。

在Sendgrind中:设置 > 发件人认证 > 域名认证


这对我也起作用,我可以从我的.com.au域发送邮件,该域使用gmail作为邮件服务器。 - dodgy_coder

4

我们遇到的问题是使用的动态模板尚未设置为“活动状态”。不幸的是,在API响应或日志中都没有显示任何错误。

激活电子邮件模板解决了这个问题,电子邮件不再被丢弃。


对我来说也一样。很奇怪的是,在使用之前必须激活它们所有。 - marcellsimon

1
当DNS未经验证且您未使用注册电子邮件时,会发生相同的问题。只需将“from email”更改为注册电子邮件即可。

0

我最近遇到了同样的问题。我的电子邮件没有任何原因未发送,响应状态是202,电子邮件活动为空。可能的解决方案是添加公司详细信息并在电子邮件中添加退订块。这对我有用。

我正在实现密码重置功能,为此添加退订块有点奇怪。我将尝试弄清楚这种沉默抑制的真正原因。可能是因为我尝试多次发送草稿调试电子邮件,看起来像垃圾邮件。也许SendGrid有一些智能算法来检测这个问题。


0

我也遇到了这个问题。我联系了SendGrid支持,但在等待期间,我将虚拟数据更改为我正在调用SendGrid API的真实数据,然后它开始工作了。

特别是我将发件人电子邮件地址更改为显示我的自有域名。


-1

对我来说,模板是问题所在。在使用模板引擎时,请确保使用{{variable}}而不是{{ variable }}。之后,我像往常一样收到了电子邮件。


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