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

Laravel集成AWS SES邮件发送成功但收件箱未收到问题排查求助

AWS SES发送成功但收件箱未收到邮件的排查建议(Laravel Vapor环境)

以下是针对你的场景的具体排查步骤:

1. 核查AWS SES的邮件实际发送状态

  • 登录AWS SES控制台,进入「邮件发送」>「发送统计」,确认是否有对应时间的发送请求记录,同时查看是否存在软退信、硬退信或投诉数据
  • 进入「邮件轨迹」页面,输入收件邮箱进行搜索,查看邮件的完整流向:是否被收件服务商标记为垃圾邮件、拦截,或是SES未实际发出

2. 验证IAM用户权限完整性

  • 确认你的IAM用户已被授予ses:SendEmail和ses:SendRawEmail权限——Laravel发送的富文本/带附件邮件可能调用SendRawEmail接口,仅配置SendEmail会导致隐性失败
  • 在IAM控制台查看该用户的权限策略,确保包含类似如下的允许规则:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail"
            ],
            "Resource": "*"
        }
    ]
}

3. 补全Laravel与Vapor的配置细节

  • 确认.env或Vapor环境变量中配置了AWS_DEFAULT_REGION——SES是区域服务,若未指定区域,SDK可能使用默认区域,但你的SES服务可能在其他区域激活,导致发送请求投递到错误区域
  • 检查Vapor仪表盘的环境变量,确认MAIL_MAILER已设置为ses(Vapor环境变量优先级高于本地.env)
  • 在Vapor中临时设置LOG_LEVEL=debug,触发密码重置后查看详细日志,核对Laravel调用SES时的收件人、发件人参数是否正确,是否存在未捕获的警告信息

4. 排查收件邮箱的邮件拦截规则

  • 检查收件邮箱的「垃圾邮件」「垃圾箱」「归档」文件夹,部分邮件服务商可能自动归类此类触发邮件
  • 用MAIL_FROM_ADDRESS对应的邮箱给收件邮箱发送一封普通测试邮件,确认双方邮件通道未被收件服务商拦截

5. 确认SES发件人验证与域名配置

  • 确保MAIL_FROM_ADDRESS是SES控制台中已验证的邮箱或域名——即使脱离沙箱环境,发件人必须为已验证身份(除非你完成了域名验证并通过生产访问审核)
  • 若使用域名作为发件人,检查DKIM、SPF记录是否在DNS服务商处正确配置,SES控制台提供了对应的验证工具可确认记录生效状态

6. 绕过Laravel直接测试SES接口

  • 在Vapor环境中执行一段简单的AWS SDK测试代码,直接调用SES发送邮件,排除Laravel框架层面的问题:
use Aws\Ses\SesClient;

$client = new SesClient([
    'version' => 'latest',
    'region' => env('AWS_DEFAULT_REGION'),
    'credentials' => [
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
    ],
]);

$result = $client->sendEmail([
    'Destination' => ['ToAddresses' => ['your-target-email@example.com']],
    'Message' => [
        'Body' => ['Text' => ['Data' => '测试邮件:直接调用SES接口']],
        'Subject' => ['Data' => 'SES接口测试'],
    ],
    'Source' => env('MAIL_FROM_ADDRESS'),
]);

var_dump($result);

7. 检查Laravel邮件队列状态

  • 若Laravel配置了邮件队列(如MAIL_QUEUE=database),确认Vapor环境中的队列服务是否正常运行——邮件可能被放入队列但未被处理,导致返回成功但实际未发送
  • 可临时将MAIL_QUEUE设置为sync,测试邮件是否能立即发送

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:15:30