Laravel 8.54 集成Mailgun API发信无报错静默失败排查求助
1 核心配置错误修复
你当前的MAILGUN_DOMAIN配置格式错误,Laravel的Mailgun驱动会自动拼接API前缀,不需要填写完整接口地址:
错误写法:
MAILGUN_DOMAIN=https://api.mailgun.net/v3/....mailgun.org
正确写法(仅保留沙箱域名本身即可):
MAILGUN_DOMAIN=xxx.mailgun.org
2 静默失败原因排查
2.1 队列执行问题
你的ExampleMail引入了Queueable trait,发信逻辑默认进入异步队列执行:
- 首先确认是否启动了队列消费进程:执行
php artisan queue:work,如果未启动,发信任务只会存储在队列中不会实际执行,自然看不到报错也收不到邮件 - 队列执行的报错不会直接显示在页面响应中,全部记录在
storage/logs/laravel.log文件中,优先查询该文件的报错信息
2.2 配置缓存问题
修改.env文件后必须清空配置缓存才会生效:
执行命令php artisan config:clear,否则你注释配置、修改配置都不会生效,自然不会抛出缺失配置的错误
3 沙箱域名专属检查项
- 免费沙箱域名仅允许发送给在Mailgun后台提前添加到白名单的收件邮箱,你代码里硬编码的收件邮箱必须先去Mailgun控制台完成验证
- 发信地址
no-reply@example.com必须替换为Mailgun沙箱域名绑定的允许发件地址,默认可使用no-reply@xxx.mailgun.org(xxx替换为你的沙箱域名前缀)
4 补充配置检查
检查config/mail.php里的mailers数组是否存在完整的mailgun配置,缺失的话补上:
'mailgun' => [ 'transport' => 'mailgun', ],
如果需要临时验证发信逻辑是否正常,可以先注释掉ExampleMail里的Queueable trait,同步发信的报错会直接抛出,方便快速排查。
内容的提问来源于stack exchange,提问作者Michael Cook
相关产品推荐
相关产品推荐

