You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制PhpMailer 5.2使用TLS 1.2协议连接邮件服务器

PHPMailer 5.2 强制使用TLS 1.2 解决方案

前置校验

先确认你的运行环境满足最低要求:

  • PHP版本 >= 5.3.19
  • 服务器openssl版本 >= 1.0.1
    如果低于以上版本,TLS 1.2支持不完整,需要先升级对应依赖组件。

方案1:修改实例化配置(无需改源码,优先使用)

在你调用$mail->send()方法之前,添加以下配置代码:

// 配置SMTP连接参数强制走TLS 1.2
$mail->SMTPOptions = [
    'ssl' => [
        'verify_peer' => true,
        'verify_peer_name' => true,
        'allow_self_signed' => false,
        // 低版本PHP没有内置STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT常量的话,直接写数值7即可
        'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
    ]
];
// 确认加密模式和端口配置匹配服务商要求
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
// 若服务商要求走465端口SSL模式,替换上面两行为:
// $mail->SMTPSecure = 'ssl';
// $mail->Port = 465;

说明:如果你的PHP版本低于5.3.19没有对应常量,将STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT替换为数值7即可生效

方案2:修改PHPMailer源码(方案1不生效时使用)

  1. 打开PHPMailer 5.2的核心文件class.phpmailer.php
  2. 搜索找到调用stream_socket_enable_crypto函数的代码段
  3. 将该函数的第三个加密方法参数,直接替换为STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT或者数值7,修改后示例:
if (!stream_socket_enable_crypto($this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT)) {
    // 原有的错误处理逻辑不用修改
    return false;
}

验证方式

修改完成后写简单的测试脚本执行发信,若没有返回TLS版本不兼容的报错,且邮件正常发送即为配置成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:36:05