You need to enable JavaScript to run this app. smtplib使用SMTP_SSL出现WRONG_VERSION_NUMBER错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

smtplib使用SMTP_SSL出现WRONG_VERSION_NUMBER错误如何解决

错误含义

ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number 是SSL/TLS握手失败的典型报错,核心原因是客户端和服务端在协商加密协议版本时无法达成一致。放在你的场景里,绝大多数情况是你用隐式TLS的SMTP_SSL请求了一个没有开启隐式加密的端口,服务端返回的明文响应被客户端当作SSL报文解析,直接触发版本号不匹配的错误。
你的STARTTLS版本接口可以正常运行,说明Postfix的TLS证书、加密配置本身没有问题,问题确实出在465端口的隐式TLS配置缺失。

解决方法

方案1:开启Postfix 465端口的隐式TLS服务(适配你现有SMTP_SSL代码)

Postfix默认仅开启587端口的STARTTLS显式加密服务,465端口的隐式加密需要手动开启:

  1. 编辑Postfix配置文件/etc/postfix/master.cf,找到被注释的smtps相关配置段,取消注释即可:
smtps     inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  1. 保存配置后重启Postfix服务生效:
    systemctl restart postfix
  2. 验证465端口是否正常监听:
    ss -tulnp | grep 465
    确认端口正常监听后,再次调用send_mail_ssl函数即可正常运行。

方案2:直接复用现有STARTTLS接口(无需修改服务端配置)

如果没有强制要求使用465端口发信,你已经跑通的send_mail_tls接口安全性和隐式TLS没有差异,可以直接使用,不需要额外维护SMTP_SSL版本的代码。

可选排查项

如果开启465端口后仍然报错,可以做以下检查:

  • 确认服务器防火墙、云服务商安全组已经开放465端口的入站访问权限
  • 可以手动指定客户端支持的最低TLS版本,避免版本协商失败:在创建context后添加context.minimum_version = ssl.TLSVersion.TLSv1_2
  • 用openssl命令直接验证465端口的SSL状态:openssl s_client -connect smtp.mydomain.com:465,如果命令执行失败则说明服务端465端口配置仍然有问题

内容的提问来源于stack exchange,提问作者rudicangiotti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 13:24:05