Ошибка SSL-сертификата в SMTP-приложении Django DRF [дубликат]

У меня есть серверная часть Django DRF, которая работает нормально при использовании EMAIL_BACKEND = "django.core.mail.backends.locmem.EmailBackend".

Но затем, переключившись на SMTP, поддерживаемый Google, как:

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.gmail.com"
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = config("GMAIL_APP_HOST_USER")
EMAIL_HOST_PASSWORD = config("GMAIL_APP_HOST_PASSWORD")
DEFAULT_FROM_EMAIL = "TestApp"
ACCOUNT_EMAIL_SUBJECT_PREFIX = ""

Я получаю [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Basic Constraints of CA cert not marked critical

Это тестируется на ПК с Windows 11.

Подробная информация об ошибке с обратной трассировкой:

Попытки отладки и исправления: При попытке отладки я написал это в настройках

import smtplib
import ssl
import certifi

print(certifi.where())
context = ssl.create_default_context(cafile=certifi.where())
print(context)

Это выводит:

C:\dev\myProject\venv\Lib\site-packages\certifi\cacert.pem
<ssl.SSLContext object at 0x0000024ACAE360D0>

И в строке server.starttls(context=context) это вызывает ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1032)

Также пробовал (но получаю ту же ошибку) изменить серверную часть электронной почты на пользовательскую следующим образом:

class EmailBackend(SMTPBackend):   
    @cached_property
    def ssl_context(self):
        if self.ssl_certfile or self.ssl_keyfile:
            ssl_context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT)
            # set verify location:
            if hasattr(django_settings, 'CA_PATH') and django_settings.CA_PATH is not None:
                ssl_context.load_verify_locations(capath=django_settings.CA_PATH)
            ssl_context.load_cert_chain(self.ssl_certfile, self.ssl_keyfile)
            return ssl_context
        else:
            ssl_context = ssl.create_default_context()
            return ssl_context
Вернуться на верх