Es scheint, dass Version 3.13 von Python die Anforderungen für eine der Einstellungen in SSL-Zertifikaten geändert hat. Und wenn für die Zertifikate Ihrer E-Mail-Server diese neue Einstellung nicht festgelegt ist, schlägt die Zustellung Ihrer E-Mails mit einem SSL-Fehler fehl.
In jedem Zertifikat gibt es ein Feld namens „Grundlegende Einschränkungen“, das in ignoriert wurde Frühere Versionen von Python, aber jetzt sucht es nach dem Feld, das auf „Kritisch“ gesetzt ist. Ist dies nicht der Fall, erklärt SSL den Handshake als fehlgeschlagene Überprüfung. Daher wird eine Ausnahme ausgelöst.
Ich habe die Zertifizierung überprüft, die mein E-Mail-Server für SSL verwendet, und dieses Feld ist auf „Falsch“ und nicht auf „Kritisch“ gesetzt. Und da der Hosting-Anbieter nicht in der Lage ist, ein Zertifikat für einzelne Clients zu ändern, wäre es notwendig, eine benutzerdefinierte Zertifizierung zu erwerben und diese auf dem Server zu installieren. Dies ist für jede Domain, die für die E-Mail-Zustellung verwendet wird, kostspielig.
Lassen Sie andere auf dieses Problem stoßen und es umgehen, ohne jetzt aufgrund der Einstellungen ihrer E-Mail-Dienstanbieter eine benutzerdefinierte Zertifizierung erwerben zu müssen eingestellt hat? Eine Möglichkeit, dies zu umgehen, besteht sicherlich darin, die SSL-Überprüfung zu ignorieren, aber das scheint nicht klug zu sein.
Ich bin überrascht, dass es in Python keine neue Einstellung gibt, um die vorherige Zertifizierungsstufe zu akzeptieren v3.12 unterstützt. Wir können jedoch dieselbe Software auf verschiedenen Python-Versionen ausführen und den Fehler in Version 3.13 sehen.
Code: Select all
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)
Die ausgelöste Ausnahme ist: E-Mail-Ausnahme [SSL: CERTIFICATE_VERIFY_FAILED] Zertifikatsüberprüfung fehlgeschlagen: Grundlegende Einschränkungen des CA-Zertifikats nicht als kritisch markiert (_ssl.c:1018)