codeigniter原生支持邮件发送,需正确配置smtp(如gmail用app密码+ssl://smtp.gmail.com+465端口),推荐将配置写入application/config/email.php实现全局复用,并通过$this->email->print_debugger()调试失败原因。

CodeIgniter 本身不内置消息推送(如 WebSocket、APNs、FCM),但邮件发送是它原生支持且最常用于通知服务的可靠方式。只要 SMTP 配置正确,就能稳定实现用户注册确认、密码重置、订单提醒等关键通知场景。
SMTP 配置要点(以主流邮箱为例)
不同服务商端口与加密方式差异大,填错会导致连接超时或认证失败:
-
Gmail:需开启「App 密码」(禁用两步验证下的应用专用密码),
smtp_host = ssl://smtp.gmail.com,smtp_port = 465,smtp_crypto = 'ssl' -
163 邮箱:启用 SMTP 服务后使用客户端授权码(非登录密码),
smtp_host = smtp.163.com,smtp_port = 465或25(若用 25,smtp_crypto应设为'tls') -
QQ 邮箱:同样需 App 密码,
smtp_host = ssl://smtp.qq.com,smtp_port = 465,smtp_crypto = 'ssl'
推荐配置方式:全局 email.php
避免在每个控制器里重复写配置,把参数统一写入 application/config/email.php:
$config['protocol'] = 'smtp'; $config['smtp_host'] = 'ssl://smtp.163.com'; $config['smtp_user'] = 'yourname@163.com'; $config['smtp_pass'] = 'your_app_password'; // 不是邮箱登录密码 $config['smtp_port'] = 465; $config['smtp_crypto'] = 'ssl'; $config['charset'] = 'utf-8'; $config['mailtype'] = 'html'; $config['wordwrap'] = TRUE;
之后只需 $this->load->library('email');,无需再调用 initialize() —— 框架会自动加载该配置。
发送逻辑与调试技巧
实际发送前建议做最小化测试,并保留调试入口:
- 设置发件人时务必用已验证邮箱,否则易被拒收:
$this->email->from('notify@yourdomain.com', 'Your App') - HTML 邮件需完整结构(含
...),并启用:$this->email->set_mailtype('html') - 调试失败时,在
$this->email->send()后加:echo $this->email->print_debugger(); exit;,直接看到错误原因(如「Failed to connect to server」或「Authentication failed」) - 批量发送建议启用 BCC 模式,避免暴露收件人列表;大数量任务应结合 CLI + Cron,避开 Web 超时限制
CLI 定时邮件任务(替代 curl 方案)
Web 请求不适合跑长时间任务。用系统 cron 直接调用 CLI 命令更安全可靠:
- 命令示例:
*/30 * * * * /usr/bin/php /var/www/yourapp/index.php cron send_daily_report - 对应控制器方法需兼容 CLI 环境:移除对
$_SERVER的依赖,显式加载必要库(如 email、db),并用log_message('error', $msg)记录异常 - 避免在 CLI 中依赖 session 或 cookie,所有数据通过模型或数据库获取











