【发布时间】:2020-02-05 13:49:29
【问题描述】:
我在 Heroku 上部署了一个 Django 应用程序。在其中一个部分中,我使用 SMTP Gmail 设置向用户发送电子邮件。当我在本地运行项目而不是在 Heroku 上部署的项目时,电子邮件发送成功。
我在 Stackoverflow 上看到了许多其他答案,但没有一个能解决我的问题。 我已在我的 Google 帐户上启用了 2FA,并生成了一个 APP 密码,并在我的设置文件中使用了该密码。其他开发者不建议开启 allow_less_secure_app 选项
我的settings.py文件电子邮件设置-
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = os.environ.get('EMAIL_USER2')
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASS2')
我的views.py 视图处理邮件-
def index(request)
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
message = form.cleaned_data['message']
email = form.cleaned_data['email']
subject = "You got a message"
thoughts = "{} by {}".format(message,email)
recipients = ['xyz@gmail.com']
sender = 'abc@gmail.com'
send_mail(subject, thoughts, sender ,recipients,fail_silently=False)
return HttpResponse()
else:
form = MyForm()
return render(request,'my_webapp/index.html',{'form':form})
我在 Heroku 日志中遇到的错误是-
raise SMTPAuthenticationError(code, resp)
2019-10-07T18:22:12.174365+00:00 app[web.1]: smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials w2sm9789664qtc.59 - gsmtp')
【问题讨论】:
-
一般建议:不要将 Gmail 用作批量电子邮件发送服务。你很快就会被屏蔽。
-
添加一些日志以检查
os.environ.get()是否在 Heroku 上设置了正确的值。确保您遵循support.google.com/mail/?p=BadCredentials 上的所有步骤 - 例如您没有在问题中提及验证码建议。您还应该确保EMAIL_HOST_USER与sender = 'abc@gmail.com'匹配 - Gmail 不会让您为其他帐户发送电子邮件。如果它仍然不起作用,那么我同意 Klaus 的观点,即您应该寻找其他电子邮件提供商。 -
密码正确我检查了两次。此外,displayUnlockCaptcha 只是指导我创建 APP 密码的方法,我已经做了 5 次。它也是一个非常小的应用程序,每周可能会发送 7-8 封电子邮件。
-
即使它是一个小应用程序,我也会寻找另一种发送电子邮件的方式 - 你说 我在 stackoverflow 上看到了许多其他答案 - 接收许多电子邮件这表明使用 Gmail 发送 Django 电子邮件是一项艰巨的工作!
-
其他替代方法是什么?你能推荐一些吗?我尝试使用 sendgrid,但它们响应我的新帐户太慢了。