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

Laravel 5.7配置AWS SES发送邮件报错求助

Laravel 5.7 配置AWS SES发送邮件出现503错误

环境与配置详情

  • Laravel版本:5.7(部署域名:admin.my-app.com)
  • 已安装依赖:aws/aws-sdk-php": "^3.86"
  • 验证情况:使用Mailtrap、cPanel SMTP可正常发送邮件;相同AWS SES配置在Laravel 10应用(api.myapp.com)中可正常工作

.env 配置

MAIL_MAILER=ses
SES_KEY=aws_key_here
SES_KEY_SECRET=aws_secret_key_here
SES_REGION=us-east-1
MAIL_FROM_ADDRESS=info@my-app.com
MAIL_FROM_NAME="${APP_NAME}"

config/mail.php 配置

<?php
return [
    'default' => env('MAIL_MAILER', 'smtp'),
    // 其他配置
];

config/services.php 配置

<?php
return [
    'ses' => [
        'key' => env('SES_KEY'),
        'secret' => env('SES_KEY_SECRET'),
        'region' => env('SES_REGION', 'us-east-1'),
    ],
    // 其他配置
];

邮件触发代码

public function approveKyc(Request $request, $userId)
{
    $model = User::on('mysql2')->find($userId);

    $this->actionKyc($userId, 'is_verified');

    $model->notify(new KycApproved());

    return response()->json([
        'name' => 'New KYC Docs',
        'status' => 'Approved'
    ]);
}

报错信息

exception: "Swift_TransportException"
file: "/var/www/my-app/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php"
line: 460
message: "Expected response code 354 but got code "503", with message "503 RCPT command expected\r\n"

问题排查与解决

1. 核心问题:Laravel版本配置变量差异

Laravel 5.7使用的邮件驱动配置变量是MAIL_DRIVER,而MAIL_MAILER是Laravel 7及以上版本才引入的变量名。你当前的.env和config/mail.php都误用了高版本的变量名,导致系统实际还是在使用默认的SMTP驱动,而非SES驱动,进而触发SMTP命令顺序错误。

修复步骤:

  • 修改.env文件,将MAIL_MAILER=ses替换为MAIL_DRIVER=ses
  • 同步修改config/mail.php中的配置读取键:
'default' => env('MAIL_DRIVER', 'smtp'),
  • 清除配置缓存:
php artisan config:clear

2. 辅助排查:确认通知类的收件人配置

503错误也可能是因为邮件未指定有效收件人导致SMTP命令流程异常。检查KycApproved通知类的toMail方法,确保已正确设置收件邮箱:

public function toMail($notifiable)
{
    return (new MailMessage)
        ->to($notifiable->email) // 确保此处获取到有效的用户邮箱
        ->subject('KYC审核通过通知')
        ->line('您的KYC申请已成功通过审核');
}

3. 额外验证

执行测试命令确认SES驱动是否生效:

php artisan tinker

在tinker中执行:

Mail::raw('测试邮件内容', function($message) {
    $message->to('your-test-email@example.com')->subject('SES测试');
});

如果仍报错,检查AWS SES密钥权限、发件邮箱是否已在SES中验证(沙盒模式下需验证所有收件邮箱)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:58:13