530, b'5.7.0 Authentication Required Error when using gmail to send emails through django

Question:

Im having problems with sending emails through gmail in Django. I have set up a app password and yet I cant seem to send emails through Django. My settings.py look like this

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_FROM_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'my app password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

To my best of knowledge it isn’t a gmail specific issue, as I had experienced the same problems across yahoo mail and Sendgrid, the function that’s responsible for sending the email looks like this

def send_activation_email(user, request):
    current_site = get_current_site(request)
    email_subject = "Activation Email"
    context = {"user": user, 
                "domain": current_site,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)), 
                'token': generate_token.make_token(user)
                }
    email_body = render_to_string('email/activate.html',context)

    email = EmailMessage(subject=email_subject, body=email_body, from_email=settings.EMAIL_FROM_USER, to=[user.email])

    email.send()

and the full error message is this

SMTPSenderRefused at /register/

(530, b'5.7.0 Authentication Required. Learn more atn5.7.0  https://support.google.com/mail/?p=WantAuthError g9-20020a170906394900b00872a726783dsm9975622eje.217 - gsmtp', '[email protected]')

What I tried was changing to yahoo and SendGrid mail but the same issues occurred there, just with different names. I also tried changing some details but that shouldn’t be the problem? Yet I cant seem to send an email anywhere. If anyone can help me I would really appreciate it

I also have IMAP enabled

Asked By: Ianis Donica

||

Answers:

The problem was with me using EMAIL_FROM_USER instead of EMAIL_HOST_USER, so I would need to change the code to this

settings.py

...
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'my app password'
...

views.py

...
email = EmailMessage(subject=email_subject, body=email_body, from_email=settings.EMAIL_HOST_USER, to=[user.email])
...

This is because without EMAIL_HOST_USER, Django won’t try to authenticate

Answered By: Ianis Donica
Categories: questions Tags: , , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.