13

I am using the Django password reset.

I have this code in my 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'

It redirects me to the right page, but it doesn't send the email. I have checked the Spam folder and such, but still nothing :(

Any ideas are much appreciated!

Edit

I have tried to test it using the console but I get the following error:

>>> 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.

Edit

I have the settings.py configured as above. For some reason it wasn't working before, but now it seems to be. When I run

python manage.py shell

and test it using the EmailMessage and send() function, I get a status code of 1, and I receive the email. However, I am still not getting the email from the password_reset. Any ideas? Thanks everyone for your input!

Paolo Melchiorre
  • 5,716
  • 1
  • 33
  • 52
user1670032
  • 750
  • 3
  • 12
  • 27

9 Answers9

18

As your sending test in Django shell works it means that your email settings are well configured.

If you still not getting the email from the password_reset you have to search your problem in this field.

You have to know that the password reset email is sent only to active users (is_active), and only if they have an usable password (has_usable_password).

If an user has an invalid password, Django will just silently not send the reset email.

Use the following code in the Django shell to test all your users:

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()]
Paolo Melchiorre
  • 5,716
  • 1
  • 33
  • 52
2

GMail uses SSL, not a TLS. Is that why your app cannot contact their servers.

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

eRIZ
  • 1,477
  • 16
  • 32
2

Try if the mail is sent or not: ./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)

if the return is 0, then you have to reconfigure your email settings. Make sure you input the right credential. Check the documentation https://docs.djangoproject.com/en/dev/topics/email/#send-mail

Zack Kanda
  • 108
  • 1
  • 6
2

Set EMAIL_PORT = 25. Gmail uses SSL connection, you need to set EMAIL_PORT = 25

Nilesh
  • 2,407
  • 1
  • 12
  • 20
  • It seems to be working with port 587. However, the actual password reset view seems to not be sending the e-mail. – user1670032 Dec 02 '13 at 19:08
2

This is a long shot, but weirdly enough I don't have EMAIL_BACKEND set in my settings file. I thought I did, but as I just looked through it I could not find it. I don't use Gmail, but my email sending works fine, including password reset. Also, looking at your error log in the console, it seems to be related to 'backend'. So my answer is: try removing the EMAIL_BACKEND setting.

2

In gmail create a separate password for mail sending (as app) located in advanced settings It should be around 12-16 characters in length

Then give it a try

2

Add below settings

# ....
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
# ....

Now, try to send an email from django shell

from django.core.mail import send_mail
send_mail('Subject', 'Body infromation', '<your from email>', ['<your to email>'])
anjaneyulubatta505
  • 10,713
  • 1
  • 52
  • 62
1

Your settings appear to be correct

You must first see if you are logged in

also you can use this in your main url

from django.contrib.auth import views as auth_views

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

That's how I fixed this issue:

I was also facing this issue. But when I checked my database, my database was empty. There was not a single user in my database. So, make sure you have a user in your database with this email.

  • 1
    As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Neeraj Dec 07 '21 at 11:41