CodeIgniter 2.2.6发送邮件提示成功但未收到的问题求助
CodeIgniter 2.2.6 邮件发送返回成功但实际未收到的解决办法
核心问题分析
从你的调试输出能看到,实际使用的是mail协议,而非你配置的SMTP协议——这是代码配置里的错误导致的:
- 协议拼写错误:
'protocol' => 'smpt'里的smpt是拼写失误,正确应为smtp,错误导致框架自动 fallback 到默认的mail协议,根本没走你配置的Gmail SMTP服务。 - 语法错误:
'mailpath' => '/usr/sbin/sendmail,缺少闭合的单引号,属于语法错误,会干扰配置加载。 - 缺失SMTP加密配置:Gmail 587端口要求TLS加密,CodeIgniter 2需要显式配置
smtp_crypto参数才能正常连接。
修正后的代码配置
<?php class email_otp_demo extends CI_Controller { public function index() { $this->load->library('email'); $config = Array( 'protocol' => 'smtp', // 修正拼写错误 'smtp_host' => 'smtp.gmail.com', 'smtp_port' => 587, 'smtp_crypto' => 'tls', // 添加TLS加密配置 'smtp_user' => 'my.email@gmail.com', 'smtp_pass' => '你的应用密码', // 开启两步验证后生成的应用密码 'smtp_timeout' => 50, 'mailtype' => 'text', 'charset' => 'iso-8859-1', 'wordwrap' => TRUE, 'newline' => "\r\n" // 使用标准换行符,避免特殊字符问题 ); $this->email->initialize($config); $this->email->from('my.email@gmail.com', 'Social media website'); $this->email->to('sender@yahoo.com'); $this->email->subject('Email Test'); $this->email->message('Testing the email class.'); echo $this->email->send() ? '发送成功' : '发送失败'; echo "<hr>"; echo $this->email->print_debugger(); } } ?>
额外注意事项
- Gmail账号配置:必须开启两步验证,然后在Google账号设置中生成应用密码,用这个应用密码替换配置里的
smtp_pass——原密码已无法用于SMTP登录(Google已禁用该方式)。 - 垃圾邮件检查:即使发送成功,邮件也可能被收件方判定为垃圾邮件,先检查收件人的垃圾邮件文件夹。
- 调试输出验证:修正后调试输出里的协议应显示为
smtp,如果还是mail,说明配置未正确加载,需排查代码语法错误。
内容的提问来源于stack exchange,提问作者Social media
相关产品推荐
相关产品推荐

