HTML邮件中的感叹号

19
我很难在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两种方法,但都无法达到理想效果。我也尝试了文档类型。

这是我的邮件代码:

    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>

1
你正在使用哪个电子邮件客户端查看它?与浏览器不同,电子邮件客户端似乎没有定期更新渲染引擎,它们可能会出现各种奇怪的问题 - 你做得几乎正确,但我发现在电子邮件中最可靠的HTML格式是HTML 4,要么没有CSS,要么最多只有内联CSS。 - CD001
只是作为一个实验,试着将 BGCOLOR 属性转换为小写 - <br /> 标签被关闭的事实暗示你正在使用 XHTML,如果是这种情况,它应该是 XML 格式化的,因此属性应该是小写的。可能不会有什么影响,但电子邮件客户端确实有些古怪 :) - CD001
你能否发布你的邮件程序中实际的HTML代码? - Sam
1
...并记得对任何 & 字符进行编码 - 在 New & Used Vehicles 中有一个明显的,但它们也可能来自数据库,因此您可能想要在那里添加一些 htmlspecialchars() - CD001
我在Outlook和Yahoo上查看它...同样的问题。我应用了htmlspecialchars(),但似乎没有解决它。当我发送电子邮件时,我应该在哪里声明我的doctype? - Haru
显示剩余2条评论
4个回答

30

非常不愿意回答自己的问题,但我找到了解决办法,希望有人可以使用这个方法来解决这个问题造成的困扰。

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

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

感谢大家的帮助!


1
我曾经遇到过同样的问题,并且通过在长行末尾添加\n来解决了它。我在这里读到http://drupal.org/node/31524,说电子邮件需要在998个字符后加上换行符以避免出现问题。感谢您回复答案! - Dan
@Andrew Threadgill - 我也遇到了同样的问题,你是如何改变 HTML 代码为 base-64 编码的?用了什么函数吗? - user2341103
如果你想使用 \n,那么你不必这样做。 - Haru
你可以粘贴一些示例代码吗?我不知道在哪里添加 \n。我的 $messages 太长了,我遇到了相同的问题。 - harishannam
在您的$messages变量中,任何单行中有78个或更多字符的地方。 - Haru
3
如果您想进行base-64编码,请将 "Content-Transfer-Encoding" 设置为 "base64",并对消息内容进行编码:chunk_split(base64_encode($message_content)) - Woody

3

似乎没有对冒犯的单元格进行返回,因此尝试将height:100%添加到它们中,使它们完全填充。您可以通过调整以下代码来修复此问题。

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

To

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

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

1
表格单元格始终是所在行的全高,并且是其父列的全宽。 - Marc B

2
以下是如何创建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

将您的电子邮件设置为Base64编码将消除电子邮件中添加随机“!”的问题。

虽然链接可能提供了问题的解决方案,但这并不是一个写得很好的答案。你应该将链接中最相关的部分添加到你的答案中。 - Natalie Hedström
如果想要帮助,你可以阅读这个:如何写出好的回答? - Natalie Hedström
1
我做了一些更改。 - colinam1992

2

移除所有的CSS样式,因为很多电子邮件渲染引擎无法处理它们。使用传统的表格设计。

使用<font color="black">blah</font>代替样式color,使用<table cellpadding="10">代替样式padding,使用bgcolor代替样式background-color

将bgcolor设置为整个表格,而不是TDs。


是的,这确实可行。我不知道在HTML电子邮件中使用CSS会带来这么多麻烦。大多数参考资料都说内联通常没问题。 - Haru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接