codeigniter配置qq或163邮箱发信需用授权码、匹配端口与加密方式并开启smtp服务:qq用smtp.qq.com:465+ssl,163用smtp.163.com:465+ssl,均须在网页端开通服务并填入16位授权码而非登录密码。

QQ邮箱配置要点
必须使用授权码而非邮箱登录密码;SMTP 服务需在网页版邮箱中手动开启。
- smtp_host:smtp.qq.com
- smtp_port:465(SSL)或 587(TLS),推荐 465
- smtp_user:完整邮箱地址,如 yourname@qq.com
- smtp_pass:QQ邮箱设置里生成的16位授权码(不是QQ密码)
- smtp_crypto:'ssl'(对应端口 465)或 'tls'(对应 587)
- protocol:'smtp'
163邮箱配置要点
同样必须用授权码,且需在 163 网页邮箱「设置 → POP3/SMTP/IMAP」中开启 SMTP 服务。
- smtp_host:smtp.163.com
- smtp_port:465(SSL)或 994(部分旧文档误写为 25,实际不可用)
- smtp_user:完整邮箱地址,如 yourname@163.com
- smtp_pass:163 后台生成的授权码(非登录密码)
- smtp_crypto:'ssl'(端口 465 必须配 ssl)
- charset 和 mailtype 可设为 'utf-8' 和 'html' 提升兼容性
CodeIgniter 中的写法示例
建议把配置统一写进 application/config/email.php,避免每次重复写:
$config['protocol'] = 'smtp'; $config['smtp_host'] = 'smtp.qq.com'; // 或 smtp.163.com $config['smtp_port'] = 465; $config['smtp_user'] = 'xxx@qq.com'; $config['smtp_pass'] = 'your_app_password_here'; // 授权码 $config['smtp_crypto'] = 'ssl'; $config['charset'] = 'utf-8'; $config['mailtype'] = 'html'; $config['wordwrap'] = TRUE;
控制器中只需加载并发送:
$this->load->library('email');
$this->email->to('receiver@example.com');
$this->email->subject('测试邮件');
$this->email->message('<p>这是一封 HTML 邮件</p>');
$this->email->send();
常见失败原因排查
- 用邮箱密码代替授权码 → 登录网易/腾讯邮箱网页端,在「设置 → 账户」里找「POP3/SMTP服务」并生成授权码
- 端口与 crypto 不匹配 → 465 必须配 'ssl',587 必须配 'tls'
- 未调用 $this->email->initialize($config)(若没写 config 文件)或未加载 email 库
- 防火墙或服务器屏蔽了出站 465/587 端口 → 可临时用本地环境或云主机控制台检查网络连通性
- 收件方邮箱将邮件判为垃圾邮件 → 检查 From 地址是否和 smtp_user 一致,主题和正文避免敏感词











