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
相关产品推荐
相关产品推荐

