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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:54:20