PHPMailer本地发信正常 线上连接smtp.trol.pl报SSL协议不支持错误求助
故障原因及解决方案
根本原因
报错核心信息error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol指向TLS协议版本不兼容:
- 线上服务器的PHP 7.4配套的OpenSSL版本默认禁用了已被废弃的TLS 1.0、TLS 1.1协议,最低仅支持TLS 1.2及以上版本
- 目标邮箱服务商
smtp.trol.pl的465 SSL端口仍在使用旧版本TLS协议,握手时无法匹配到双方都支持的协议版本,导致连接失败 - 本地环境正常是因为本地OpenSSL配置未禁用旧协议,Gmail SMTP正常是因为Gmail服务端已适配高版本TLS协议,和PHPMailer本身无关
可尝试的解决方法
方法1:修改SMTPOptions配置,允许使用旧版本TLS协议
在现有代码的SMTPOptions的ssl数组中新增SSL版本指定参数,代码修改后如下:
$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true, // 新增以下行,允许客户端使用TLS1.0/1.1/1.2版本发起连接 'ssl_version' => STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT ) );
方法2:切换为STARTTLS端口连接
联系邮箱服务商确认是否支持587端口的STARTTLS连接,修改对应配置参数:
$mail->Port = 587; $mail->SMTPSecure = 'tls';
多数服务商的587端口会适配更高版本的TLS协议,可避开465端口的旧协议问题。
方法3:升级PHPMailer版本
当前使用的PHPMailer 5.2.27是已停止维护的老旧版本,升级到PHPMailer 6.x版本可获得更好的SSL协议适配能力,升级时注意适配新版本的API规则(如新增命名空间引入、方法名大小写调整等)。
方法4:要求邮箱服务商升级服务端TLS配置
TLS 1.0、TLS 1.1协议已在2021年被正式废弃,所有主流操作系统、运行环境默认都会禁用这两个协议,服务商不升级服务端配置的话,后续会有更多客户端无法连接其SMTP服务,该问题本质是服务商服务端配置落后导致。
验证方案
可在线上服务器命令行执行以下命令验证SMTP服务端支持的TLS版本:
- 测试TLS1.0连接:
openssl s_client -connect smtp.trol.pl:465 -tls1 - 测试TLS1.1连接:
openssl s_client -connect smtp.trol.pl:465 -tls1_1 - 测试TLS1.2连接:
openssl s_client -connect smtp.trol.pl:465 -tls1_2
如果只有TLS1.0/1.1能连接成功,即可确认是服务端协议版本过低导致的问题。
内容的提问来源于stack exchange,提问作者Syriusz
相关产品推荐
相关产品推荐

