CodeIgniter3部署Heroku后Gmail SMTP密码认证失败如何解决
Gmail SMTP App Password 认证失败(Heroku + CodeIgniter 3 环境)修复方案
本地开发环境发信正常,部署到Heroku后提示密码认证失败,在已正确开启Gmail两步验证、生成有效App Password的前提下,按以下步骤排查修复:
- 排查配置文件生效问题
确认部署到Heroku的email.php配置文件没有被构建流程替换、没有被.gitignore规则拦截。如果是用Heroku Config Vars存储SMTP密码,注意16位App Password不要带入生成时显示的分组空格,Gmail实际校验的是连续16位无空格字符,多余空格、换行符都会直接导致认证失败。 - 修正CI3 Email类核心SMTP参数
Heroku默认拦截25端口出站流量,同时错误的加密参数配置是该场景下故障的最高发原因,替换为以下正确配置即可:
注意不要把$config['protocol'] = 'smtp'; $config['smtp_host'] = 'smtp.gmail.com'; $config['smtp_crypto'] = 'tls'; $config['smtp_port'] = 587; $config['smtp_user'] = '完整Gmail邮箱地址'; $config['smtp_pass'] = '16位无空格App Password'; $config['mailtype'] = 'html'; $config['charset'] = 'utf-8'; $config['newline'] = "\r\n"; $config['crlf'] = "\r\n";tls://前缀写在smtp_host里,必须单独通过smtp_crypto参数指定加密协议,newline和crlf参数缺失会导致SMTP握手阶段被Gmail直接断开连接。 - 验证Heroku到Gmail SMTP的网络连通性
本地执行heroku run bash进入线上dyno终端,运行telnet smtp.gmail.com 587,如果能返回包含220 smtp.gmail.com ESMTP的banner信息,说明网络连通性正常;如果连不通,检查dyno是否绑定了网络安全策略、是否在私有空间内配置了出站防火墙规则。 - 解除Gmail侧的登录拦截
首次通过Heroku的IP段发信时,Gmail会触发安全风控,登录对应Gmail邮箱,找到主题为“阻止了可疑登录尝试”的安全提醒邮件,确认操作属于本人即可解除临时拦截。注意生成App Password后不要关闭账号的两步验证,否则所有已生成的App Password会自动失效。
不要使用465端口+SSL模式连接Gmail SMTP,Heroku动态路由对该端口的SMTP over SSL兼容性极差,绝大多数无报错日志的认证失败都和端口选型错误有关。
内容的提问来源于stack exchange,提问作者Amben Uchiha
相关产品推荐
相关产品推荐

