Smtplib.SMTPConnectError: (421, b'Service not available') событие после двухэтапной проверки и использования сгенерированного пароля приложения в качестве HOST_USER_PASSWORD

Я пытаюсь включить подтверждение электронной почты при регистрации пользователя в свой проект. Предполагается, что пользователь должен получить ссылку подтверждения в своем электронном письме до успешной регистрации. Для этого я использовал django.core.mail.backends.smtp.EmailBackend в качестве почтового бэкенда, но получил ошибку ниже:

Внутренняя ошибка сервера: /account/register/ Traceback (последний последний вызов): File "C:\Users\lenovo.virtualenvs\ecommerce4-MU6fbcf2\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
. response = get_response(request) Файл "C:\Users\lenovo.virtualenvs\ecommerce4-MU6fbcf2\lib\site-packages\django\core\handlers\base.py", строка 197, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) Файл "C:\Users\lenovo\Desktop\ecommerce4\account\views.py", строка 88, in account_register user.email_user(subject=subject, message=message) Файл "C:\Users\lenovo\Desktop\ecommerce4\account\models.py", строка 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() Файл "C:\Users\lenovo.virtualenvs\ecommerce4-MU6fbcf2\lib\site-packages\django\core\mail\message.py", строка 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() Файл "C:\Users\lenovo.virtualenvs\ecommerce4-MU6fbcf2\lib\site-packages\django\core\mail\backends\smtp.py", строка 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')

Я разрешил двухэтапную аутентификацию для своей учетной записи gmail, а затем создал пароль приложения. Я использовал пароль приложения, созданный для моего аккаунта, в качестве HOST_USER_PASSWORD. Ниже представлен код, как я настроил 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

Ниже приведен model.py для пользователя

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:

Представление для регистрации пользователя

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})

Вернуться на верх