Похоже, что версия Python 3.13 изменила требования к одному из параметров сертификатов SSL. И если в сертификатах ваших почтовых серверов не установлен этот новый параметр, доставка вашей электронной почты не удастся из-за сбоя SSL.
В каждом сертификате есть поле под названием «Базовые ограничения», которое было проигнорировано в предыдущих версиях Python, но теперь он ищет, чтобы для этого поля было установлено значение «Критический». Если это не так, SSL объявляет рукопожатие неудавшейся проверкой. Поэтому выдается исключение.
Я проверил сертификацию, которую мой почтовый сервер использует для SSL, и в этом поле установлено значение False, а не Critical. А так как хостинг-провайдер не имеет возможности менять сертификат для отдельных клиентов, то придется покупать собственный сертификат и устанавливать его на сервер. Это дорого обходится каждому домену, используемому для доставки электронной почты.
Предложите другим столкнуться с этой проблемой и обойти ее без необходимости приобретать специальную сертификацию из-за настроек, установленных их поставщиками услуг электронной почты. поставил? Конечно, один из способов обойти эту проблему — игнорировать проверку SSL, но это не кажется разумным.
Я удивлен, что в Python не будет новой настройки, позволяющей принять предыдущий уровень сертификации, который поддерживается версия 3.12. Но мы можем запустить одно и то же программное обеспечение на разных версиях Python и увидеть сбой в версии 3.13.
Код: Выделить всё
import ssl
EmailServer = 'SomeDomain.com'
EmailPort = 465
context = ssl.create_default_context()
with smtplib.SMTP_SSL (EmailServer, EmailPort, context=context) as server:
server.login(EmailServerUsername, EmailServerPassword)
server.send_message(msg)
Выдается исключение: Исключение отправки электронной почты [SSL: CERTIFICATE_VERIFY_FAILED] Не удалось проверить сертификат: основные ограничения сертификата CA не помечены как критические (_ssl.c:1018)>
Подробнее здесь: https://stackoverflow.com/questions/793 ... ssl-change
Мобильная версия