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
相关产品推荐
相关产品推荐

