Laravel配置企业SMTP邮箱发送邮件认证失败该如何排查?
问题排查步骤
- 第一步:确认企业邮箱SMTP配置参数正确性
多数配置错误来源于参数不匹配,优先核对以下信息:- SMTP地址是否为企业邮箱官方提供的正确地址,部分企业邮箱使用
mail.jct.com等非默认前缀地址 - 端口及加密方式是否匹配:587端口对应tls加密,465端口对应ssl加密,部分服务商不支持587端口,可尝试切换为465端口+
MAIL_ENCRYPTION=ssl - 登录凭证是否正确:大部分企业邮箱要求使用专属授权码而非账号登录密码作为
MAIL_PASSWORD的值,需到邮箱后台生成授权码填写
- SMTP地址是否为企业邮箱官方提供的正确地址,部分企业邮箱使用
- 第二步:清理Laravel配置缓存
修改.env文件后如果未清理配置缓存,Laravel会继续使用旧的配置项生效,执行以下命令清理缓存:
如果使用队列发送邮件,需重启队列worker进程加载新配置:php artisan config:clearphp artisan queue:restart - 第三步:排查网络连通性问题
登录部署代码的服务器,执行命令测试SMTP端口连通性:
如果连接失败,检查两个方向的限制:telnet smtp.jct.com 587 # 或者使用nc命令 nc -zv smtp.jtc.com 587- 服务器出站防火墙是否放开了587/465端口的访问权限
- 企业邮箱是否开启了SMTP访问IP白名单限制,将服务器公网IP添加到白名单即可
- 第四步:调整SMTP认证配置
部分企业邮箱对SMTP认证参数有特殊要求,可在config/mail.php的smtp配置块中追加以下参数调整:// 显式指定认证模式,可选值login/plain/cram-md5,根据邮箱支持的模式填写 'auth_mode' => 'login', // 指定EHLO阶段使用的域名,部分服务商要求和发件人域名匹配 'local_domain' => '你的站点正式域名', - 第五步:排查SSL证书验证问题
如果企业邮箱使用自签名SSL证书,会被系统默认拦截导致连接中断,可先添加以下配置临时关闭证书验证测试是否正常:
注意:以上配置仅用于测试定位问题,生产环境请将企业邮箱的根证书导入服务器信任证书库,不要关闭证书校验避免安全风险'stream' => [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true, ], ],
内容的提问来源于stack exchange,提问作者deskeay
相关产品推荐
相关产品推荐

