创建动态电子邮件模板

时间:2017-05-11 08:26:43

标签: php email templates cakephp

我正在寻找一种方法来创建一个好的系统来将数据推送到电子邮件模板。

我有一个包含数据的数组(数据的数量取决于电子邮件中的区域数量),以及一个简单的html邮件模板:

数据:

$mailDatas = array("mail title", "mail body", "mail footer");

一个模板应该看起来很简单的例子:

<div id="mail-container">
    <div id="mail-header">{data}</div>

    <img id="some design elements">


    <div id="mail-body">{data}</div>

    <div id="mail-footer">{data}</div>
</div>

我需要的是将第一个{data}(它是一个字符串)替换为我的数组$mailDatas[0]的第一个数据,将第二个{data}替换为$mailDatas[1] ,[...]

最好的方法是什么?我正在构建一个使用模板生成邮件正文的函数。

2 个答案:

答案 0 :(得分:1)

您可以使用CakePHP内置电子邮件库。您可以声明模板,声明视图并将变量传递给它。

例如,您可以将模板放在src / Template / Layout / Email / html / default.ctp中,您的视图放在src / Template / Email / html / welcome.ctp中,然后调用:

$email = new Email();
$email
    ->emailFormat('Html')
    ->template('welcome','default')
    ->to('johnny@example.com')
    ->viewVars($arrayOfVariables);
$email->send();

查看变量的工作原理与正常情况相同。视图,所以如果你声明你的数组:

$arrayOfVariables = ['varOne' => 'some text', 'varTwo' => 'other text'];

您可以在视图中使用它:

<span><?= $varOne ?></span>

有关详细信息,请阅读文档:https://book.cakephp.org/3.0/en/core-libraries/email.html

答案 1 :(得分:0)

你需要运行foreach和inside,你需要使用maildatas变量创建HTML

类似这样的事情

foreach ($maildatas as $maildata) { ?>
   <div id="mail-body"><?= $maildata; ?></div>
<?php } ?>