Django: reset-password not sending email

11.3k views Asked by At

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 = '[email protected]'
EMAIL_HOST_PASSWORD = 'mypassword'
DEFAULT_FROM_EMAIL = '[email protected]'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
SERVER_EMAIL = '[email protected]'

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=['[email protected]'])
>>> 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!

9

There are 9 answers

1
Nilesh On

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

2
eRIZ On

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

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

2
Zack Kanda On

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.', '[email protected]',
['[email protected]'], 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

0
Shima Fallah On

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
AudioBubble On

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.

0
subramanyam On

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
Paolo Melchiorre On

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()]
0
anjaneyulubatta505 On

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>'])
1
Muhammad Shahzaib On

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.