【发布时间】:2015-03-04 15:00:20
【问题描述】:
我正在使用 PHPMailer,并在 for 循环中包含这行代码,以将 HTML 表的行添加到电子邮件的正文中。 (完整的 php pastebin 在这里:http://pastebin.com/iujp27hU)
$body .= "<tr><td style='". $rush_part_style . "'>" . $row[0]
. "</td> <td align='center' style='" . $rush_part_style . "'>" . $quantity_to_order
. "</td> <td>" . $row[2] . "</td></tr>";
电子邮件通常可以正常发送,但每隔一段时间,td 标记的尖括号之一就会被编码为其 HTML 实体。
当我在 Outlook 中查看源代码时,它是这样的:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">h3, p, table td {font-family:arial;}</style>
<table><tr><td><u>SD Part Number</u></td><td><u>Quantity</u></td><td><u>UOM</u>/td></tr>
- - some rows removed for brevity - -
<tr><td style="">P1400642-00048-C</td><td align="center" style="">26</td><td>EA</td></tr>
<tr><td style="">P1400642-00046-C</td>< td align='center' style=''>20</td> <td>EA</td></tr>
<tr><td style="">P1400642-00106-C</td><td align="center" style="">25</td><td>EA</td></tr>
<tr><td style="">P1400642-00036-C</td><td align="center" style="">67</td><td>EA</td></tr>
...
我不明白为什么它会将其中一个 < > 随机编码为它们的字符实体。
这个问题以前发生过,但我可以发送 100 多封电子邮件而不会发生。零件编号与是否出现无关。
我该如何解决这个问题?
--附加信息编辑--
测试一个非常大的 202 行订单会在发送时产生这些格式错误。
这根本没有属性,只是纯 HTML。 PHPMailer 在Send() 上破坏它。
【问题讨论】:
-
如果您在另一个电子邮件客户端打开电子邮件,那里也会发生这种情况吗?
-
@Dagon OP 已经观察到这一点,并在问题标题和代码 sn-p 下方说了这么多。
-
您是否 100% 确定此 html 是由您发布的同一 php 代码行创建的?您是否有可能生成有条件的 html,因此这一行表来自另一个 if {} else {} 分支?
-
关于故障排除/调试的主题。如果您遇到可能的 PHP 问题。首先确保它是PHP。尝试先回显纯 html,然后添加变量。看看它什么时候坏了,什么时候坏了。还要始终打开
error_reporting()以查看警告等。 -
@sjagr 它在 GMail 网络邮件中显示类似,并且在我的 Galaxy S4 内置电子邮件客户端上也很混乱。在电话上,有问题的 td 标签显示在消息上方。