Почему теги html отображаются в моей строке в PHP?

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

Вот мой код (СИНТАКСИС HEREDOC):

$body = <<<CTS
<h1><b>Order for $name on datevariable</b></h1><br /><br />

<b><u>Administrative Details</u></b><br />
<b>Employee ID:</b> $id<br />
<b>Cost Center:</b> $cost_center<br />
<b>Approved By:</b> $approved_by<br />
<b>Delivery Bldg:</b> $delivery_bldg<br />
<b>Delivery Contact Email:</b> $delivery_contact<br />
<b>Ext:</b> $del_contact_ext<br />
CTS;

По какой-то причине, когда я получаю электронное письмо, оно выглядит так:

<h1><b>Order for James Important on datevariable</b></h1><br /><br />
<b><u>Administrative Details</u></b><br />
<b>Employee ID:</b> 213123<br />
<b>Cost Center:</b> 132123<br />
<b>Approved By:</b> Chris Seckla<br />
<b>Delivery Bldg:</b> 6<br />
<b>Delivery Contact Email:</b> [email protected]<br />
<b>Ext:</b> 56<br />

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

Кроме того, он игнорирует теги разрыва и ставит разрывы только тогда, когда я оставляю строку пробела. Любые идеи по этому поводу?


person zeckdude    schedule 27.05.2009    source источник
comment
Спасибо за комментарии! Это сработало отлично! Имеет ли значение MIME и кодировка, потому что я заметил, что только Фобис упомянул об этом, а Марк решил не упоминать об этом, но это сработало независимо?   -  person zeckdude    schedule 27.05.2009
comment
MIME-версия обычно требуется, только если вы имеете дело с вложениями. Кодировка важна только в том случае, если у вас есть международные символы или какой-то другой странный набор символов, который почтовые клиенты большинства пользователей не будут обрабатывать по умолчанию. Это хорошая практика, чтобы включить их, но я решил не делать этого для краткости.   -  person Marc W    schedule 27.05.2009


Ответы (4)


Если это электронная почта, вы должны установить тип mime на text/html вместо text/plain. В противном случае программа чтения электронной почты будет интерпретировать сообщение как обычный текст и игнорировать все теги html.

Например, допустим, вы вызываете функцию mail следующим образом:

mail( $to, $subject, $message, $headers )

В $headers вам понадобится что-то вроде этого (конечно, с поправкой на ваш конкретный случай):

$headers = "From: [email protected]\r\n";
$headers .= "Reply-To: [email protected]\r\n";
$headers .= "Content-Type: text/html";

Если вы хотите отправить как обычный текст, так и электронное письмо в формате html (чтобы читатели, не использующие HTML, могли видеть чистую версию электронного письма без всех этих тегов), я бы посоветовал взглянуть на этот учебник для более подробного объяснения составных электронных писем.

person Marc W    schedule 27.05.2009

Вы должны установить дополнительный заголовок при отправке с php, чтобы электронное письмо отображалось в формате html:

Тип содержимого: текст/html; кодировка = что угодно

person MartinodF    schedule 27.05.2009

Убедитесь, что вы отправляете заголовок, в котором указано, что это HTML...

пример:

mail('[email protected]', 'Subject',
'<html><body><b>Hello</b></body></html>',
"To: The Receiver <[email protected]>\n" .
"From: The Sender <[email protected]>\n" .
"MIME-Version: 1.0\n" .
"Content-type: text/html; charset=iso-8859-1"); 
person Phobis    schedule 27.05.2009
comment
Всякий раз, когда я включаю эту строку: MIME-Version: 1.0\n, Apple Mail показывает теги HTML внутри тела, мне нужно удалить его, чтобы Mail отображал HTML, почему это кто-то? - person Anriëtte Myburgh; 03.12.2009
comment
Вам нужно добавить заголовок: Content-Type: text/html - person Phobis; 09.07.2016

Если вы хотите отправлять почту с помощью PHP, я бы порекомендовал вам пакет PEAR Mail_Mime вместо функции обычной почты.

person Pavels    schedule 27.05.2009