Python 3.10发送邮件遇SSL错误:EOF违反协议问题求助
Python 3.10 发送邮件遇 SSL.SSLEOFError 问题(Python 3.8 正常,公司代理环境)
问题背景
身处公司代理环境,Python 3.8 下邮件发送功能可正常运行,但升级到 Python 3.10 后触发 SSL 握手错误,无法完成邮件发送。
代码片段
def send_email(): text = self.message.as_string() with smtplib.SMTP(smtp_host, smtp_port) as server: server.ehlo() if server.has_extn('STARTTLS'): server.starttls() server.ehlo() print(f"Sending email") server.sendmail(sender_email, receiver_email, text) print('Email sent')
报错信息
File "path\mail.py", line 102, in send_email server.starttls() File "path\env\lib\smtplib.py", line 790, in starttls self.sock = context.wrap_socket(self.sock, File "path\env\lib\ssl.py", line 513, in wrap_socket return self.sslsocket_class._create( File "path\env\lib\ssl.py", line 1071, in _create self.do_handshake() File "path\env\lib\ssl.py", line 1342, in do_handshake self._sslobj.do_handshake() ssl.SSLEOFError: [SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)
排查更新
已初步定位问题源于 OpenSSL 版本差异:
- Python 3.8 默认依赖低版本 OpenSSL,默认加密套件为
ssl._DEFAULT_CIPHERS = ('DES-CBC3-SHA')(属于弱加密套件) - 当前 Python 3.10 搭配 OpenSSL 3.0.10,推测握手失败与加密套件、认证协议不兼容有关
目前考虑将 OpenSSL 降级到 1.1.1 版本(已知该版本可正常运行),但这种方案并不推荐,想请教有没有更合适的修复方法?
内容的提问来源于stack exchange,提问作者geds133
相关产品推荐
相关产品推荐

