如何使用 Sendgrid 从 Heroku 中部署的 Django 应用程序发送重置密码电子邮件?

aba*_*sta 2 django heroku python-3.x sendgrid

我一直在努力尝试正确设置settings.py发送电子邮件以进行密码重置。这是我当前的配置:

SENDGRID_API_KEY = os.environ["SENDGRID_API_KEY"]
SENDGRID_PASSWORD= os.environ["SENDGRID_PASSWORD"]
SENDGRID_USERNAME= os.environ["SENDGRID_USERNAME"]

EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = os.environ['SENDGRID_USERNAME']
#EMAIL_HOST_USER = 'apikey'
EMAIL_HOST_PASSWORD = os.environ["SENDGRID_PASSWORD"]
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = os.environ["DEFAULT_FROM_EMAIL"]

#SENDGRID_SANDBOX_MODE_IN_DEBUG = False
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
Run Code Online (Sandbox Code Playgroud)

我遇到过以下与我的问题相关的帖子,但没有一个起作用:

  1. 在 Heroku 上使用 Django 和 Sendgrid 发送 SMTP 电子邮件
  2. django 中没有名为“sendgrid_backend”的模块
  3. 在 Django 中使用 Sendgrid 发送电子邮件
  4. 在 Heroku 中为 Django 应用程序使用 Sendgrid 设置电子邮件
  5. Heroku、Django 和 Sendgrid - 电子邮件未发送?

当我使用EMAIL_BACKEND = "sendgrid_backend.SendgridBackend"(安装django-sendgrid-v5库后)时,我没有收到任何错误,但我没有收到任何电子邮件:'(并且在之前的情况下我遇到了以下错误SMTPServerDisconnected at /password-reset/Connection unexpectedly closed。任何帮助,建议,评论,疯狂的想法真的很感激,因为我在这个问题上花了几个小时,这将是我项目中的一个里程碑。

谢谢大家 :)

小智 5

我在 Google Cloud App Engine 上部署 Django 应用程序时遇到了类似的问题。以下配置(在 settings.py 中)对我有用:

SENDGRID_API_KEY = os.getenv('SENDGRID_API_KEY') 

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey' # Exactly that. 
EMAIL_HOST_PASSWORD = SENDGRID_API_KEY
EMAIL_PORT = 587 # 25 or 587 (for unencrypted/TLS connections).
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = os.getenv('DEFAULT_FROM_EMAIL')
Run Code Online (Sandbox Code Playgroud)

对于SENDGRID_API_KEY,请使用“电子邮件 API/集成指南”部分中创建的 API 密钥。根据您的情况,选择 SMTP 中继选项。

对于DEFAULT_FROM_EMAIL,请使用经过验证的单一发件人电子邮件。您可以在“设置/发件人身份验证”中找到它。这是您在创建发件人时输入的“发件人电子邮件地址”的内容。更多详细信息请参见此处

我不推荐 Robert D 的答案,因为使用ALLOWED_HOSTS = ['*']它会容易受到 HTTP 主机标头攻击。从文档中:

“ 的值'*'将匹配任何内容;在这种情况下,您有责任提供自己的 Host 标头验证(可能在中间件中;如果是这样,则该中间件必须首先在 MIDDLEWARE 中列出)。”

更多详细信息请参见此处