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

EC2使用SES发邮件遇421超时:客户端需回传什么及端口?

问题2:PHP应用无法启用SMTP发送功能

PHP内置的mail()函数本身不支持SSL加密(465端口),所以直接用mail()大概率会失败,更推荐用成熟的邮件库(比如PHPMailer)来实现,同时排查以下几点:

1. 用PHPMailer配置正确的SMTP参数

这是最可靠的方式,示例代码如下:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// 引入PHPMailer(如果用Composer安装的话)
require 'vendor/autoload.php';

$mail = new PHPMailer(true);
try {
    // 服务器配置
    $mail->isSMTP();
    $mail->Host = '你的SMTP服务器地址'; // 比如smtp.example.com
    $mail->SMTPAuth = true;
    $mail->Username = '你的发件邮箱';
    $mail->Password = '你的邮箱密码/授权码';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // 对应465端口
    $mail->Port = 465;

    // 收件人配置
    $mail->setFrom('你的发件邮箱', '你的名称');
    $mail->addAddress('收件邮箱', '收件人名称');

    // 邮件内容
    $mail->isHTML(true);
    $mail->Subject = 'PHP测试邮件';
    $mail->Body = '<h1>这是来自PHP应用的测试邮件</h1>';
    $mail->AltBody = '这是纯文本格式的测试内容';

    $mail->send();
    echo '邮件发送成功';
} catch (Exception $e) {
    echo "发送失败:{$mail->ErrorInfo}";
}
?>

2. 检查PHP进程的网络权限

  • 登录EC2服务器,切换到PHP运行的用户(比如www-data),执行以下命令测试是否能连接SMTP服务器:
    sudo -u www-data curl -v smtps://你的SMTP服务器地址:465
    
    如果连接失败,说明网络权限有问题,回到安全组确认出站规则是否允许。

3. 检查SELinux限制(针对Amazon Linux/CentOS系统)

如果EC2实例用的是带SELinux的系统,可能会阻止PHP进程发送邮件:

  • 临时关闭SELinux测试:
    sudo setenforce 0
    
    如果关闭后能发送邮件,就永久配置SELinux允许HTTPD发送邮件:
    sudo setsebool -P httpd_can_sendmail on
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:55:30