在Heroku上使用Django发送电子邮件

4

这是我在settings.py文件中的属性:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'infobot9@gmail.com'
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')
EMAIL_PORT = 587

这是我的发送电子邮件方法:

from django.core.mail import send_mail 


def sendConfirmEmail(email, instance, code):
    mail_subject = 'Confirmation code {}'.format(code)
    message = render_to_string("msg.html", {
       'user': instance,
       'code': code

    })
    to_email = email
    send_mail(mail_subject, message, 'infobot9@gmail.com', [to_email], 
              fail_silently=False)

我的Django电子邮件发送方法在本地主机中运行良好。部署到Heroku后,我已允许来自未知设备的登录我的Gmail设置。Gmail不允许服务器登录到我的帐户,并向我发送一条消息:
可疑登录尝试已被阻止
infobot9@gmail.com
有人试图使用为其设置的密码登录您的帐户。如果这不是您,我们建议您尽快更改密码。

未知设备

4月4日,11:39

附近位置:爱尔兰都柏林
176.34.163.6(IP地址)
我应该在我的settings.py文件中设置额外的参数,还是需要更改我的Gmail帐户设置?

2
请在您的问题中添加 settings.py 文件,并展示与发送电子邮件相关的 views.py 代码。 - Mojtaba Kamyabi
我已经添加了您想要的内容,我认为问题可能不在views.py中,因为从本地主机发送邮件工作正常,谢谢。 - Ginger Bread
4个回答

8

我建议你不要在生产环境中使用Gmail发送电子邮件。它并不是为此而设计的,正如你所发现的那样,它有预防被用作垃圾邮件中继的措施。即使你发送的是合法的电子邮件,Gmail也会让事情变得更加困难。

相反,使用一个专为托管应用程序发送邮件而设计的服务,例如SendGrid或Mailgun。这两个服务都在Heroku的插件列表中列出,且均有免费的入门计划。选择一个并按照其"入门指南"进行操作。这不仅对于小量邮件的处理效果更好,还可以为你的业务增长打下良好的基础。


4

1
谢谢!这个有效。Heroku中的电子邮件附加组件即使是免费套餐也需要信用卡。 - Irfan wani

2
如果你仍然想使用Gmail,@Pierre Monico的回答可以解决问题。我只是想进行修改。在允许不安全应用程序登录到您的帐户并显示“解锁 Capatcha”之后,您仍应牢记两件事情。首先,请确保通过您在应用程序中使用的帐户登录到浏览器,以便为该特定帐户解锁Capatcha,第二件事是Google仅允许显示解锁Capatcha仅10分钟。因此,如果您想一遍又一遍地使用它,请在浏览器中打开“显示解锁Capatcha”页面,并在一段时间后刷新它。 另外,如果您启用了双因素身份验证,则这些步骤将无法正常工作。这些帐户有不同的程序。

2
上述提到的答案对我没用。所以这里是我是如何做到的。基本上,您需要配置一个应用密码。
  1. 进入您的 Gmail 账户
  2. 安全性 > 在“登录 Google”部分中

enter image description here

将以下文本从英语翻译成中文:
  1. 打开两步验证

  2. 设置应用程序密码

最后,需要配置settings.py.env文件(遵循环境变量)。

EMAIL_HOST_USER=your_email@gmail.com
EMAIL_HOST_PASSWORD=generated_app_password

提示:
使用 python-decouple 可以更轻松地处理 .env 数据。

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