Laravel 5.5重置密码邮件已发送但Gmail未收到问题排查
嘿,我来帮你排查下这个Laravel邮件发不出去的问题——我之前帮好几个开发者解决过类似的坑,大概率是下面几个原因之一:
可能的问题排查方向
1. 先确认SMTP配置的准确性
别小看基础配置,很多时候问题就出在这儿:
- 先核对
.env里的MAIL_HOST:mail.example.com是不是你邮件服务商提供的真实SMTP地址?比如阿里云邮箱是smtp.aliyun.com,腾讯企业邮是smtp.exmail.qq.com,别用通用占位符 - 如果你的邮箱开启了双因素认证(2FA),
MAIL_PASSWORD绝对不能填普通登录密码,得去邮箱后台生成一个应用专用密码填在这里(比如Gmail的应用密码需要在Google账号安全设置里生成) - 端口和加密方式要匹配:465配SSL是对的,但有些服务商要求用587配TLS,你可以试试切换成
MAIL_PORT=587+MAIL_ENCRYPTION=tls试试
另外,修改.env后一定要清配置缓存,不然Laravel会用旧配置:
php artisan config:clear php artisan config:cache
2. 查看Laravel的邮件发送日志
默认情况下Laravel不会记录邮件发送的详细错误,你得开启日志来抓问题:
- 在
.env里添加MAIL_LOG_CHANNEL=stack,或者修改config/mail.php把日志驱动打开 - 再触发一次密码重置,然后去
storage/logs/laravel.log里搜「mail」相关的日志,里面会有具体报错,比如SMTP认证失败、连接超时、被服务商拒绝之类的信息,这是最直接的排查线索
3. 检查服务器端口是否被封禁
生产服务器的465/587端口可能被防火墙或者服务商封禁了,你可以在服务器上用telnet测试连通性:
telnet mail.example.com 465
如果连接失败(提示无法打开连接),那就是端口的问题,得联系服务器提供商开放对应的端口,或者换服务商指定的其他端口
4. 域名的SPF/DKIM配置是否齐全
就算SMTP连接成功,Gmail也可能直接拦截你的邮件,因为你的发送域名没有配置邮件认证记录:
- SPF记录:需要在域名的DNS后台添加一条TXT记录,授权你的SMTP服务器可以代表这个域名发邮件,比如
v=spf1 include:mail.example.com ~all - DKIM记录:有些邮件服务商要求配置DKIM签名,用来证明邮件没有被篡改,你得去邮件服务商后台获取DKIM密钥,然后在DNS里添加对应的TXT记录
- 可以用邮件头分析工具(如果能收到测试邮件的话)或者在线工具检查你的域名SPF/DKIM是否配置正确
5. 邮件队列有没有在运行
如果你开启了队列(.env里QUEUE_CONNECTION不是sync),邮件不会立即发送,而是会进入队列等待处理。这时候你得确认队列worker是否在后台运行:
php artisan queue:work
如果队列没启动,邮件就一直堆在队列里,根本发不出去
6. 试试换个邮箱测试
Gmail对陌生域名发来的邮件拦截特别严,你可以先换个非Gmail邮箱(比如公司邮箱、QQ邮箱)测试,看看能不能收到。如果其他邮箱能收到,那就是Gmail的拦截规则问题,得优化邮件内容或者完善域名认证
内容的提问来源于stack exchange,提问作者sooon
相关产品推荐
相关产品推荐

