You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:25:49