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测试:
如果关闭后能发送邮件,就永久配置SELinux允许HTTPD发送邮件:sudo setenforce 0sudo setsebool -P httpd_can_sendmail on
内容的提问来源于stack exchange,提问作者gr8m8
相关产品推荐
相关产品推荐

