1

我需要一些帮助来构建我尝试使用 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>
";  

我不确定如何在这个现有$messsage变量中插入我的 PHP foreach 循环。我对何时关闭引号以及如何继续等感到困惑。这是我尝试插入的 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上面的变量中的正确方法是什么?

4

4 回答 4

2

这样做的一种方法是将模板消息拆分为两个字符串,例如 $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 文本。理想情况下,您希望尽可能地将这两者分开。

于 2013-01-05T22:25:24.130 回答
1

您可以使用发送给您的用户的 php 创建静态 HTML 消息,但是您不能在电子邮件中包含 php(如果您正在尝试这样做),以便电子邮件在显示时是动态的。因此,假设您正在做前者,那么 joe42s 答案中的代码就是正确的。他是为你写的!

如果您想要一个动态更新的电子邮件,当人们查看它时会发生变化(使用 php),您可以生成一个要在电子邮件中发送的链接,其中包含将显示为用户定制的网页的参数。

于 2013-01-05T22:22:08.233 回答
0
            <?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>
            ";  
            ?>
于 2013-01-05T22:21:05.003 回答
0

好吧,您的方式可能会以某种方式起作用,但我可能会建议以更合适的方式发送电子邮件,您可以将视图用作消息内容,例如:

$data=$foo;
$message = $this->load->view('some view',$data,true);

你可以像普通视图一样处理它

于 2013-01-06T02:09:16.137 回答