Django:重置密码不发送电子邮件

Posted

技术标签:

【中文标题】Django:重置密码不发送电子邮件【英文标题】:Django: reset-password not sending email 【发布时间】:2013-12-18 00:13:46 【问题描述】:

我正在使用 Django 密码重置。

我的 settings.py 中有这段代码:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'myusername@gmail.com'
EMAIL_HOST_PASSWORD = 'mypassword'
DEFAULT_FROM_EMAIL = 'myusername@gmail.com'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
SERVER_EMAIL = 'myusername@gmail.com'

它将我重定向到正确的页面,但它不发送电子邮件。我已经检查了垃圾邮件文件夹等,但仍然没有:(

非常感谢任何想法!

编辑

我尝试使用控制台对其进行测试,但出现以下错误:

>>> email = EmailMessage('Mail test', 'this is a test', to=['myusername@gmail.com'])
>>> email.send()

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/message.py", line 255, in send
return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/backends/smtp.py", line 88, in send_messages
new_conn_created = self.open()
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/backends/smtp.py", line 55, in open
self.connection.login(self.username, self.password)
File "/usr/lib/python2.7/smtplib.py", line 576, in login
raise SMTPException("SMTP AUTH extension not supported by server.")

SMTPException: SMTP AUTH extension not supported by server.

编辑

我的 settings.py 配置如上。由于某种原因,它以前不起作用,但现在似乎是。当我跑步时

python manage.py shell

并使用 EmailMessage 和 send() 函数对其进行测试,我得到状态码 1,我收到了电子邮件。但是,我仍然没有收到来自 password_reset 的电子邮件。有任何想法吗?感谢大家的意见!

【问题讨论】:

您的帐户是否启用了两因素身份验证? 我以前从未接触过。当我去检查它时,它说我必须设置它。是默认设置的吗? 【参考方案1】:

GMail 使用 SSL,而不是 TLS。这就是为什么您的应用无法联系到他们的服务器的原因。

https://support.google.com/mail/answer/78775?hl=en

【讨论】:

它可以同时使用两者,实际上它就在您发布的链接中。 “但仍然无法发送邮件,请尝试将您的 SMTP 配置为使用端口 25(使用 SSL)” - 我使用 465+SSL 没有问题。【参考方案2】:

试一下邮件是否发送: ./manage.py 外壳

from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', 'from@example.com',
['to@example.com'], fail_silently=False)

如果返回值为 0,那么您必须重新配置您的电子邮件设置。确保输入正确的凭据。查看文档https://docs.djangoproject.com/en/dev/topics/email/#send-mail

【讨论】:

我实际上已经尝试过类似的东西,我得到了上面的错误。我已经编辑了我的原始帖子。 你使用了内置视图吗?你能发布你的密码重置功能吗?【参考方案3】:

设置EMAIL_PORT = 25Gmail使用SSL连接,需要设置EMAIL_PORT = 25

【讨论】:

它似乎正在使用端口 587。但是,实际的密码重置视图似乎没有发送电子邮件。【参考方案4】:

这是一个长镜头,但奇怪的是我没有在我的设置文件中设置 EMAIL_BACKEND。我以为我做到了,但是当我刚刚浏览它时,我找不到它。我不使用 Gmail,但我的电子邮件发送工作正常,包括密码重置。此外,查看控制台中的错误日志,它似乎与“后端”有关。所以我的回答是:尝试删除 EMAIL_BACKEND 设置。

【讨论】:

【参考方案5】:

在 gmail 中为位于高级设置中的邮件发送(作为应用程序)创建单独的密码 长度应在 12-16 个字符左右

那就试试吧

【讨论】:

【参考方案6】:

添加以下设置

# ....
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = '<your gmail>'
EMAIL_HOST_PASSWORD = '<your password>'
EMAIL_USE_TLS = True
# ....

现在,尝试从 django shell 发送电子邮件

from django.core.mail import send_mail
send_mail('Subject', 'Body infromation', '<your from email>', ['<your to email>'])

【讨论】:

【参考方案7】:

由于您在 Django shell 中的发送测试有效,这意味着您的电子邮件设置配置良好。

如果您仍然没有收到来自 password_reset 的电子邮件,则必须在此字段中搜索您的问题。

您必须知道,密码重置电子邮件仅发送给活跃用户 (is_active),并且只有当他们有可用密码 (has_usable_password) 时。 p>

如果用户的密码无效,Django 只会静默不发送重置邮件。

在 Django shell 中使用以下代码来测试所有用户:

from django.contrib.auth import get_user_model

[(u.email, u.is_active, u.has_usable_password()) for u in get_user_model().objects.all()]

【讨论】:

【参考方案8】:

您的设置似乎正确

你必须先看看你是否登录

您也可以在主网址中使用它

from django.contrib.auth import views as auth_views

path('reset_password/',auth_views.PasswordResetView.as_view(),name='password_reset)

【讨论】:

【参考方案9】:

这就是我解决此问题的方法:

我也遇到过这个问题。但是当我检查我的数据库时,我的数据库是空的。我的数据库中没有一个用户。因此,请确保您的数据库中有一个使用此电子邮件的用户。

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Django:重置密码不发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

在没有浏览器的情况下在 django 中触发密码重置电子邮件?

Django 密码重置。不发邮件

使用 Django 的密码重置通知用户电子邮件无效

使用gmail和Django注册不会重置密码电子邮件

Django Reset PW 电子邮件不在 AWS 上发送

在使用 Django 框架构建的博客 Web 应用程序中单击重置密码时,我没有收到密码重置电子邮件链接