【问题标题】:How to send with Sendgrid a reset password email from a Django app deployed in Heroku?如何使用 Sendgrid 从部署在 Heroku 中的 Django 应用程序发送重置密码电子邮件?
【发布时间】:2020-09-22 23:38:49
【问题描述】:

我一直在努力尝试正确设置 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'

我遇到了以下与我的问题相关的帖子,但没有一个有效:

  1. Sending SMTP email with Django and Sendgrid on Heroku
  2. No module named 'sendgrid_backend' in django
  3. Send email with Sendgrid in Django
  4. Setting up email with Sendgrid in Heroku for a Django App
  5. Heroku, Django, and Sendgrid - emails not sending?

当我使用EMAIL_BACKEND = "sendgrid_backend.SendgridBackend"时(在我安装了django-sendgrid-v5库之后)我没有收到任何错误但我没有收到任何电子邮件:'(在之前的案例中我遇到了以下错误@987654330 @ 和 Connection unexpectedly closed。任何帮助、建议、评论、疯狂的想法都非常感谢,因为我在这个问题上花了几个小时,这将成为我项目的一个里程碑。

谢谢大家:)

【问题讨论】:

    标签: django python-3.x heroku sendgrid


    【解决方案1】:

    我很同情,在这方面也花了太长时间。但是今天刚刚修复它,只需在 settings.py 中添加以下内容(以及 Django 重新密码重置中的所有其他“开箱即用”的内容)。

    ALLOWED_HOSTS = ['*']
    
    SENDGRID_API_KEY = os.getenv('SENDGRID_API_KEY')
    EMAIL_HOST = 'smtp.sendgrid.net'
    EMAIL_HOST_USER = 'apikey' # this is exactly the value 'apikey'
    EMAIL_HOST_PASSWORD = SENDGRID_API_KEY
    EMAIL_PORT = 587
    EMAIL_USE_TLS = True
    

    【讨论】:

      【解决方案2】:

      我在 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')
      

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

      对于DEFAULT_FROM_EMAIL,使用经过验证的单一发件人电子邮件。您可以在“设置/发件人身份验证”中找到它。这是您在创建发件人时输入的“来自电子邮件地址”的内容。更多详情here.

      我不推荐 Robert D 的答案,因为使用 ALLOWED_HOSTS = ['*'] 您将容易受到 HTTP Host 标头攻击。来自文档:

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

      更多详情here

      【讨论】:

        猜你喜欢
        • 2012-04-01
        • 1970-01-01
        • 2021-08-13
        • 1970-01-01
        • 1970-01-01
        • 2019-12-01
        • 1970-01-01
        • 2019-05-27
        • 1970-01-01
        相关资源
        最近更新 更多