在Heroku中为Django应用程序设置Sendgrid电子邮件

23
我将在Heroku上部署一个Django应用程序,并使用Sendgrid插件在用户注册网站时发送验证电子邮件。
我按照这里的说明,将以下内容粘贴到settings.py文件中:
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'sendgrid_username'
EMAIL_HOST_PASSWORD = 'sendgrid_password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

然而,在注册后我的应用程序崩溃了。

我应该为EMAIL_HOST_USEREMAIL_HOST_PASSWORD输入什么?

在Heroku的sendgrid插件的开发者选项卡中,它给了我用户名app*******@heroku.com,密码只是说“Your Password”。这个密码是我的Heroku密码吗?

另外,我需要在我的settings.py文件中包含DEFAULT_FROM_EMAIL吗?我要在哪里告诉Sendgrid它是什么?

编辑:我已经设置了DEBUG = True,看起来错误是:

SMTPSenderRefused

(550, 'Cannot receive from specified address <info@myapp.com>: Unauthenticated senders not allowed', 'info@myapp.com')

看起来问题发生在Sendgrid处理之前。我需要以某种方式在Heroku上验证电子邮件地址吗?

2个回答

39

在你的settings.py文件中,包含以下内容:

import os
EMAIL_HOST_USER = os.environ['SENDGRID_USERNAME']
EMAIL_HOST= 'smtp.sendgrid.net'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_PASSWORD = os.environ['SENDGRID_PASSWORD']

编辑:将EMAIL_PASSWORD更改为EMAIL_HOST_PASSWORD,因为那是正确的拼写。


我已经做了更改,但仍然出现错误。我设置debug = true,错误是SMTPSenderRefused,说它无法从指定地址info@myapp.com接收:未经身份验证的发件人不允许。在Heroku中,应该在哪里对电子邮件进行身份验证? - WarAndPiece
1
好的,实际上这就是答案,但应该是“EMAIL_HOST_PASSWORD”而不是“EMAIL_PASSWORD”。 - WarAndPiece

0
在过去的十年中,以上答案已经过时。现在Sendgrid使用API密钥。

https://docs.sendgrid.com/for-developers/sending-email/django

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

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