在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
相关产品推荐
相关产品推荐

