无法通过 Django 的 SendGrid 验证

Not able to pass SendGrid verification with Django

我目前正在阅读一本关于 Django 的书(面向初学者),我已经到了需要使用 SendGrid SMTP 中继对测试网站实施密码重置功能的地步。

创建帐户并开始创建 SMTP 中继后,我看到了以下屏幕: 基于此页面,我将以下代码行添加到我的 setting.py 文件中:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey'
EMAIL_HOST_PASSWORD = 'xxxxx' #the string which is partialy hidden under the pink square 
EMAIL_PORT = 587
EMAIL_USE_TLS = True

访问 运行 网站并尝试重置我的密码(超级用户的密码)后,我在控制台中收到了重置 link 所需的消息,但遗憾的是我的电子邮件没有收到任何消息。因此,我在尝试验证集成时收到以下错误消息。


到目前为止我尝试了什么:

我已经尝试解决这个问题一天多了,如有任何帮助,我们将不胜感激!

考虑到您当然不打算在不保护您的信息(即创建环境变量)的情况下投入生产,我会说设置就像它们应该的那样。你 打算这样做,我想,但如果不是,你真的,真的应该考虑一下。

此外,这些是您的实际设置,您应该post现在编辑此设置。他们应该保密,否则你很快就会有糟糕的一天。

鉴于您的问题的性质,我有一半认为您不是在开发环境中对其进行测试,而是您已尝试 运行 在生产环境中对其进行测试。我还怀疑您正在使用带有免费帐户的 Pythonanywhere 或 Heroku。如果我在这里全错了,请告诉我:)

简而言之:如果不支付这 5 美元,那两个提供商(我想其他提供商加起来也不错)不会让您使用 sendgrid。

如果我的假设有误,我希望看到处理电子邮件发送的 views.py。

您的电子邮件后端设置设置为使用控制台。如果您只是调试没关系,您可以在控制台中查看电子邮件的外观并从那里复制您的密码重置 link。

如果您确实要发送电子邮件,请使用 SMTP 后端:设置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

但请注意,不要使用它向虚假地址发送电子邮件,如果您的 sendgrid 帐户退回太多邮件,您会遇到麻烦。

此外,如果您要在生产环境中使用 SendGrid,请使用 API 而不是 SMTP。 django-anymail(但也有其他包)提供了一个后端来使用 API.

2021 年 6 月更新 Sendgrid 不再允许简单的 username/password 身份验证(并强制您使用 2FA 登录)。您应该使用 API,或者专门为您的服务器创建一个应用程序密码,然后使用该密码代替您的普通密码。