Laravel 5.5无法发送邮件问题求助
Hey there! 这种明明配置看起来没问题、脚本也跑通但就是收不到邮件的情况确实挺挠头的,我帮你梳理几个常见的排查方向,你可以逐一核对下:
先检查邮件驱动与.env配置细节
- 首先确认
.env里的邮件驱动设置,比如用SMTP的话,MAIL_MAILER=smtp。不同邮箱的SMTP参数差异不小,举几个常见的:- QQ邮箱:
MAIL_PORT=465,加密方式MAIL_ENCRYPTION=ssl,还要记得去QQ邮箱开启SMTP服务并获取授权码(不是登录密码) - 163邮箱:
MAIL_PORT=465或994,同样用ssl加密,也要开启SMTP服务 - Gmail的话,需要开启两步验证并生成应用专用密码,普通登录密码没用
- QQ邮箱:
- 检查
.env里的MAIL_FROM_ADDRESS是否和你登录的邮箱完全一致,很多邮箱不允许用非注册地址发件 - 别忘了执行
php artisan config:cache刷新配置缓存!有时候修改.env后缓存没更新,代码还是在调用旧配置,这坑我踩过好多次
查看Laravel日志与邮件调试模式
- 虽然你说没返回错误,但可以去
storage/logs/laravel.log里翻一翻,说不定藏着没抛出来的警告,比如SMTP连接超时、权限不足之类的 - 开启邮件调试模式:在
.env里设置MAIL_DEBUG=true,或者在config/mail.php里把debug设为true,这样能看到更详细的发送过程日志,比如连接SMTP服务器的每一步 - 可以临时把
MAIL_MAILER改成log,这样邮件不会真的发送,而是会写入storage/logs/laravel.log,你可以看看邮件内容、收件人地址是不是都正确,先排除发送逻辑的问题
检查RegisterController与VerifyMail类的逻辑
- 确认在
RegisterController里正确触发了邮件发送,比如:protected function create(array $data) { $user = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); // 如果用Laravel自带的验证逻辑 $user->sendEmailVerificationNotification(); // 如果是自定义的VerifyMail类,确认实例化和发送没问题 Mail::to($user->email)->send(new VerifyMail($user)); return $user; } - 检查
VerifyMail类的build方法,确保模板路径正确:
要是模板路径错了,邮件可能发送失败但不会报错(或者日志里有提示)public function build() { return $this->view('emails.verifyUser') // 对应resources/views/emails/verifyUser.blade.php ->subject('请验证你的邮箱账号'); }
邮箱服务商的拦截问题
- 先去收件箱的垃圾箱、广告文件夹里找找,很多免费邮箱会把未认证的邮件直接扔进去
- 部分服务商(比如企业邮箱)需要设置发件域名的SPF记录,确保你的服务器IP在允许的发件列表里,不然邮件会被当成垃圾邮件拦截
- 如果是本地开发环境,可能因为没有公网IP或反向解析,邮件被服务商拒收。可以试试用本地测试邮件工具先模拟发送,确认代码逻辑没问题,再去排查线上环境的问题
内容的提问来源于stack exchange,提问作者major697
相关产品推荐
相关产品推荐

