在 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;
我想在 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;