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

CodeIgniter配置Gmail SMTP发邮件失败 报错无法连接localhost25端口

问题根因

你看到的报错本质是CodeIgniter邮件类没有正确加载你写的Gmail SMTP配置,最终回退走了PHP原生mail()发送逻辑——这个原生函数默认会读取php.ini里的本地25端口配置,自然会报无法连接localhost邮件服务器的错误。

现有代码的具体问题

  • 配置数组重复写了两次protocol字段,PHP数组后出现的同名键会覆盖前面的值,容易导致CI邮件类初始化时配置匹配异常,直接切回默认的mail发送协议。
  • 认证配置键写错了:你写的_smtp_auth带下划线前缀,不是CI邮件类的合法配置项,正确键名是不带下划线的smtp_auth,配置失效后会导致SMTP流程识别异常。
  • 没有显式触发邮件类配置初始化,如果邮件类之前有过调用残留状态,很容易出现配置不生效的问题。
  • 缺少发送前的调试输出,出问题时看不到真实的配置加载状态,无法快速定位错误。

修正后的可运行代码

// 整理去重、修正键名的合法配置
$config = array(
    'protocol'    => 'smtp',
    'smtp_host'    => 'smtp.gmail.com',
    'smtp_port'    => 587,
    'smtp_user'   => '你的Gmail完整邮箱账号',
    'smtp_pass'   => 'Gmail应用专用密码(非账号日常登录密码)',
    'smtp_auth'    => TRUE, // 修正之前错误的_smtp_auth键名
    'smtp_crypto'  => 'tls',
    'mailtype'     => 'html', 
    'charset'      => 'utf-8', // 原配置的iso-8859-1对中文支持差,建议替换
    'wordwrap'     => TRUE,
    'newline'      => "\r\n" // 直接在配置内声明换行规范
);

// 先独立加载邮件类,再显式注入配置避免初始化异常
$this->load->library('email');
$this->email->initialize($config);

$this->email->from('你的Gmail完整邮箱账号', '自定义发件人名称');
$this->email->to($this->input->post('user_email'));
$this->email->subject($subject);
$this->email->message($message);

// 发送失败直接输出调试信息,定位具体错误
if (!$this->email->send()) {
    echo $this->email->print_debugger();
    exit;
}

补充说明

  • 你php.ini里写的SMTP=localhost、smtp_port=25配置,完全不会影响CI邮件类的SMTP发送流程——只有当CI的SMTP流程识别失败、回退到原生mail()模式时,才会读取这个php.ini配置项,不用特意修改php.ini的这段参数。
  • Gmail从2022年起已经停止支持用账号本身的登录密码做第三方SMTP认证,必须给对应Gmail账号开启两步验证后生成独立的应用专用密码,填到smtp_pass字段才能正常通过认证。
  • 如果587端口被网络拦截无法通信,可以换用465端口,同时把smtp_crypto的配置值改成ssl即可。

内容的提问来源于stack exchange,提问作者Shawn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 11:45:03