Smtplib.SMTPConnectError: (421, b'Service not available') event after 2-step verification and used generated app password as the HOST_USER_PASSWORD

I am trying to incorporate email confirmation to user registration in my project. The user is supposed to get a confirmation link in their email before successful registration. To achieve this, I used django.core.mail.backends.smtp.EmailBackend as the email backend but I got the error below:

Internal Server Error: /account/register/ Traceback (most recent call last): File "C:\Users\lenovo.virtualenvs\ecommerce4-MU6fbcf2\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request) File "C:\Users\lenovo.virtualenvs\ecommerce4-MU6fbcf2\lib\site-packages\django\core\handlers\base.py", line 197, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\lenovo\Desktop\ecommerce4\account\views.py", line 88, in account_register user.email_user(subject=subject, message=message) File "C:\Users\lenovo\Desktop\ecommerce4\account\models.py", line 59, in email_user send_mail( File "C:\Users\lenovo.virtualenvs\ecommerce4-MU6fbcf2\lib\site-packages\django\core\mail_init.py", line 87, in send_mail
return mail.send() File "C:\Users\lenovo.virtualenvs\ecommerce4-MU6fbcf2\lib\site-packages\django\core\mail\message.py", line 298, in send return self.get_connection(fail_silently).send_messages([self]) File "C:\Users\lenovo.virtualenvs\ecommerce4-MU6fbcf2\lib\site-packages\django\core\mail\backends\smtp.py", line 124, in send_messages new_conn_created = self.open() File "C:\Users\lenovo.virtualenvs\ecommerce4-MU6fbcf2\lib\site-packages\django\core\mail\backends\smtp.py", line 80, in open
self.connection = self.connection_class( File "C:\Users\lenovo\AppData\Local\Programs\Python\Python310\lib\smtplib.py", line 258, in init raise SMTPConnectError(code, msg) smtplib.SMTPConnectError: (421, b'Service not available')

I allowed two step authentication to my gmail account and then created app password. I used the app password generated for my account as the HOST_USER_PASSWORD Below is the code how I configured the the setings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST='smtp.gmail.com'
EMAIL_HOST_USER='my gmail'
EMAIL_HOST_PASSWORD='the generated app password'
EMAIL_PORT=587
EMAIL_USE_TLS=True

Below is the model.py for user

import uuid
from django.conf import settings
from django.contrib.auth.models import (AbstractBaseUser, BaseUserManager,
                                        PermissionsMixin)
from django.core.mail import send_mail
from django.db import models
from django.utils.translation import gettext_lazy as _
class Customer(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('email address'), unique=True)
    name = models.CharField(max_length=150)
    mobile = models.CharField(max_length=20, blank=True)
    is_active = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    objects = CustomAccountManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

    class Meta:
        verbose_name = "Accounts"
        verbose_name_plural = "Accounts"

    def email_user(self, subject, message):
        send_mail(
            subject,
            message,
            settings.EMAIL_HOST_USER,
            [self.email],
            fail_silently=False,
        )



    def __str__(self):
        return self.name:

The view for user registration

from django.contrib import messages
from django.contrib.auth import login, logout
from django.contrib.auth.decorators import login_required
from django.contrib.sites.shortcuts import get_current_site
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect, render
from django.template.loader import render_to_string
from django.urls import reverse
from django.utils.encoding import force_bytes, force_str
from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode
from orders.models import Order
from orders.views import user_orders
from store.models import Product

from .forms import RegistrationForm, UserAddressForm, UserEditForm
from .models import Address, Customer
from .tokens import account_activation_token
def account_register(request):

    if request.user.is_authenticated:
        return redirect("account:dashboard")

    if request.method == "POST":
        registerForm = RegistrationForm(request.POST)
        if registerForm.is_valid():
            user = registerForm.save(commit=False)
            user.email = registerForm.cleaned_data["email"]
            user.set_password(registerForm.cleaned_data["password"])
            
            current_site = get_current_site(request)
            subject = "Activate your Account"
            message = render_to_string(
                "account/registration/account_activation_email.html",
                {
                    "user": user,
                    "domain": current_site.domain,
                    "uid": urlsafe_base64_encode(force_bytes(user.pk)),
                    "token": account_activation_token.make_token(user),
                },
            )
            user.email_user(subject=subject, message=message)
            user.is_active = False
            user.save()
            return render(request, "account/registration/register_email_confirm.html", {"form": registerForm})
    else:
        registerForm = RegistrationForm()
    return render(request, "account/registration/register.html", {"form": registerForm})

Back to Top