Laravel 5.6 报错:Unable to resolve NULL driver for [Illuminate\Mail\TransportManager]
解决Laravel 5.6中「Unable to resolve NULL driver for [Illuminate\Mail\TransportManager]」错误
你的问题核心是邮件配置存在多处格式和逻辑错误,导致Laravel无法正确初始化Mailgun驱动。我帮你梳理问题点并给出详细修复步骤:
一、问题根源分析
从你提供的配置和dd(Config::get("mail"))结果来看,几个关键错误直接导致了驱动解析失败:
.env文件配置挤在一行,且MAIL_DRIVER仍设为log(你需要切换到Mailgun驱动)config/mail.php中env()函数调用错误——把配置值当成了环境变量名config/services.php中Mailgun配置未正确关联.env变量- 邮件账号的
username和password读取失败,显示为null
二、分步修复方案
1. 修正.env文件
将邮件配置拆分为单独行,并补充Mailgun专属变量:
MAIL_DRIVER=mailgun MAIL_HOST=smtp.mailgun.org MAIL_PORT=587 MAIL_USERNAME=你的Mailgun SMTP用户名 MAIL_PASSWORD=你的Mailgun SMTP密码 MAIL_ENCRYPTION=tls # 可选但建议补充发件人信息 MAIL_FROM_ADDRESS=your-email@your-domain.com MAIL_FROM_NAME=你的网站名称 # Mailgun必填配置 MAILGUN_DOMAIN=你的Mailgun域名(如xxx.mailgun.org) MAILGUN_SECRET=你的Mailgun API密钥
2. 修正config/mail.php配置
修改host、port、username、password字段,确保正确读取环境变量:
// 替换原有的对应字段 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 'port' => env('MAIL_PORT', 587), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ],
注意:之前你写的
env('smtp.mailgun.org', 'smtp.mailgun.org')是错误写法,env()第一个参数必须是环境变量名,不是具体的配置值。
3. 修正config/services.php中的Mailgun配置
让它正确关联.env里的Mailgun域名和密钥:
'mailgun' => [ 'domain' => env('MAILGUN_DOMAIN'), 'secret' => env('MAILGUN_SECRET'), ],
4. 清除配置缓存
修改配置后,Laravel可能还在使用旧缓存,执行以下命令更新:
# 本地环境 php artisan config:clear # 线上环境(清除后可重新缓存提升性能) php artisan config:clear php artisan config:cache
5. 验证依赖(可选)
确保安装了Guzzle HTTP客户端(Laravel 5.6默认已安装,若缺失则执行):
composer require guzzlehttp/guzzle
三、测试邮件发送
完成修复后,你可以通过简单路由验证:
Route::get('/test-mail', function () { Mail::raw('Mailgun发送测试', function ($message) { $message->to('你的测试邮箱')->subject('Laravel Mailgun测试'); }); return '邮件请求已提交,请查收'; });
访问该路由,若没有报错则说明配置修复成功。
内容的提问来源于stack exchange,提问作者BrickZ28
相关产品推荐
相关产品推荐

