Восклицательный знак в HTML-письме

Мне трудно форматировать таблицу в электронном письме в формате 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( "[email protected]", "$title2", "$subject" , "Content-type: text/html;\r\nFrom: [email protected]" );

Вот как это выглядит. Видите жуткий космос?

Таблица в беспорядке!

<!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>

person Haru    schedule 27.10.2011    source источник
comment
В каком почтовом клиенте вы его просматриваете? В отличие от браузеров, почтовые клиенты, похоже, не обновляют механизмы рендеринга регулярно, и они могут выдавать всевозможные странные причуды — хотя вы делаете в значительной степени правильные вещи, но я обнаружил, что наиболее надежное форматирование HTML в электронных письмах — это HTML 4 либо без, либо со встроенным CSS.   -  person CD001    schedule 27.10.2011
comment
Я только что заметил, по какой-то странной причине, что в моем столе что-то щелкнуло. Интересно, на кой черт это там.   -  person Haru    schedule 27.10.2011
comment
Просто в качестве эксперимента попробуйте перевести атрибуты BGCOLOR в нижний регистр — тот факт, что теги <br /> являются закрытыми, намекает на то, что вы используете XHTML, и, если это так, он должен быть в формате XML, и поэтому атрибуты должны быть в нижнем регистре. Вероятно, это не будет иметь никакого значения, но почтовые клиенты причудливы :)   -  person CD001    schedule 27.10.2011
comment
Можете ли вы опубликовать фактический html из вашей почтовой программы?   -  person Sam    schedule 27.10.2011
comment
... и не забудьте закодировать любые символы & - один из них очевиден в New & Used Vehicles, но они также поступают из базы данных, поэтому вы можете добавить туда некоторые htmlspecialchars().   -  person CD001    schedule 27.10.2011
comment
Вы должны использовать HTML, а не XHTML в электронных письмах. Это может не решить вашу проблему, но предотвратит многие другие проблемы, с которыми вы можете столкнуться.   -  person hakre    schedule 27.10.2011
comment
Я просматриваю его в Outlook, а также в Yahoo... там те же проблемы. Я применил htmlspecialchars(), но, похоже, это не помогло. Где я могу объявить свой тип документа при отправке электронного письма?   -  person Haru    schedule 28.10.2011


Ответы (4)


Я ненавижу отвечать на свой собственный вопрос, но я нашел решение проблемы, и, надеюсь, кто-то сможет использовать это решение, чтобы избавиться от головных болей, которые это вызывает.

Проблема вызвана использованием функции mail(). Когда я пытаюсь отправить электронное письмо, у меня есть длинная строка html-кода. НА САМОМ ДЕЛЕ, СЛИШКОМ ДЛИННО! Когда я превышаю 78 символов, появляется БАХ!, а затем вставляется мой html или css. RFC 2822

Решение состоит в том, чтобы изменить его на base-64 для кодирования данных или добавить \r\n в мои длинные строки html-кода. В любом случае решает проблему.

Спасибо всем за помощь!

person Haru    schedule 27.10.2011
comment
У меня была такая же проблема, и я смог решить ее, просто нажав \n в конце длинных строк. Я прочитал здесь drupal.org/node/31524, что в электронных письмах после 998 символов требуется разрыв строки, чтобы избежать проблема. Спасибо за публикацию с вашим ответом! - person Dan; 26.01.2012
comment
@ Эндрю Тредгилл - столкнулся с той же проблемой, как вы изменили код HTML на кодировку base-64? Любую функцию? - person user2341103; 02.09.2013
comment
Вам не нужно, если вы хотите использовать \n. - person Haru; 05.09.2013
comment
Можете ли вы вставить пример кода. Я не могу понять, куда добавить \n. Мои сообщения $ слишком длинные, и я сталкиваюсь с той же проблемой. - person harishannam; 28.05.2014
comment
Внутри вашей переменной $messages везде есть 78 или более символов в одной строке. - person Haru; 29.05.2014
comment
Если вы хотите выполнить кодировку base-64, установите для параметра Content-Transfer-Encoding значение base64 и закодируйте содержимое сообщения: chunk_split(base64_encode($message_content)) - person Woody; 17.12.2014

Кажется, что нет возврата к оскорбительным ячейкам, поэтому попробуйте добавить к ним высоту: 100%, чтобы они были полностью заполнены. Вы можете исправить это, изменив этот код

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

To

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

Это должно решить вашу проблему.

person oOo--STAR--oOo    schedule 27.10.2011
comment
Ячейки таблицы всегда имеют полную высоту строки, в которой они находятся, и полную ширину своего родительского столбца. - person Marc B; 27.10.2011

Удалите все стили CSS, многие механизмы рендеринга электронной почты не работают с ним. Используйте простой старый дизайн таблицы.

Используйте <font color="black">blah</font> вместо стиля color, используйте <table cellpadding="10"> вместо стиля padding, используйте bgcolor вместо стиля background-color.

Установите bgcolor на всю TABLE, а не на TD.

person Petr    schedule 27.10.2011
comment
Да, это работает. Я не знал, что использование CSS в электронной почте в формате HTML — это такая проблема. В большинстве мест, на которые я ссылался, встроенный обычно подходит. - person Haru; 28.10.2011

Вот пример того, как создать электронное письмо с кодировкой Base64 в:

    <?php 

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

$to   = "[email protected]";
$cc   = "[email protected]";
$bcc  = "[email protected]";
$from = "[email protected]";

$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 удалит случайный '!' добавляются в электронные письма.

person colinam1992    schedule 14.01.2016
comment
Хотя по ссылке я предлагаю решение вопроса, это не очень хорошо написанный ответ. Вы должны добавить наиболее важную часть ссылки в свой ответ. - person Natalie Hedström; 14.01.2016
comment
Отлично, если вам нужна помощь, вы можете прочитать это: Как мне написать хороший ответ? - person Natalie Hedström; 14.01.2016
comment
я внес несколько изменений - person colinam1992; 15.01.2016