如何在AWS EC2服务器的PHP应用中配置SMTP发送邮件(含Sendinblue)
在AWS EC2上配置SMTP服务以支持PHP mail()函数
一、配置Sendinblue SMTP(通过sendmail中继)
PHP的mail()函数默认依赖系统的sendmail服务,因此我们需要将sendmail配置为通过Sendinblue的SMTP服务器中继邮件。
1. 获取Sendinblue SMTP凭证
登录Sendinblue控制台,进入SMTP & API页面,记录以下信息:
- SMTP服务器:
smtp-relay.sendinblue.com - 端口:587(TLS)或465(SSL)
- 用户名:你的Sendinblue注册邮箱
- 密码:控制台生成的SMTP密钥
2. 安装sendmail(若未安装)
- 对于Amazon Linux 2:
sudo yum install sendmail sendmail-cf -y - 对于Ubuntu/Debian:
sudo apt update && sudo apt install sendmail sendmail-cf -y
3. 配置sendmail中继规则
- 编辑sendmail配置模板:
sudo vi /etc/mail/sendmail.mc - 在
MAILER_DEFINITIONS前添加以下内容:define(`SMART_HOST',`smtp-relay.sendinblue.com')dnl define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl FEATURE(`authinfo',`hash -o /etc/mail/authinfo/sendinblue.auth')dnl - 创建认证信息目录与文件:
sudo mkdir -p /etc/mail/authinfo sudo vi /etc/mail/authinfo/sendinblue.auth - 写入认证信息(替换为你的凭证):
AuthInfo:smtp-relay.sendinblue.com "U:your_sendinblue_email" "P:your_smtp_password" "M:PLAIN" - 生成哈希认证文件并重建sendmail配置:
sudo makemap hash /etc/mail/authinfo/sendinblue.auth < /etc/mail/authinfo/sendinblue.auth sudo m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf - 重启sendmail服务:
sudo systemctl restart sendmail
4. 配置PHP.ini(可选,设置默认参数)
- 找到php.ini路径:
php -i | grep php.ini - 编辑文件并设置以下参数:
sendmail_path = "/usr/sbin/sendmail -t -i" SMTP = smtp-relay.sendinblue.com smtp_port = 587 - 重启Web服务器(Apache/Nginx):
# Apache sudo systemctl restart httpd # Nginx sudo systemctl restart nginx
二、替代方案:使用Amazon SES(AWS原生SMTP服务)
若你偏好AWS生态内服务,可使用Amazon SES,步骤类似:
- 在SES控制台验证发送域名或邮箱地址
- 获取SES SMTP凭证(服务器地址、端口、用户名、密码)
- 按照上述sendmail配置步骤,替换Sendinblue的信息为SES对应值即可
三、测试邮件发送
创建测试PHP文件test_email.php:
<?php $to = "recipient@example.com"; $subject = "EC2 PHP邮件测试"; $message = "这是通过SMTP服务从AWS EC2发送的测试邮件。"; $headers = "From: your_verified_email@example.com" . "\r\n" . "Reply-To: your_verified_email@example.com" . "\r\n" . "X-Mailer: PHP/" . phpversion(); if(mail($to, $subject, $message, $headers)) { echo "邮件发送成功!"; } else { echo "邮件发送失败,请检查配置。"; } ?>
通过浏览器或命令行运行测试:
php test_email.php
若失败,可查看sendmail日志排查问题:
tail -f /var/log/maillog
注意事项
- 确保EC2安全组允许出站流量通过587/465端口
- 所有发送域名/邮箱需在SMTP服务商处完成验证,避免邮件被标记为垃圾邮件
- 优先使用587端口(TLS),避免25端口(多数ISP会拦截)
内容的提问来源于stack exchange,提问作者Koutaiba Altellawi
相关产品推荐
相关产品推荐

