【问题标题】:Exclamation Point in HTML EmailHTML 电子邮件中的感叹号
【发布时间】:2011-12-16 19:01:14
【问题描述】:

我很难在 HTML 电子邮件中格式化表格。似乎总是有一个单元格没有背景颜色或奇怪的空白。

这是代码(在 php 中) -

 $subject.="<br/><br/><table style=\"width:585px;\" ><tr><td style=\"padding:10px;background-color:#113797;color:white;\">New & Used Vehicles</td><td style=\"padding:10px;background-color:#113797;color:white;\">Term in Months</td><td style=\"padding:10px;background-color:#113797;color:white;\">APR* As Low As</td><td style=\"padding:10px;background-color:#113797;color:white;\">Monthly Payment Per $1000 Borrowed</td></tr>";       
    $result = mysql_query("SELECT * FROM rates WHERE ID>='32' AND ID <='39'");
        while($row = mysql_fetch_array($result))
    {
                  $subject.= "<tr><td BGCOLOR=\"#e5f1ff\" style=\"padding:10px;color:black;\">" . $row['name'] . "</td>";
                  $subject.= "<td BGCOLOR=\"#e5f1ff\" style=\"padding:10px;\">" . $row['term'] . "</td>";
                  $subject.= "<td BGCOLOR=\"#e5f1ff\" style=\"padding:10px;\">" . $row['apr'] . "</td>";
                  $subject.= "<td BGCOLOR=\"#e5f1ff\" style=\"padding:10px;\">" . $row['per_1000'] . "</td></tr>";
    }

 $subject.= "</table>";

所以我尝试了 css 背景和 html 并且都创建了一些看起来很糟糕的东西。我也尝试过 Doctypes。

这就是我的邮件代码的样子。

    mail( "XXXXXX@yahoo.com", "$title2", "$subject" , "Content-type: text/html;\r\nFrom: auto-alerts@streatoronized.org" );

这是它呈现出来的样子。看到流氓空间了吗?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>Check out the low rates.<table style="width:585px;" ><tr><td style="padding:10px;background-color:#113797;color:white;">New &amp; Used Vehicles</td><td style="padding:10px;background-color:#113797;color:white;">Term in Months</td><td style="padding:10px;background-color:#113797;color:white;">APR* As Low As</td><td style="padding:10px;background-color:#113797;color:white;">Monthly Payment Per $1000 Borrowed</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2008 and NEWER Vehicle Purchases</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">Up to 72 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">3.24%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$17.28</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2008 and NEWER Vehicle!
  Purchases</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">64 - 72 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">4.29%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$15.69</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2007 and OLDER Vehicle Purchases</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">Up to 72 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">5.49%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$18.20</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2007 and OLDER Vehicle Purchases</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">64 - 72 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">5.99%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$16.46</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2011 &amp; 2010 REFINANCES</td><td bgcolor=!
 "#e5f1ff" style="padding:10px;height:100%;">Up to 63 Months</t!
 d><td bg
color="#e5f1ff" style="padding:10px;height:100%;">4.99%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$18.08</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2011 &amp; 2010 REFINANCES</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">64 - 72 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">5.49%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$16.34</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2008 - 2009 REFINANCES</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">Up to 60 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">5.99%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$19.33</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2007 &amp; older Vehicle REFINANCE</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">Up to 60 Months</td><td bgcolor="#e5f1ff" style="padding:10px!
 ;height:100%;">6.99%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$19.80</td></tr></table></body></html>

【问题讨论】:

  • 您在哪个电子邮件客户端查看它?与浏览器不同,电子邮件客户端似乎没有定期更新渲染引擎,它们可能会抛出各种奇怪的怪癖——尽管你做的事情几乎是正确的,但我发现电子邮件中最可靠的 HTML 格式是HTML 4 没有或最多内联 CSS。
  • 我只是出于某种奇怪的原因注意到我的桌子上有一声巨响。想知道为什么会在那里。
  • 就像一个实验一样,尝试将 BGCOLOR 属性小写——&lt;br /&gt; 标签是封闭的这一事实暗示您正在使用 XHTML,如果是这样,它应该是 XML 格式的,并且因此属性应该是小写的。可能不会有任何区别,但电子邮件客户端很古怪:)
  • 你能从你的邮件程序中发布实际的 html 吗?
  • ... 并记住编码任何 &amp; 字符 - New &amp; Used Vehicles 中有一个明显的字符,但它们也来自数据库,因此您可能想在其中添加一些 htmlspecialchars()在那里。

标签: php html email html-email


【解决方案1】:

我不想回答自己的问题,但我确实找到了解决问题的方法,希望有人可以使用此解决方案来摆脱由此引起的头痛。

问题是由使用 mail() 函数引起的。当我尝试发送电子邮件时,我有一长串 html 代码。 事实上,太长了!当我超过 78 个字符时,会出现一个 BANG!,然后与我的 html 或 css 连接。 RFC 2822

解决方法是将其更改为 base-64 编码数据或在我的长行 html 代码中添加 \r\n。无论哪种方式都可以解决问题。

感谢大家的帮助!

【讨论】:

  • 我遇到了同样的问题,并且能够在长行的末尾使用 \n 来解决它。我在这里读到drupal.org/node/31524 电子邮件需要在 998 个字符后换行以避免该问题。感谢您回复您的答案!
  • @Andrew Threadgill - 我遇到了同样的问题,你是如何将 HTML 代码更改为 base-64 编码的?任何函数?
  • 如果你想使用\n,你不必这样做。
  • 你能粘贴一些示例代码吗?我无法理解在哪里添加\n。我的 $messages 太长了,我遇到了同样的问题。
  • 如果要进行 base-64 编码,请将“Content-Transfer-Encoding”设置为“base64”并对消息内容进行编码:chunk_split(base64_encode($message_content))
【解决方案2】:

似乎有问题的牢房没有返回 所以尝试向它们添加 height:100% 以使它们完全填充。 您可以通过调整此代码来解决此问题

<td style=\"padding:10px;background-color:#113797;color:white;\">

<td style=\"padding:10px;background-color:#113797;color:white;height:100%;\">

这应该可以解决您的问题。

【讨论】:

  • 表格单元格始终是所在行的全高,以及其父列的全宽。
【解决方案3】:

删除所有 CSS 样式,许多电子邮件渲染引擎都失败了。使用简单的旧桌子设计。

使用&lt;font color="black"&gt;blah&lt;/font&gt; 代替样式color,使用&lt;table cellpadding="10"&gt; 代替样式padding,使用bgcolor 代替样式background-color

将 bgcolor 设置为整个 TABLE,而不是 TD。

【讨论】:

  • 是的,这确实有效。我不知道在 HTML 电子邮件中使用 CSS 会这么麻烦。我提到的大多数地方都说内联通常没问题。
【解决方案4】:

以下是如何创建 Base64 编码电子邮件的示例:

    <?php 

$html = "<p>The <b>quick</b> <em>brown</em> <u>fox</u> jumped right over the lazy dog.</p><hr />";

$to   = "amit@labnol.org";
$cc   = "cc@labnol.org";
$bcc  = "bcc@labnol.org";
$from = "from@labnol.org";

$subject  = "This is a MIME encoded email";
$boundary = str_replace(" ", "", date('l jS \of F Y h i s A'));
$newline  = "\r\n";

$headers = "From: $from$newline".
           "Cc: $cc$newline".
           "Bcc: $bcc$newline".
           "MIME-Version: 1.0$newline".
           "Content-Type: multipart/alternative;".
           "boundary = \"$boundary\"$newline$newline".
           "--$boundary$newline".
           "Content-Type: text/html; charset=ISO-8859-1$newline".
           "Content-Transfer-Encoding: base64$newline$newline";

$headers .= rtrim(chunk_split(base64_encode($html)));

mail($to,$subject,"",$headers);

?>

我在以下网站找到了这段代码:

https://ctrlq.org/code/19840-base64-encoded-email

将您的电子邮件设置为基于 64 编码将删除随机的“!”正在添加到电子邮件中。

【讨论】:

  • 虽然链接我为这个问题提供了一个解决方案,但这不是一个写得很好的答案。您应该将链接中最相关的部分添加到您的答案中。
  • 太好了,如果您需要任何帮助,您可以阅读以下内容:How do I write a good answer?
  • 我做了一些改动
猜你喜欢
  • 1970-01-01
  • 2012-10-02
  • 2012-11-01
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多