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

如何为ReusableForms配置HTML邮件模板实现邮件样式化?

解决HTML邮件模板不生效的问题

我帮你梳理下问题根源:你虽然在handler.php里调用了useMailTemplate指定了HTML模板,但FormHandler.php里的compose_mail方法根本没用到这个模板,还是在生成纯文本内容,而且也没告诉PHPMailer要发送HTML格式的邮件。下面是具体的修改步骤:


第一步:修改FormHandler.php的compose_mail方法

找到类里的private function compose_mail($post)方法,替换成下面的代码:

private function compose_mail($post) {
    // 检查指定的模板文件是否存在
    if(file_exists($this->mail_template)) {
        // 读取模板内容并使用Microtemplate渲染变量
        $template_content = file_get_contents($this->mail_template);
        $template = new Microtemplate();
        $html_body = $template->render($template_content, $post);
        
        // 开启PHPMailer的HTML邮件模式
        $this->mailer->isHTML(true);
        $this->mailer->Body = $html_body;
        
        // 可选:添加纯文本备用内容(兼容不支持HTML的邮件客户端)
        $plain_text = "Form submission: \n\n";
        foreach($post as $name=>$value) {
            $plain_text .= ucwords($name).":\n";
            $plain_text .= "$value\n\n";
        }
        $this->mailer->AltBody = $plain_text;
        
        // 可选:设置UTF-8编码,确保样式和特殊字符正常显示
        $this->mailer->CharSet = 'UTF-8';
    } else {
        // 如果模板不存在, fallback到原来的纯文本模式
        $content = "Form submission: \n\n";
        foreach($post as $name=>$value) {
            $content .= ucwords($name).":\n";
            $content .= "$value\n\n";
        }
        $this->mailer->isHTML(false);
        $this->mailer->Body = $content;
    }
}

第二步:确认handler.php的模板路径和模板内容

  1. 确保你指定的email.html文件确实存在于handler.php同级目录下
  2. 模板里的变量占位符要和表单字段名对应,比如表单里的Name、Email、Message,模板里要用{{Name}}、{{Email}}、{{Message}}这样的格式(这是Microtemplate类默认的变量语法)

给你一个简单的email.html模板示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>新的表单提交</title>
    <style>
        .email-box {
            max-width: 600px;
            margin: 20px auto;
            padding: 25px;
            border: 1px solid #eee;
            font-family: Arial, sans-serif;
        }
        .field-item {
            margin-bottom: 18px;
        }
        .field-label {
            font-weight: bold;
            color: #333;
            display: block;
            margin-bottom: 5px;
        }
        .field-value {
            color: #555;
            line-height: 1.5;
        }
    </style>
</head>
<body>
    <div class="email-box">
        <h2>您收到了一条新的表单提交</h2>
        <div class="field-item">
            <span class="field-label">姓名:</span>
            <span class="field-value">{{Name}}</span>
        </div>
        <div class="field-item">
            <span class="field-label">邮箱:</span>
            <span class="field-value">{{Email}}</span>
        </div>
        <div class="field-item">
            <span class="field-label">消息:</span>
            <div class="field-value">{{Message}}</div>
        </div>
    </div>
</body>
</html>

第三步:测试验证

修改完代码后,提交表单测试,应该就能收到带样式的HTML邮件了。如果还是有问题,可以检查:

  • 模板文件路径是否正确(可以用绝对路径试试)
  • PHPMailer是否有报错(你已经开启了错误提示,可以看服务器日志)
  • 邮件客户端是否禁用了HTML显示(换个邮箱客户端测试)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:19:45