You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP HTML邮件无法渲染为HTML格式,仅显示变量标识求助

问题分析与解决方案

看起来你碰到了两个关键问题:HTML邮件没法正常渲染,而且数据库里的内容没有被正确替换到邮件里,反而直接显示了$message这个标识。我帮你拆解下问题,再给出修正后的代码:

问题1:变量未被PHP正确解析

你用单引号定义了$htmlContent,而且里面的"$message"还套了一层双引号——PHP在单引号字符串里是不会解析变量的,所以它会直接把"$message"当成纯文本输出,根本不会替换成你从数据库拿到的内容。

问题2:缺少HTML邮件的头部声明

你的$headers里没加Content-Type: text/html; charset=UTF-8,这会让邮件客户端把内容当成纯文本处理,自然不会渲染HTML标签。


修正后的完整代码

<?php
// 假设$email、$subject、$message已经从数据库正确获取
$to = $email;
$subject = $subject;
$message = $message;

// 用双引号定义HTML内容,让PHP自动解析变量
$htmlContent = "<html>
<body>
$message<br /><br />
Regards<br />
<b>TM</b>
</body>
</html>";

$headers = 'From: myemail@gmail.com' . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
// 必须添加这个头部,告诉邮件客户端这是HTML格式的邮件
$headers .= 'Content-Type: text/html; charset=UTF-8' . "\r\n";

// 执行发送
mail($to, $subject, $htmlContent, $headers);
?>

额外注意事项

  • 如果从数据库取出的$message本身包含HTML标签(比如富文本内容),要确保这些标签是合法的,邮件客户端才能正常渲染。
  • 要是担心$message里的特殊字符破坏HTML结构,可以用htmlspecialchars()转义一下,避免语法错误或XSS风险:
    $safeMessage = htmlspecialchars($message, ENT_QUOTES, 'UTF-8');
    $htmlContent = "<html>
    <body>
    $safeMessage<br /><br />
    Regards<br />
    <b>TM</b>
    </body>
    </html>";
    

内容的提问来源于stack exchange,提问作者Sid Menon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:28:18