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

Codeigniter 3 无法通过PHP SMTP发送邮件的问题咨询

CodeIgniter 3 SMTP 发送 Gmail 邮件报错排查方案

常见报错原因

  • Gmail 账号认证规则限制
    目前谷歌已禁止第三方应用使用账号普通密码直接登录SMTP服务,你需要先为谷歌账号开启两步验证,然后生成专属的应用密码替换配置里的smtp_pass值;另外注意smtp_user的邮箱地址必须和from()方法设置的发件人地址完全一致,你当前代码里两个地址不匹配,会被谷歌SMTP服务直接拒绝。
  • 配置项缺失/格式错误
    CI3 邮件类的SMTP配置默认缺少换行符设置,会导致SMTP握手失败,需要补充两个配置项:
    'newline' => "\r\n",
    'crlf' => "\r\n",
    
    另外你当前配置里smtp_port填写的是字符串格式,建议改为数字类型587;同时检查PHP是否已开启openssl扩展,这是TLS/SSL加密SMTP连接的必备依赖。
  • 端口/连接限制
    本地运营商、防火墙可能会封禁587端口,可尝试将端口改为465,加密方式改为SSL验证:
    'smtp_port' => 465,
    'smtp_crypto' => 'ssl',
    
    注意原生mail函数走的是系统sendmail配置的代理链路,和CI直接发起SMTP直连的链路完全不同,所以原生可用不代表SMTP直连端口无限制。
  • 加载顺序冲突
    你当前是先加载邮件类再初始化配置,可能存在默认配置覆盖自定义配置的问题,可改为加载类时直接传入配置参数,无需单独调用initialize方法:
    $this->load->library('email', $config);
    

修正后的参考代码

public function send_mail_verification(){
    $config = array(
        'protocol'  => 'smtp',
        'smtp_host' => 'smtp.gmail.com',
        'smtp_port' => 587,
        'smtp_crypto' => 'tls',
        'smtp_user' => 'myacc@gmail.com', // 确保和发件人地址一致
        'smtp_pass' => '你的谷歌应用密码', // 替换为生成的应用密码
        'charset'   => 'iso-8859-1',
        'newline'   => "\r\n",
        'crlf'      => "\r\n",
        'smtp_timeout' => 10
    );

    $this->load->library('email', $config);

    $this->email->from('myacc@gmail.com', 'Registration'); // 发件人和smtp_user一致
    $this->email->to('tosomeonemail@gmail.com');

    $this->email->subject('something');
    $this->email->message('Testing email.');

    if($this->email->send()){
        echo "success";
    }
    else{
        show_error($this->email->print_debugger());
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:45:07