PHP HTML邮件,使用HTML模板

5

我正在尝试制作一个HTML邮件系统,我的HTML需要成为一个模板,并存储在一个单独的文件中,例如:

<div clas="headr"></div>
    <div class="content"></div>
<div class="footer"></div>

当我想发送邮件时,我希望我的邮件内容(来自输入表单)能够放在div.content中,并且发送整个HTML(模板+提交的文本)。最好的方法是什么?我考虑像这样做:
  1. 将模板导入到发送邮件的PHP中
  2. 查找具有“content”类的div,并将提交的文本添加到其中
  3. 发送邮件
但我不知道如何“查找”那个div并将提交的文本写入其中。
5个回答

18

正如Pekka所说,你可以简单地使用str_replace函数将数据插入到你的模板中。只需添加一个占位符:

<div clas="header"></div>
<div class="content">{{content}}</div>
<div class="footer"></div>

然后使用你的内容替换占位符:

$content = 'Whatever you want to insert...';
$tpl = file_get_contents('yourtemplate.html');
$tpl = str_replace('{{content}}', $content, $tpl);
mail($tpl, ...);

18
你可以在模板中嵌入PHP脚本,然后让PHP自己进行渲染,例如:
template.html:
<div clas="headr"></div>
    <div class="content"><?php echo $body; ?></div>
<div class="footer"></div>

然后,在您的 PHP 代码中加载它:

$body = "Put this into the content tag...";
ob_start();
include("template.html");
$email = ob_get_clean();

编辑: 在这种情况下,使用我的方法可能有些过度了,可以使用简单的替换。但是如果你想要一个更复杂的模板而不是替换整个电子邮件消息,那么我的方法会变得更加容易。例如:

<table>
 <tr>
  <td>Name:</td>
  <td><?php echo $name; ?></td>
 </tr>
 <tr>
  <td>Email:</td>
  <td><?php echo $email; ?></td>
 </tr>
</table>

它非常灵活,避免了需要太多变量进行替换的情况,更重要的是使html代码远离您的代码。


1
+1 PHP是一种模板语言,可以充分利用它。但你仍然需要使用htmlspecialchars - bobince

2

使用 str_replace() 函数将内容插入到模板中。

使用类似于 PHPMailer 的类来轻松地发送 HTML 电子邮件。


1

0
如果您想避免在模板中使用占位符或PHP代码,您可以查看phpQuery,它是jQuery的PHP端口。
在您的示例中,您可以类似于以下内容(请参阅docs):
<?php
$body = 'The body of your email message';

$template = file_get_contents('template.html');
$email = pq('div.content').html($body);
?>

可能看起来有点过头了,但如果你打算添加更多基于相同CSS选择器的功能,或者只是想让设计师们远离PHP,这可能是一个不错的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接