
CodeIgniter 4 发送邮件时若 HTML 内容被当作纯文本显示(如直接输出 标签),通常是因为邮件内容类型未正确设置为 html;需在配置中显式指定 mailType = 'html'。
codeigniter 4 发送邮件时若 html 内容被当作纯文本显示(如直接输出 `
` 标签),通常是因为邮件内容类型未正确设置为 `html`;需在配置中显式指定 `mailType = 'html'`。
在 CodeIgniter 4 中,Email 类默认使用 text 类型发送邮件,即使你传入的是 HTML 字符串(如含 <p></p>、<br> 的模板),若未明确声明 mailType 为 'html',邮件客户端会将其解析为纯文本,导致源码直接可见。
✅ 推荐解决方案:全局配置(推荐)
打开 app/Config/Email.php,找到 $mailType 属性并设为 'html':
public $mailType = 'html';
该配置将影响所有后续 Email 实例,无需每次重复设置,适合项目统一使用 HTML 邮件的场景。
✅ 替代方案:运行时动态配置
若需按需切换(例如部分邮件发纯文本),可在发送前调用 initialize() 方法覆盖配置:
$email = \Config\Services::email();
$config = [
'mailType' => 'html',
// 其他可选配置,如 'charset' => 'UTF-8', 'newline' => "\r\n"
];
$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(建议包含...或至少语义清晰的标签),避免仅片段导致部分客户端渲染异常; - 若使用模板引擎(如 Views),请确认已正确渲染(如
view('emails/reset_password', $data, ['saveData' => true])); - 在共享主机上,还需检查是否启用
sendmail或 SMTP 配置是否生效($protocol、$SMTPHost等),但本问题核心在于mailType,非传输层故障; - 调试时可通过
$email->printDebugger(['headers'])查看实际发送的邮件头,验证Content-Type: text/html; charset=UTF-8是否存在。
通过正确设置 mailType,即可让收件方正常渲染 HTML 邮件,告别源码裸露问题。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











