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

Laravel 5.1调用Amazon SES发邮件遇TLS 1.2强制要求报错排查

问题解决方案

以下是针对Laravel 5.1 + PHP 5.6.40环境下,调用Mail::send()时被Amazon SES拒绝(提示需TLS1.2+)的排查及解决步骤:

1. 强制Swift Mailer使用TLS 1.2

Laravel 5.1默认未明确指定TLS版本,需在邮件配置中添加流上下文参数,强制Swift Mailer使用TLS1.2。修改config/mail.php中的smtp配置项:

'smtp' => [
    'driver' => 'smtp',
    'host' => env('MAIL_HOST', 'email-smtp.us-east-1.amazonaws.com'),
    'port' => env('MAIL_PORT', 587),
    'from' => ['address' => env('MAIL_FROM_ADDRESS'), 'name' => env('MAIL_FROM_NAME')],
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
    'username' => env('MAIL_USERNAME'),
    'password' => env('MAIL_PASSWORD'),
    'sendmail' => '/usr/sbin/sendmail -bs',
    // 新增以下流配置
    'stream' => [
        'ssl' => [
            'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
        ],
    ],
],

该配置会强制Swift Mailer在建立SSL连接时仅使用TLS1.2,避免尝试更低版本的协议。

2. 检查PHP OpenSSL配置

确认PHP的OpenSSL扩展已启用TLS1.2:

  • 执行php -i | grep openssl查看配置
  • 确保输出中Protocols包含TLSv1.2
  • 若openssl.cafile或openssl.capath未配置,需指定有效CA证书路径(可使用系统默认CA证书,比如Ubuntu下的/etc/ssl/certs/ca-certificates.crt)

3. 直接用Swift Mailer测试连接

绕过Laravel门面,编写独立测试脚本验证TLS1.2连接是否正常:

require_once 'vendor/autoload.php';

// 替换为你的SES凭证和端点
$transport = Swift_SmtpTransport::newInstance('email-smtp.us-east-1.amazonaws.com', 587, 'tls')
    ->setUsername(env('MAIL_USERNAME'))
    ->setPassword(env('MAIL_PASSWORD'))
    ->setStreamOptions([
        'ssl' => [
            'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
        ]
    ]);

$mailer = Swift_Mailer::newInstance($transport);

$message = Swift_Message::newInstance('TLS 1.2 Test')
    ->setFrom(['your@domain.com' => 'Your Name'])
    ->setTo(['test@domain.com'])
    ->setBody('Testing TLS 1.2 connection to SES');

try {
    $sent = $mailer->send($message);
    echo "Success! Sent $sent messages.";
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}

运行脚本后,若能正常发送,说明问题出在Laravel配置层面;若仍报错,需检查服务器SSL环境是否存在隐性限制。

4. 次要检查项

  • 确认EC2安全组和NACL已允许出站访问SES端口(587或465)
  • 验证MAIL_HOST是否为对应AWS区域的SES SMTP端点(比如us-west-2为email-smtp.us-west-2.amazonaws.com)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:43:25