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

PHP预婚礼问卷表单邮件无法渲染HTML代码求助

Hey DillonC, 我之前做摄影工作室网站的时候也碰到过完全一样的问题!你说测试HTML代码正常,但发送后只显示代码,这十有八九是邮件的Content-Type头没设置对,导致邮件客户端把HTML当成纯文本解析了。下面给你一步步排查和解决的方案:

1. 检查PHP mail()函数的Headers配置

如果你的代码用的是PHP原生的mail()函数,大概率是没添加Content-Type头,或者头信息格式不对。正确的头应该包含MIME版本和HTML类型,示例代码如下:

// 基础头信息
$headers = "From: Your Photography Studio <info@yourphotography.com>\r\n";
// 必须添加MIME版本声明
$headers .= "MIME-Version: 1.0\r\n";
// 设置邮件内容为HTML,指定字符集避免乱码
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

// 发送邮件
mail($to, $subject, $html_table_content, $headers);

⚠️ 注意:头信息之间必须用\r\n分隔,不能只用\n,否则部分邮件服务器会忽略你的头配置。

2. 确认HTML表格代码无语法错误

虽然你测试时HTML正常,但要确保最终拼接的HTML没有语法问题——比如未闭合的<td>/<tr>标签、遗漏的引号,这些都会导致邮件客户端无法正确解析HTML,转而显示源码。你可以手动把最终生成的HTML代码复制到浏览器里测试,或者用HTML校验工具检查格式是否规范。

3. 排查是否有转义字符干扰

如果你的代码里用了htmlspecialchars()、addslashes()这类转义函数处理HTML内容,会把<、>、&这些HTML关键字符转成实体(比如&lt;),导致邮件显示代码而非渲染表格。要确保最终传给mail()函数的$message变量是原始的HTML代码,没有被额外转义。

4. 改用PHPMailer(更稳妥的方案)

原生mail()函数经常会因为服务器配置、头信息解析问题出bug,我后来换成PHPMailer后就再也没碰到过这类问题。它默认支持HTML邮件,配置也很简单:

// 引入PHPMailer类(根据你的文件路径调整)
require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/SMTP.php';

$mail = new PHPMailer\PHPMailer\PHPMailer();

// 配置SMTP服务器(根据你的邮箱服务商设置)
$mail->isSMTP();
$mail->Host = 'smtp.yourphotography.com';
$mail->SMTPAuth = true;
$mail->Username = 'info@yourphotography.com';
$mail->Password = 'your_email_password';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;

// 设置发件人和收件人
$mail->setFrom('info@yourphotography.com', 'Your Photography Studio');
$mail->addAddress('client_email@example.com');

// 开启HTML模式
$mail->isHTML(true);
$mail->Subject = 'Your Pre-Wedding Questionnaire';
// 这里放你的HTML表格内容
$mail->Body = '<table style="border-collapse: collapse; width: 100%;">
    <tr>
        <td style="border: 1px solid #ddd; padding: 8px;">Client Name</td>
        <td style="border: 1px solid #ddd; padding: 8px;">'.$client_name.'</td>
    </tr>
    <!-- 其他问卷内容行 -->
</table>';
// 可选:添加纯文本版本,供不支持HTML的邮件客户端显示
$mail->AltBody = "Client Name: $client_name\n";

// 发送邮件并处理错误
if(!$mail->send()) {
    echo '邮件发送失败: ' . $mail->ErrorInfo;
} else {
    echo '邮件已成功发送';
}

5. 验证邮件头信息

如果上面的方法都试过还是不行,可以把邮件发送到自己的邮箱,然后查看邮件的原始源码(大部分邮箱客户端都有“查看原始邮件”的选项),确认Content-Type字段是不是text/html; charset=UTF-8。如果还是text/plain,那可能是你的服务器配置覆盖了头信息,这时候改用PHPMailer几乎是唯一的解决办法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:07:38