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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:21:28