Django,部署在Heroku上。当我尝试发送电子邮件时,SMTPPender在/ password_reset /拒绝

时间:2020-05-15 07:28:59

标签: django heroku smtp

我正在Heroku上部署Django应用。应用程序运行正常,但是当我尝试通过发送电子邮件重设忘记的密码时-我遇到此错误:

SMTPSender在/ password_reset / (530,需要b'5.7.0身份验证。有关详细信息,请参见\ n5.7.0 regroup filter h13sm1336757qti.32-gsmtp',“无”)

此外,仅当我使用Heroku服务器(我不知道 beautiful-flowers-12345.herokuapp.com 之类的东西)而不是localhost 127.0.0.1使用Django应用程序时: 8000。当我使用本地主机使用Django应用程序时发送电子邮件-正常,没有任何错误。

解决此错误的唯一方法是替换此错误:

EMAIL_HOST_USER = os.environ.get('EMAIL_USER')
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASS')

与此:

EMAIL_HOST_USER = 'fake_email'
EMAIL_HOST_PASSWORD = 'myfakepassword123' 

并打开权限以在Gmail设置中使用安全性较低的应用。

但这不是我想要解决的方式

1)我不需要这种方法来显示我的host_user和host_password。

2)每个用户都需要转到此处“ Gmail->设置->允许使用不安全的应用程序” ,我也不希望这样做,因为它不方便用户使用。而且,用户为什么应该允许访问不安全的应用程序?

也许您遇到了这个问题,并且知道如何以其他方式解决它?谢谢!

1 个答案:

答案 0 :(得分:0)

这里有几件事要提到:

1)绝对不想在电子邮件和密码中进行硬编码是绝对正确的,并且绝对应该将它们存储为环境变量。但是,您必须在heroku上设置它们与在开发中所做的设置稍有不同:

  • 在heroku中转到您的应用
  • 点击设置
  • 应该有一个称为配置变量的部分。点击“显示配置变量”
  • 您可以在此处输入配置变量。

2)并非每个用户都需要将其Gmail设置为使用安全性较低的应用。只有用于发送电子邮件的电子邮件帐户才需要这样做。 (大概您的用户只是在接收电子邮件)。

最后,值得一提的是,我相信对于gmail,此解决方案将无法使用太长时间。 (同样,我要说的所有内容仅适用于用于发送的电子邮件,不适用于用户的电子邮件)。 Google将加强“不太安全的应用程序”的使用,并要求使用OAuth。我认为这是在6月或7月左右发生的,但是由于covid-19的情况,Google可能推迟了截止日期。

一种替代方法是使用诸如mailGun之类的服务,该服务实际上对于少量电子邮件是免费的,并且很容易与您的项目集成。他们有很棒的文档。诸如django-anymail之类的库还可以使与任意数量的电子邮件服务的集成非常简单。

编辑:还值得检查一下您的Google帐户是否被阻止。当尝试从heroku服务器进行尝试时,由于该服务器很可能位于与您所在的地理位置不同的地理位置,因此Google可能会将该尝试视为可疑并予以阻止。因此,也值得检查一下。