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

在AWS SES与PHPMailer中配置TLS 1.2遇错求助

解决方案建议

1. 升级PHPMailer版本

你当前使用的PHPMailerAutoload.php属于PHPMailer 5.x旧版本,该版本对TLS 1.2的兼容性存在已知缺陷。建议升级到最新的PHPMailer 6.x版本:

  • 删除旧的PHPMailer文件,通过Composer安装最新版:composer require phpmailer/phpmailer
  • 替换代码中的引入逻辑,改用标准自动加载:
    require 'vendor/autoload.php';
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\Exception;
    
    $mail = new PHPMailer(true);
    

2. 修正SMTPOptions配置

调整SMTPOptions参数,确保TLS 1.2强制配置生效:

$mail->SMTPOptions = [
    'ssl' => [
        'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
        'verify_peer' => true,
        'verify_peer_name' => true
    ]
];

若你的PHP环境无法识别STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT常量(极少数PHP 7早期版本存在此问题),可直接使用对应数值:

'crypto_method' => 67108864,

3. 切换到SSL端口465尝试

当前使用的587端口是STARTTLS模式,改用465端口的直接SSL加密模式,避免STARTTLS阶段的协议协商问题:

$mail->SMTPSecure = 'ssl';
$mail->Port = 465;

4. 检查OpenSSL全局配置

即使phpinfo显示支持TLS 1.2,仍需确认OpenSSL全局配置未限制TLS版本:

  • 找到服务器上的openssl.cnf文件(常见路径:/etc/ssl/openssl.cnf或/usr/local/ssl/openssl.cnf)
  • 检查[system_default_sect]节点下的配置,确保:
    [system_default_sect]
    MinProtocol = TLSv1.2
    CipherString = DEFAULT@SECLEVEL=2
    
  • 修改后重启Apache服务。

5. 分析SMTP调试日志

你已开启SMTPDebug = 2,仔细查看输出的调试信息:

  • 确认STARTTLS命令后是否显示使用TLSv1.2协议
  • 记录AWS SES返回的具体错误代码和描述,精准定位问题根源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:35:10