在 PHP 中以电子邮件形式发送数组

SENDING ARRAY as Email in PHP

我想在 table 中发送一个数组作为电子邮件正文。 这是我的代码

        $mail->Subject = 'ORDER NOTICE';
        $mail->Body = '<p>
        Dear ' .$dn.',<br>
        An Order has been made on '. $date .'to be delivered to this address; '.$da.'<br>
        Please expect your order within 2 days.
        Please note that this order is Pay on delivery.<br>
        These are the Items to be delivered '.implode("<br>", $_SESSION["cart"]); 
        </p>';

邮件已发送,但存储在 $_SESSION["cart"] 中的数组未显示

在我看来,您真正想要的可能涉及解析变量的内容,而不仅仅是盲目地转储其内容,所以我会回答这两个问题。

显示电子邮件中的数组

电子邮件的正文是html,所以这与在浏览器中显示数组没有什么不同。你不能简单地回显它的内容(比如 implode)。您必须将其编码为文本,以免破坏整个 document/email;如果该数组中的某个字符串包含字符串 'but Baseball < Football !' 会怎样? < 将被视为 HTML 元素的开始,并破坏一切。

幸运的是 PHP 有一个内置函数,var_export;我们可以将它与 nl2br 函数一起使用,该函数在换行符上添加 <br>s。

因此您可以将 implode("<br>", $_SESSION["cart"]) 替换为 nl2br(var_export($_SESSION["cart"], true))

更清洁的方法

不过,您更可能应该做的是将 html 电子邮件视为另一个文档(就像您的网站可能具有的 view my cart 页面一样)。

$html  = '';
$html .= sprintf('<p>Dear <em>%s</em>,',
                 htmlentities($dn)    );
$html .= sprintf('An Order has been made on <strong>%s</strong>',
                 htmlentities($date)  );
$html .= sprintf('<p>to be delivered to this address:</p>');
$html .= sprintf('<pre>%s</pre><br>',
                 htmlentities($da)    );
$html .= sprintf('<p>Please expect your order within <strong>%s</strong></p>',
                 '2 days'             );
$html .= sprintf('<p>Please note that this order is Pay on delivery.</p>');
$html .= sprintf('<p>These are the Items to be delivered:</p>');
$html .= sprintf('<ul>');
foreach ($_SESSION["cart"] as $line) {
    // Do something with each entry here (i dont know whats in there)
    $html .= sprintf('<li>%s x  %s</li>',  // maybe something like this:
                     '5x',                 // - amount
                     'Blue T-shirt'    );  // - description
}
$html .= sprintf('</ul>');
$html .= sprintf('<p>See you soon !</p>');

$mail->Subject = 'ORDER NOTICE';
$mail->Body    = $html;