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

使用AWS SES SMTP发送重置邮件触发Swift_RfcComplianceException错误

问题分析与解决方案

问题回顾

用Mailtrap这类普通SMTP时邮件发送正常,但切换到AWS SES生产级SMTP后,执行密码重置操作触发Swift_RfcComplianceException,错误信息:Address in mailbox given [] does not comply with RFC 2822, 3.6.2。但直接调用Mail::send()能正常发信。

核心原因

AWS SES对邮件地址的RFC合规性校验比普通SMTP严格得多,空地址(无论是收件人还是发件人)都会直接触发报错,而普通SMTP可能会忽略这类问题。

排查与解决步骤

1. 确认密码重置流程的收件人邮箱是否为空

Laravel默认密码重置逻辑依赖用户提交的邮箱,如果前端没传对参数,或者后端没正确获取,就会导致收件人地址为空。

  • 打开ForgotPasswordController,在sendResetLinkEmail方法里加调试代码,查看$request->email是否有值:
    public function sendResetLinkEmail(Request $request)
    {
        $this->validateEmail($request);
        // 临时调试,确认邮箱参数是否正确获取
        dd($request->email);
        // ... 原有逻辑
    }
    
  • 检查前端表单的邮箱输入框name属性是否为email,确保请求参数能正确传到后端。

2. 检查邮件配置的发件人地址

AWS SES要求发件人地址必须是已验证的域名或邮箱,且绝对不能为空。

  • 打开.env文件,确认以下配置:
    MAIL_FROM_ADDRESS=verified@your-domain.com # 必须是SES控制台已验证的邮箱/域名
    MAIL_FROM_NAME="${APP_NAME}"
    
    若MAIL_FROM_ADDRESS为空或未通过SES验证,修改后重新测试。

3. 排查自定义密码重置邮件的逻辑

如果自定义了密码重置的Mailable类或邮件视图,可能不小心留了空的收件人/抄送地址:

  • 查看config/auth.php里的密码重置配置,找到对应的邮件类:
    'passwords' => [
        'users' => [
            // ... 其他配置
            'email' => 'App\Notifications\ResetPassword', // 或者视图路径
        ],
    ],
    
  • 如果是自定义Mailable,检查build方法里的收件人设置:
    public function build()
    {
        // 确认$this->user->email不是空值
        return $this->to($this->user->email)
                    ->subject('重置密码通知')
                    ->view('emails.password.reset');
    }
    

4. 临时验证:用Mail::send模拟重置流程

在ForgotPasswordController里替换原有逻辑,手动调用Mail::send测试:

public function sendResetLinkEmail(Request $request)
{
    $this->validateEmail($request);
    $email = $request->email;
    // 手动发送测试邮件
    Mail::send('auth.emails.password', ['token' => 'test-token'], function ($message) use ($email) {
        $message->to($email)->subject('重置密码');
    });
    return back()->with('status', '测试邮件已发送');
}

如果手动发送成功,说明问题出在Laravel默认重置流程的邮件通知构建环节,需要检查Illuminate\Auth\Notifications\ResetPassword类的实现,确认它能正确获取用户邮箱。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:21:12