Uncaught Swift_TransportException 报错无法解决,求排查修复方案
问题原因
你遇到的Swift_TransportException报错核心是Gmail的安全策略限制导致,次要原因包含配置错误、端口封禁等:
- 2022年5月30日起Google已全面禁止第三方应用直接使用Gmail账号密码登录SMTP服务,你直接填写账号密码的调用方式已经被官方拦截
- 你的代码存在发件人配置错误,触发Gmail的发件人伪造校验规则
- 极小概率为你的服务器封禁了Gmail SMTP对应的465/587端口
补充说明:AuthHandler.php第191行只是SwiftMailer统一抛出传输类异常的通用入口,本身没有问题,不需要修改该行代码。
修复步骤
- 第一步:替换Gmail登录凭证为应用专用密码
先为你的Gmail账号开启两步验证,之后在账号安全设置中生成一个16位的应用专用密码,将setPassword()参数替换为该16位密码即可,不要保留空格。 - 第二步:修正发件人配置错误
你现有代码的发件人设置为用户注册邮箱,会被Gmail判定为伪造发件人直接拦截,修改对应代码即可:
若你的服务器封禁了SSL的465端口,可尝试替换为TLS配置:// 错误写法 ->setFrom([$email => $firstname . ' ' . $lastname]) // 修正为和setUsername中一致的你的Gmail邮箱 ->setFrom(['你的Gmail邮箱' => '你的站点名称'])$transport = (new Swift_SmtpTransport('smtp.gmail.com', 587, 'tls')) - 第三步:排查服务器端口连通性
登录你的服务器执行命令测试端口连通性:telnet smtp.gmail.com 465
若连接超时,联系你的服务器服务商放开对应端口即可。 - 第四步:升级依赖版本(可选)
若你使用的是6.0版本以下的SwiftMailer,存在对新版Gmail SMTP协议的兼容问题,升级到最新稳定版即可解决。
内容的提问来源于stack exchange,提问作者Raza Nayaz
相关产品推荐
相关产品推荐

