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

时间:2013-12-02 10:14:51

标签: django smtp gmail django-authentication django-email

我正在使用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的电子邮件。有任何想法吗?谢谢大家的意见!

8 个答案:

答案 0 :(得分:5)

当您在Django Shell中进行发送测试时,这意味着您的电子邮件设置已正确配置。

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

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

>

如果用户输入的密码无效,则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()]

答案 1 :(得分:2)

GMail使用SSL,而不是TLS。这就是您的应用无法联系其服务器的原因。

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

答案 2 :(得分:2)

尝试是否发送邮件: ./manage.py shell

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 :(得分:2)

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

答案 4 :(得分:2)

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

答案 5 :(得分:2)

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

然后尝试一下

答案 6 :(得分:2)

添加以下设置

# ....
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 :(得分:0)

您的设置似乎是正确的

您必须先查看您是否已登录

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

from django.contrib.auth import views as auth_views

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