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

CodeIgniter发送邮件失败求助:SSL证书验证错误

解决CodeIgniter发送邮件时的SSL证书验证失败问题

嘿,别担心,这个问题在刚接触邮件发送的新手里特别常见,咱们一步步来搞定它~

1. 先修正代码里的SMTPOptions设置错误

你代码里的$mail->SMTPOptions写法不对哦!在CodeIgniter里,这个选项要么直接放进配置数组,要么得在加载email库之后再设置,不然框架根本识别不到这个配置。

写法一:把SMTPOptions直接加入配置数组

public function index(){
    $config = array(
        'protocol' => 'smtp',
        'smtp_host' => 'ssl://smtp.googlemail.com',
        'smtp_port' => 465,
        'smtp_user' => 'entertaxibvba@gmail.com',
        'smtp_pass' => 'mypass', // 后面会说这里可能要改
        'mailtype' => 'html',
        'charset' => 'utf-8',
        'wordwrap' => TRUE,
        // 把SMTPOptions放到配置数组里
        'SMTPOptions' => array(
            'ssl' => array(
                'verify_peer' => false,
                'verify_peer_name' => false,
                'allow_self_signed' => true
            )
        )
    );
    $this->load->library('email', $config);
    
    // 后续邮件内容设置保持不变
    $this->email->from('entertaxibvba@gmail.com', 'EnterTaxi');
    $this->email->to('entertaxibvba@gmail.com');
    $this->email->subject('Details nieuwe rit');
    $this->email->message('test test test');
    $this->email->set_newline("\r\n");
    
    // 改成判断发送状态,更直观
    if($this->email->send()){
        echo "邮件发送成功啦!";
    } else {
        show_error($this->email->print_debugger());
    }
}

写法二:加载库后再设置SMTPOptions

public function index(){
    $config = array(
        'protocol' => 'smtp',
        'smtp_host' => 'ssl://smtp.googlemail.com',
        'smtp_port' => 465,
        'smtp_user' => 'entertaxibvba@gmail.com',
        'smtp_pass' => 'mypass',
        'mailtype' => 'html',
        'charset' => 'utf-8',
        'wordwrap' => TRUE
    );
    $this->load->library('email', $config);
    
    // 加载库之后再设置这个选项
    $this->email->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );
    
    // 后续邮件内容设置和发送判断同上
    $this->email->from('entertaxibvba@gmail.com', 'EnterTaxi');
    $this->email->to('entertaxibvba@gmail.com');
    $this->email->subject('Details nieuwe rit');
    $this->email->message('test test test');
    $this->email->set_newline("\r\n");
    
    if($this->email->send()){
        echo "邮件发送成功啦!";
    } else {
        show_error($this->email->print_debugger());
    }
}

2. 重点检查谷歌邮箱的SMTP权限

谷歌现在已经不让用普通账号密码通过SMTP登录了,这是很多人踩坑的点:

  • 先确保你的谷歌账号开启了两步验证
  • 生成一个应用专用密码(App Password),把代码里的smtp_pass替换成这个密码,而不是你平时登录谷歌的普通密码

3. 确认php.ini的SSL配置真的生效了

你说改了php.ini,但可能没重启服务器(比如Apache/Nginx)导致配置没生效。另外要注意:

  • 先运行phpinfo();查看Loaded Configuration File项,确认你修改的是当前PHP环境对应的php.ini文件
  • 如果要配置CA证书,确保openssl.cafile指向了正确的cacert.pem文件路径(可以下载最新的CA证书文件放到服务器上,再填路径)

4. 试试换个SMTP端口

如果465端口还是有问题,可以换成587端口,对应的配置要改这两行:

'smtp_host' => 'tls://smtp.googlemail.com',
'smtp_port' => 587,

先从修正代码里的SMTPOptions开始试,再检查谷歌的应用密码,应该就能解决问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:45:38