Laravel 5.5 集成Mailgun无法发送邮件求助
看起来你已经完成了基础配置,但邮件没发送且Mailgun控制台无任何记录,大概率是配置细节或验证环节的疏漏导致的,我整理了几个关键排查方向:
清理Laravel配置缓存:Laravel会自动缓存配置文件,你修改
.env、mail.php或services.php后,一定要运行php artisan config:clear。我之前就踩过这个坑——明明改对了配置,结果应用一直调用旧缓存,导致邮件请求根本没走Mailgun通道。核对Mailgun服务配置细节:
检查config/services.php里的Mailgun配置,重点关注区域和密钥:'mailgun' => [ 'domain' => env('MAILGUN_DOMAIN'), 'secret' => env('MAILGUN_SECRET'), 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), // 若用欧盟区域需改为api.eu.mailgun.net ],同时确认
.env里的MAIL_MAILER是否设为mailgun,别误设成log或smtp这类其他驱动。用带异常捕获的脚本测试:
你说测试无报错,但可能没捕获到底层API异常。写个简单的路由测试:Route::get('/test-mail', function () { try { Mail::raw('Laravel Mailgun测试内容', function ($message) { $message->to('你的测试邮箱地址')->subject('Mailgun发送测试'); }); return '邮件请求已提交,请查收'; } catch (\Exception $e) { return '发送失败:' . $e->getMessage(); } });访问这个路由,就能看到真实的错误原因——比如API密钥无效、域名未验证等。
确认API密钥的正确性:
确保你用的是Mailgun控制台里的私钥(开头为key-),不是公钥或其他类型密钥。用错密钥会导致API请求静默失败,Mailgun控制台不会生成任何活动记录。再次验证域名状态:
去Mailgun控制台确认你的域名状态是否为Active。有时候DNS记录刚添加,还处于缓存生效期(几小时到24小时),表面显示已添加,但实际未完成验证,这时候邮件会被后台拦截。查看Laravel日志细节:
打开storage/logs/laravel.log,搜索mailgun或send相关日志。很多时候应用层面没抛出异常,但日志里会记录API返回的错误,比如“domain not verified”或“invalid API key”。检查沙箱模式限制:
如果用的是Mailgun免费沙箱域名(sandboxxxx.mailgun.org),只能发送到你在控制台添加的Authorized Recipients列表里的邮箱,否则邮件会被静默拦截,控制台也不会有记录。
内容的提问来源于stack exchange,提问作者Finchy70

