Laravel配置正确但无法发送邮件,SMTP认证失败求助
解决Laravel SMTP邮件认证失败的问题
我来帮你一步步排查这个邮件发送的问题,从报错信息来看核心是SMTP登录凭据无效,再加上配置文件的一些不一致,咱们逐个解决:
1. 先确认最基础的登录凭据
首先别跳过这一步,直接登录你的邮件服务商的webmail后台,用info@vexpo.pk和你设置的密码登录,确保:
- 密码完全正确,没有大小写、特殊字符的输入错误
- 账号没有被服务商锁定(比如多次登录失败触发安全限制)
如果webmail都登不上,那问题肯定在凭据本身,先联系服务商解决账号问题。
2. 修复配置文件的不一致问题
你的.env和config/mail.php存在两处关键冲突:
(1)硬编码的凭据覆盖了.env配置
在mail.php里你直接写死了用户名和密码:
'username' => 'info@vexpo.pk', 'password' => '******',
这会导致.env里的配置被忽略,改成从环境变量读取:
'username' => env('MAIL_USERNAME', 'info@vexpo.pk'), 'password' => env('MAIL_PASSWORD', '******'),
(2)加密协议配置不匹配
.env里MAIL_ENCRYPTION=null,但端口587通常要求使用tls加密,而且mail.php里默认的加密是tls,这会导致连接时的加密协议混乱。修改.env:
MAIL_ENCRYPTION=tls
(3)必须清除配置缓存
修改完配置后,Laravel可能还在使用旧的缓存配置,执行以下命令清除:
php artisan config:clear php artisan cache:clear
3. 测试SMTP服务器的可达性
可以用telnet命令测试服务器是否能正常响应(本地终端执行):
telnet mail.vexpo.pk 587
如果连接成功,输入EHLO localhost,查看服务器返回的支持的认证方式,确认LOGIN、PLAIN是否在列表里。如果连接失败,说明:
- 服务器的SMTP端口587可能被防火墙拦截
- 你的主机服务商禁止外部IP访问SMTP(比如本地开发环境不在服务器IP白名单里)
4. 其他可能的排查方向
- 两步验证/应用专用密码:如果你的邮件账号开启了两步验证,必须使用服务商提供的「应用专用密码」代替原密码
- 端口切换:试试把端口改成465,加密改成
ssl,有些服务商更支持这个组合:MAIL_PORT=465 MAIL_ENCRYPTION=ssl - 本地网络限制:本地开发时,你的电脑防火墙或者路由器可能拦截了587端口,可以切换到手机热点测试,排除本地网络问题
- 代码逻辑验证:先把
MAIL_DRIVER改成log,运行邮件发送代码,查看storage/logs/laravel.log里是否生成了邮件日志,如果有,说明代码逻辑没问题,问题完全在SMTP配置
按照这个流程一步步排查,应该能解决问题。
内容的提问来源于stack exchange,提问作者Mohsin Abbas
相关产品推荐
相关产品推荐

