我需要一些帮助来为我尝试使用 PHP 发送的 HTML 电子邮件构建正确的结构。 这是发送电子邮件的行:
$this->_send_user_email($recipient, $subject, $message);
我遇到麻烦的是构建
$message
。 我需要 $message
来包含一个具有动态行数的表。 这是 $message
变量的当前结构:
$message = "Hello, <br><br>
Please review details in the table below:
<br><br>
**** NEED TO INSERT DYNAMIC PHP TABLE HERE ****
<br><br>
If you have questions, please call 1-888-888-8888 and we will assist you.
<br><br>
Customer Support<br>
<br><br>
";
我不确定如何将 PHP foreach 循环插入到这个现有的
$messsage
变量中。 我对何时关闭引号以及如何继续等感到困惑。这是我尝试插入的 foreach 循环的代码:
<?php if (is_array($foo['bar'])): ?>
<table>
<tr>
<th >1</th>
<th >2</th>
<th >3</th>
</tr>
<?php $row = 01;
foreach ($foo['bar'] as $key => $value): ?>
<tr>
<td ><?php echo str_pad($row++, 2, '0', STR_PAD_LEFT); ?></td>
<td >AAA</td>
<td >BBB</td>
</tr>
<?php endforeach; ?>
</table>
<?php endif; ?>
所以我想我的问题是:将这个 PHP foreach 循环插入上面的
$message
变量的正确方法是什么?
执行此操作的一种方法是将模板消息拆分为两个字符串,例如 $message1 和 $message2,其中第一个字符串包含动态表之前的所有内容,而后者包含动态表之后开始的所有内容。然后,您使用字符串连接生成动态表,并将整个消息的三个部分连接起来。
$message1 = "Hello, <br><br>
Please review details in the table below:
<br><br>";
$message2 = "<br><br>
If you have questions, please call 1-888-888-8888 and we will assist you.
<br><br>
Customer Support<br>
<br><br>";
$row = "01";
$table = "";
if(is_array($foo['bar'])) {
$table .= "<table>
<tr>
<th >1</th>
<th >2</th>
<th >3</th>
</tr>";
foreach($foo['bar'] as $key => $value) {
$table .= "<tr>
<td >" . str_pad($row++, 2, '0', STR_PAD_LEFT) . "</td>
<td >AAA</td>
<td >BBB</td>
</tr>";
}
$table .= "</table>";
}
$message = $message1 . $table. $message2;
现在正如有人在评论中提到的,这段代码可以工作,但相当混乱,因为你大量混合了 php 逻辑和纯 html 文本。理想情况下,您希望尽可能地将这两者分开。
您可以使用 php 创建发送给您的用户的静态 HTML 消息,但是您不能在电子邮件中包含 php(如果您正在尝试这样做),以便电子邮件在显示时是动态的。 因此,假设您正在执行前者,那么 joe42s 答案中的代码是正确的。 他是为你而写的!
如果您想要动态更新的电子邮件,当人们查看它时(使用 php)会发生变化,您可以生成一个要在电子邮件中发送的链接,其中包含参数,该链接将显示为用户定制的网页。
<?php
$message = "Hello, <br><br>
Please review details in the table below:
<br><br>";
if (is_array($foo['bar'])) {
$message .= "<table>
<tr>
<th >1</th>
<th >2</th>
<th >3</th>
</tr>";
$row = 01;
foreach ($foo['bar'] as $key => $value) {
$message .= "<tr>
<td >".str_pad($row++, 2, '0', STR_PAD_LEFT)."</td>
<td >AAA</td>
<td >BBB</td>
</tr>";
}
$message .= "</table>";
}
$message .= "<br><br>
If you have any questions, please call 1-888-888-8888 and we will be happy to assist you.
<br><br>
Customer Support<br>
<br><br>
";
?>
嗯,你的方法可能会以某种方式起作用,但我可能会建议更合适的方式发送电子邮件 您可以使用视图作为消息内容,例如:
$data=$foo;
$message = $this->load->view('some view',$data,true);
你可以像普通视图一样处理它