我正在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->设置->允许使用不安全的应用程序” ,我也不希望这样做,因为它不方便用户使用。而且,用户为什么应该允许访问不安全的应用程序?
也许您遇到了这个问题,并且知道如何以其他方式解决它?谢谢!
答案 0 :(得分:0)
这里有几件事要提到:
1)绝对不想在电子邮件和密码中进行硬编码是绝对正确的,并且绝对应该将它们存储为环境变量。但是,您必须在heroku上设置它们与在开发中所做的设置稍有不同:
2)并非每个用户都需要将其Gmail设置为使用安全性较低的应用。只有用于发送电子邮件的电子邮件帐户才需要这样做。 (大概您的用户只是在接收电子邮件)。
最后,值得一提的是,我相信对于gmail,此解决方案将无法使用太长时间。 (同样,我要说的所有内容仅适用于用于发送的电子邮件,不适用于用户的电子邮件)。 Google将加强“不太安全的应用程序”的使用,并要求使用OAuth。我认为这是在6月或7月左右发生的,但是由于covid-19的情况,Google可能推迟了截止日期。
一种替代方法是使用诸如mailGun之类的服务,该服务实际上对于少量电子邮件是免费的,并且很容易与您的项目集成。他们有很棒的文档。诸如django-anymail之类的库还可以使与任意数量的电子邮件服务的集成非常简单。
编辑:还值得检查一下您的Google帐户是否被阻止。当尝试从heroku服务器进行尝试时,由于该服务器很可能位于与您所在的地理位置不同的地理位置,因此Google可能会将该尝试视为可疑并予以阻止。因此,也值得检查一下。