
CodeIgniter 4 发送邮件时若 HTML 内容被当作纯文本显示(如直接输出 标签),通常是因为邮件类型未正确设为 html,需在配置中显式指定 mailType = 'html'。
codeigniter 4 发送邮件时若 html 内容被当作纯文本显示(如直接输出 `
` 标签),通常是因为邮件类型未正确设为 `html`,需在配置中显式指定 `mailtype = 'html'`。
在 CodeIgniter 4 中,邮件类默认使用 text 类型发送,即使你传入的是 HTML 字符串(如 <p>Hello</p>),系统也不会自动识别或设置 MIME 类型为 text/html——这会导致收件客户端(如 Gmail、Outlook)将其渲染为源码而非格式化内容。
✅ 正确做法是确保 mailType 明确设为 'html'。推荐两种方式:
方式一:全局配置(推荐)
编辑 app/Config/Email.php,找到 $mailType 属性并修改为:
public $mailType = 'html';
该设置将影响所有后续邮件发送,无需每次重复配置,也更符合生产环境一致性原则。
方式二:运行时动态设置(适用于临时覆盖)
若需为某次发送单独指定类型,可在调用 send() 前使用 initialize():
$email = \Config\Services::email();
$config = ['mailType' => 'html']; // 注意:字符串值必须是 'html'(非 'HTML' 或 'Html')
$email->initialize($config);
$email->setFrom($settings->info->site_noreply_email, $settings->info->site_title)
->setTo($emailTo)
->setSubject($subject)
->setMessage($body); // $body 应为合法 HTML 字符串
if (!$email->send()) {
log_message('error', 'Email send failed: ' . $email->printDebugger(['headers']));
}⚠️ 注意事项:
立即学习“前端免费学习笔记(深入)”;
- 确保
$body变量确实包含 HTML 内容(如含<p></p>、<br>等标签),且无 PHP 输出错误或意外空白字符干扰; - 若使用视图生成邮件内容(如
view('emails/reset_password', $data, true)),请确认视图文件本身未被误加.php扩展名导致解析失败; - 共享主机环境下,部分 SMTP 服务(如 cPanel 的
sendmail)可能对Content-Type头处理不严谨,建议搭配调试器检查实际发出的邮件头:$email->printDebugger(['headers']); - 不要遗漏
Content-Type: text/html; charset=utf-8的声明——CodeIgniter 在mailType = 'html'时会自动添加,但若手动覆写 headers 则需自行保障。
通过以上任一方式启用 HTML 邮件模式后,你的密码重置邮件将正常渲染为带段落、换行与样式的可读内容,而非原始 HTML 源码。



















