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

如何在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中继规则

  1. 编辑sendmail配置模板:
    sudo vi /etc/mail/sendmail.mc
    
  2. 在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
    
  3. 创建认证信息目录与文件:
    sudo mkdir -p /etc/mail/authinfo
    sudo vi /etc/mail/authinfo/sendinblue.auth
    
  4. 写入认证信息(替换为你的凭证):
    AuthInfo:smtp-relay.sendinblue.com "U:your_sendinblue_email" "P:your_smtp_password" "M:PLAIN"
    
  5. 生成哈希认证文件并重建sendmail配置:
    sudo makemap hash /etc/mail/authinfo/sendinblue.auth < /etc/mail/authinfo/sendinblue.auth
    sudo m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
    
  6. 重启sendmail服务:
    sudo systemctl restart sendmail
    

4. 配置PHP.ini(可选,设置默认参数)

  1. 找到php.ini路径:
    php -i | grep php.ini
    
  2. 编辑文件并设置以下参数:
    sendmail_path = "/usr/sbin/sendmail -t -i"
    SMTP = smtp-relay.sendinblue.com
    smtp_port = 587
    
  3. 重启Web服务器(Apache/Nginx):
    # Apache
    sudo systemctl restart httpd
    # Nginx
    sudo systemctl restart nginx
    

二、替代方案:使用Amazon SES(AWS原生SMTP服务)

若你偏好AWS生态内服务,可使用Amazon SES,步骤类似:

  1. 在SES控制台验证发送域名或邮箱地址
  2. 获取SES SMTP凭证(服务器地址、端口、用户名、密码)
  3. 按照上述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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:27:19