Laravel中使用MAIL_DRIVER=mail无法发送邮件问题排查
解决Laravel中MAIL_DRIVER=mail发送邮件突然失效的问题
Hey there! Sorry to hear your mail driver stopped working out of nowhere—let’s break this down step by step to get it back up and running.
先从配置和缓存入手
- 先仔细核对你的
.env配置文件:- 确认
MAIL_DRIVER=mail的设置没有被意外改动(有时候部署操作或误编辑会覆盖配置) - 检查
MAIL_HOST、MAIL_PORT、MAIL_USERNAME、MAIL_PASSWORD、MAIL_ENCRYPTION这些关联配置,哪怕是一个小拼写错误或多余空格都可能导致功能失效
- 确认
- 清除配置缓存,避免旧配置残留影响:
php artisan config:clear php artisan cache:clear
用最简代码测试邮件发送
先排除视图文件的干扰,在路由文件里加一个测试路由:
Route::get('/test-mail', function () { Mail::raw('这是Laravel发送的测试邮件内容', function ($message) { $message->to('你的测试邮箱@example.com') ->subject('紧急测试:邮件发送功能'); }); return '测试邮件已发起,请查收邮箱!'; });
访问这个路由,如果测试邮件能成功发送,那问题大概率出在你的Contact.blade.php视图里;如果还是失败,就可以把排查重点放在服务器或核心配置上。
排查Contact.blade.php视图问题
从你提供的代码片段来看,有几个需要注意的点:
- 你贴的Bootstrap CSS链接是不完整的(
https://maxcdn.bootstrapcdn.com/bootst...),要么补全完整URL,要么先临时移除它,测试是不是资源加载失败导致邮件渲染出错 - 确保视图里所有HTML标签都正确闭合,未闭合的标签会打断邮件生成流程
- 检查视图里有没有使用未定义的变量,比如如果你用了
{{ $contact->name }}但控制器没把$contact变量传过来,就会抛出错误中断邮件发送
检查服务器端邮件服务
因为MAIL_DRIVER=mail依赖服务器自带的sendmail/postfix服务:
- 直接在服务器上测试邮件命令:通过SSH执行
echo "测试邮件内容" | mail -s "测试主题" 你的邮箱@example.com,如果这个命令都失败,那问题出在服务器邮件服务,和Laravel无关 - 查看服务器邮件日志(通常在
/var/log/mail.log或/var/log/syslog),里面会有具体报错,比如中继限制、认证失败或IP被拉黑等信息 - 确认服务器防火墙/安全组没有拦截邮件端口(25、465、587这些常用端口)
查看Laravel日志定位问题
这一步千万别跳过!Laravel的日志文件storage/logs/laravel.log里会有邮件发送失败的详细错误信息——不管是配置问题、视图错误还是服务器异常,都能在这里找到线索,重点找带有Swift_TransportException标记的日志条目。
内容的提问来源于stack exchange,提问作者Niamh Flannery
相关产品推荐
相关产品推荐

