2011-02-04 2 views
10

Код, указанный ниже, отправляет электронное письмо правильно, но для тела. Мне нужно показать html в теле сообщения, и я не могу это сделать. Примеры в сети не будет посылать электронную почту :(Php mail: как отправить html?

Как я могу исправить мой код для отправки сообщения электронной почты с HTML в теле?

Спасибо за тонну!

<?php 

$to = '[email protected]'; 

$subject = 'I need to show html'; 

$from ='[email protected]'; 

$body = '<p style=color:red;>This text should be red</p>'; 

ini_set("sendmail_from", $from); 

$headers = "From: " . $from . "\r\nReply-To: " . $from . ""; 
    $headers .= "Content-type: text/html\r\n"; 
if (mail($to, $subject, $body, $headers)) { 

    echo("<p>Sent</p>"); 
} else { 
    echo("<p>Error...</p>"); 
} 

?> 
+0

+1 к вопросу, который я имел Точно так же вопрос, но эта нить отвечает на него (из разных углов) – Sam

ответ

16

использовать этот заголовок для МСИ л:

$header = "MIME-Version: 1.0\r\n"; 
$header .= "Content-type: text/html; charset: utf8\r\n"; 

и для содержания/тела:

<html> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
... ... ... 

важно использовать команды встроенный CSS и Рекоммендуемый использовать таблицы для интерфейса.

...

В вашей почты-Body вы чем должны поставить HTML code with head and body

+0

Спасибо, hello, но ошибка в заголовках и без html в теле :( – lleoun

+0

измените вашу строку на это, а также закройте все теги, которые вы открыли, и используйте тег '' '$ headers. =" От: ". $ from." \ r \ nReply-To: ". $ from." ";' – helle

+0

Извините, я не получаю: $ headers = "MIME-Version: 1.0 \ r \ n"; $ headers . = "Content-type: text/html; charset: utf8 \ r \ n"; отправляет электронное письмо с текстом в чтении того, что отлично. Но в поле from показано www-data .. как я могу исправить это «После того, как это будет сделано, все будет кончено. Спасибо большое – lleoun

1

I нашел, что это работает хорошо!

Source

<?php 
//define the receiver of the email 
$to = '[email protected]'; 
//define the subject of the email 
$subject = 'Test HTML email'; 
//create a boundary string. It must be unique 
//so we use the MD5 algorithm to generate a random hash 
$random_hash = md5(date('r', time())); 
//define the headers we want passed. Note that they are separated with \r\n 
$headers = "From: [email protected]\r\nReply-To: [email protected]"; 
//add boundary string and mime type specification 
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\""; 
//define the body of the message. 
ob_start(); //Turn on output buffering 
?> 
--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

Hello World!!! 
This is simple text email message. 

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

<h2>Hello World!</h2> 
<p>This is something with <b>HTML</b> formatting.</p> 

--PHP-alt-<?php echo $random_hash; ?>-- 
<? 
//copy current buffer contents into $message variable and delete current output buffer 
$message = ob_get_clean(); 
//send the email 
$mail_sent = @mail($to, $subject, $message, $headers); 
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed"; 
?> 
+0

Найдено это тоже, но не посылает в моем случае, Зачем? – lleoun

+0

Правильно ли настроена почта? Вы на сервере IIS? – chrisjlee

+0

Это опиралось на почтовую команду. Эта команда присутствует в большинстве систем * NIX. –

-3

Простой ответ: Не делайте этого. HTML-письма являются злыми и раздражающими. По крайней мере, если нет открытой версии открытого кода PROPER. Правильная = такая же информация, как в HTML-версии, а не просто глупый комментарий о получении другого почтового клиента или ссылки на html-версию, если она доступна в Интернете.

Если вам действительно нужно: http://pear.php.net/package/Mail_Mime

+3

Они могут быть раздражающими, если их неправильно использовать. Хотя, если их использовать осторожно, они неплохие. На мой взгляд, наилучшей практикой является отправка как простых, так и текстовых и plain/html тел, поэтому пользователь может выбрать, какой из них он хочет видеть. – binaryLV

2

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

Я бы рекомендовал: PHPMailer

3

Вы смотрели на заголовки входящей почты? Это говорит

Reply-To: [email protected]: text/html

Просто добавьте еще один \r\n здесь:

Reply-To: " . $from . "\r\n"; 
Смежные вопросы