38

I am new in django and developing a web application using django. I have successfully set the Signup functionality using Userena in my web application and can Register as a user with Verification Email. I can show you my SMTP settings in my settings.py file

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

everything was fine before i have changed my EMAIL_HOST_PASSWORD

Infact, for some reason I have to change the previous password of that SERVER_EMAIL(raihncse@gmail.com). I have already edit the EMAIL_HOST_PASSWORD according to the new SERVER_EMAIL password.

but now, if I want to register as a new user, I am facing the following error

SMTPAuthenticationError at /accounts/signup/
(534, '5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbvNq\n5.7.14 S3l1pFXENupDa_SdPphNHrnzeLPUOyf6O0l1s31w7h_UARx11P89AxPeeZ6xBi2KeQRjsw\n5.7.14 nvpxZhPVv771W9ljEDyeWnqpqv3_nakuPo36BEl3IlYj9qVujNB5cm0TYFf9LQAxRjFdda\n5.7.14 xh-y5spA9zIQONDsvRRgN3e0DXoIkgxTO3Mu75IaACi-XlvFtFfPBiQ81gUrBZ_PhZsBmh\n5.7.14 ajsSf-flNEmoSydyOTNdmwdB0__8> Please log in via your web browser and\n5.7.14 then try again.\n5.7.14 Learn more at\n5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 40sm12125121qgi.47 - gsmtp')
Super Kai - Kazuya Ito
  • 22,221
  • 10
  • 124
  • 129
Md. Tanvir Raihan
  • 4,075
  • 9
  • 37
  • 70

16 Answers16

77

A relatively recent change in Google's authentication system means you're going to have to "allow less secure app access" to your Google account, in order for this to work.

In your error, you are recommended to visit this link: https://support.google.com/mail/answer/78754

On that page:

Step #2 asks you to try Displaying an Unlock Captcha

Step #3 explains how to allow less secure app access. In summary:

Go to Allow less secure apps and choose "Allow" to let less secure apps access your Google account. We don't recommend this option because it may make it easier for someone to gain access to your account.

rnevius
  • 26,578
  • 10
  • 58
  • 86
  • 2
    `Note to Google Apps users: This setting is hidden if your administrator has locked less secure app account access.` you have to enable this in the admin console first and after a while you will be abler to allow `lesssecureapps` – psychok7 May 01 '16 at 15:47
  • 1
    If you want to activate this option in Google Apps as @psychok7 points out: `Security > Basic Settings > Less Secure Apps Access`. https://support.google.com/a/answer/2537800?hl=en#lesssecureappsaccess – Brais Gabin Jun 14 '16 at 15:28
  • 1
    +1 for the unlock captcha, i was wondering why it doesn't authenticate even if i enabled allow less secure app – Linh Nguyen Jun 16 '21 at 10:02
8

Recent security protocol of Google will not allow you to send messages through less secure apps.

So the fix is:

Turn ON less secure apps.

But only enabling this doesn't seem to work now. Google does not allow apps to send messages using your default gmail password. So to send messages you have to follow these two simple steps:

  1. Turn ON two factor authentication of your gmail account. Link to turn it on.

  2. Then create app password for your gmail account from Google. It will be a 16 digit code. Put it in settings.py or _credentials.py by: EMAIL_HOST_PASSWORD = 'sixt eend igit code' Link to know how to set up your application password for email

And BINGO! Problem will be solved.

Note: App password can only be created if you have enabled 2 factor authentication for your account.

Community
  • 1
  • 1
Pran Kumar Sarkar
  • 953
  • 12
  • 26
  • The link seems suspicious/wrong. Do not click on it. – Abhay Maniyar Mar 12 '20 at 17:31
  • 1
    Can you please be A LOT MORE EXPLICIT about what you actually did here. That link is dead and having clicked on my Gmail account's link to set up 2-stage authentication I have no idea what to do next. What on Earth do you mean by "create app password for your gmail account ... it will be a 16 digit code"? – mike rodent May 07 '20 at 09:05
  • 1
    @AbhayManiyar Thanks for pointing it out. I did a typing mistake `https://ttps://....` in posting the url. I fixed the broken url now. – Pran Kumar Sarkar May 08 '20 at 06:39
  • @mikerodent When you send an email with your gmail account, then your username and password is enough. But when you try to do it programmatically using an application, then first you need to let Google know that the application which is using the email to send message is your application and you trust it. So you have to set up a separate `16 digit password` for your application. Read this article to set up your application password : `shorturl.at/imAQZ` – Pran Kumar Sarkar May 08 '20 at 06:45
  • 1
    This is the correct updated answer – Hernán Eche Nov 02 '21 at 12:34
5

For me, I did turn on the less secure app option even then I was getting SMTP error.This is how I solved it.

Go to https://accounts.google.com/DisplayUnlockCaptcha and allow access to your Google account by clicking on continue and then try resetting password again in Django.

Himanshu Poddar
  • 7,112
  • 10
  • 47
  • 93
3

This works for me:

  1. Turn ON two factors authentication of your Gmail account.

Then create an app password for your Gmail account from Google. It will be a 16 digit code. Put it in settings.py or env.py by EMAIL_HOST_PASSWORD = 'sixteen-digit code you get from your Gmail' and remember to add them in Django config vars also

MD Mushfirat Mohaimin
  • 1,966
  • 3
  • 10
  • 22
2

You need turn on support for less secure devices: https://www.google.com/settings/security/lesssecureapps

DreamInBox
  • 174
  • 2
  • 12
2

If you are integrating with AWS, my suggestion is to use SES(simple Email Service). You can add and verify your email address in SES which wouldn't raise SMTPAuthenticationError.

I have followed this - https://medium.com/hackernoon/the-easiest-way-to-send-emails-with-django-using-ses-from-aws-62f3d3d33efd.

Dharman
  • 30,962
  • 25
  • 85
  • 135
1

This worked for me:

I first created email_info.py in the same folder as settings.py:

from .email_info import *

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'youremail@gmail.com'
EMAIL_HOST_PASSWORD = 'your_pass'
EMAIL_PORT = 587

Then in settings.py I added:

from .email_info import *

EMAIL_USE_TLS = EMAIL_USE_TLS
EMAIL_HOST = EMAIL_HOST
EMAIL_HOST_USER = EMAIL_HOST_USER
EMAIL_HOST_PASSWORD = EMAIL_HOST_PASSWORD
EMAIL_PORT = EMAIL_PORT

And finally in views.py:

from django.conf import settings
from django.core.mail import send_mail

send_mail(subject, message, from_email, to_list, fail_silently=Tre)

Here's a YouTube video that explains this process: https://www.youtube.com/watch?v=51mmqf5a0Ss

Jerrybibo
  • 1,315
  • 1
  • 21
  • 27
Dantez Layton
  • 127
  • 1
  • 5
1

You can also generate a dedicated email password for Django application.

1- Please check this link https://support.google.com/accounts/answer/185839?co=GENIE.Platform%3DDesktop&hl=en

2- Open the 2 Step verification setting from GOOGLE ACCOUNT--> MANAGE YOUR ACCOUNT --> SECURITY ---> 2 STEP VERIFICATION

3- Third, create a dedicated pass for Django, it will be 16 characters.

4- You can find the django email settings below

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'your_account@gmail.com'
EMAIL_HOST_PASSWORD = '16characters password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Arin Yazilim
  • 939
  • 8
  • 6
1

Make sure the password in EMAIL_HOST_PASSWORD is the password that you can use to login to the gmail account in EMAIL_HOST_USER. To confirm that, go to gmail.com and login to the gmail account in EMAIL_HOST_USER using the password in EMAIL_HOST_PASSWORD. If it works in one go without any form of 2-step authentication, then you're set. Otherwise, allow less secure apps and disable display unlock captcha using the tutorials found in other answers. For me, doing both and most importantly, using the correct password worked for me.

MD Mushfirat Mohaimin
  • 1,966
  • 3
  • 10
  • 22
0

How to get emails from Django or any library:

Notes

Note: If your account is using two step authentication it won't work.

First open an Incognito window with the account you want to send emails with.

Open Less secure apps Then enable it

After that navigate to Unlock Captcha Then enable it

After that fill the account email and password in the library which you are using

In Django:

  • EMAIL_HOST_USER is the email address. Ex: email@example.com

  • EMAIL_HOST_PASSWORD is the email password. Ex: smtpmessages.manager@2012

Run the program First it will not work, To make it work open Gmail on the incognito window.

Then there will be an email from google saying that an app needs access to your google account

Open the email and click the link and select yes it was me Then retry and it should work

Thank You!

For more info visit: Check Gmail through other email platforms

MrAni
  • 23
  • 6
0
  1. Turn ON two factors authentication of your Gmail account.
  2. Generate App Password(You will get this option after Two factor authentication) >> select app >> select device (In my case App is Gmail and device is Windows Machine)
  3. Copy the 16 digit password
  4. Paste this password at EMAIL_HOST_PASSWORD = "(Paste password here)"
0

This is not exactly an answer to your question. But considering privacy and security of your google account, use Environment Variables in Advanced system settings. And access using "os.environ.get('Host_Email') and ('Host_Pass)" instead of putting your email and password in your code.

https://www.youtube.com/watch?v=IolxqkL7cD8

Maxy
  • 39
  • 7
0

You need to use an app password to allow your app to access your google account. *You can see my answer explaining how to generate an app password.

Sign in with App Passwords:

An App Password is a 16-digit passcode that gives a less secure app or device permission to access your Google Account. App Passwords can only be used with accounts that have 2-Step Verification turned on.

So, your code with an app password of 16-digit passcode is something like below:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'raihncse@gmail.com'
DEFAULT_FROM_EMAIL = 'raihncse@gmail.com'
SERVER_EMAIL = 'raihncse@gmail.com'
EMAIL_HOST_PASSWORD = 'xylnudjdiwpojwzm' # Here

In addition, google hasn't allowed your app to access your google account with username(email address) and password since May 30, 2022. So now, you need username(email address) and an app password to access your google account.

Less secure apps & your Google Account:

To help keep your account secure, from May 30, 2022, ​​Google no longer supports the use of third-party apps or devices which ask you to sign in to your Google Account using only your username and password.

Super Kai - Kazuya Ito
  • 22,221
  • 10
  • 124
  • 129
-1

I think you need to turn on google less secure apps. Login to your account and go to less secure apps to change your setting. It is not good but you can try your code.

phd
  • 82,685
  • 13
  • 120
  • 165
-1

If you already have allowed access to less secure apps and still having problems go to your account >> login and security >> notifications and activity in your devices, and see if there is a device that tried to access and google denied it, allow that access.

David
  • 97
  • 9
-2

Make sure that you have selected "Turn On" option in Allow less secure apps page (https://www.google.com/settings/security/lesssecureapps). I suggest you to refresh the page once after selecting "Turn On" radio button. The radio button selection should not move "Turn Off"

Some how it is getting "Turn Off" automatically.

vinnu
  • 3
  • 1