在Heroku上发送Django电子邮件

时间:2019-04-08 08:21:32

标签: python django email heroku

这是我在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帐户设置?

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

我敦促您不要在生产环境中使用Gmail发送电子邮件。它不是为此设计的,并且您已经发现有适当的措施来防止将其用作垃圾邮件中继。即使您发送的是合法电子邮件,Gmail也会给您带来麻烦。

请使用旨在从托管应用程序(如SendGrid或Mailgun)发送邮件的服务。这些都是listed among Heroku's addons,都有免费的入门计划。选择一个,并通过它越来越老套的指南。这样做不仅可以处理少量邮件,而且效果更好。

答案 2 :(得分:1)

如果您仍要使用Gmail,则 @Pierre Monico的答案将起作用。我只想进行编辑。在允许安全性较差的应用登录到您的帐户并显示“解锁Capatcha”后,您仍应牢记两点。 首先,请确保通过您在应用程序中用于发送电子邮件的帐户登录浏览器,以便该特定帐户和第二件事的Capatch解锁是Google仅允许 10分钟显示解锁Capatcha。因此,如果您想一次又一次地使用它,只需在浏览器中保持 Display Uncap Capatcha 页面打开并保持刷新状态即可。 另外,如果您启用了2因子身份验证,则这些步骤将不起作用。这些帐户的程序不同。

答案 3 :(得分:1)

上述答案对我不起作用。所以这就是我如何做到的。基本上,您需要配置应用密码。

  1. 转到您的 Gmail 帐户
  2. 安全 > 在“登录 Google”部分

enter image description here

  1. 开启两步验证

  2. 设置应用密码

最后,需要配置settings.py.env文件(以下是env),

EMAIL_HOST_USER=your_email@gmail.com
EMAIL_HOST_PASSWORD=generated_app_password

提示

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