2013-03-21 1 views
1

Я использую очень простую PHP-функцию для создания электронных писем HTML/plain-text. Он отлично работал в gmail и многих других клиентах, которые я видел.Очень простой HTML/текстовый текст, который не отображается вообще в microsoft live.com

Как выясняется, @ live.com-аккаунты вообще не видят содержимое электронной почты.

Вот соответствующий код:

$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]\r\n"; 
$headers .= "MIME-Version: 1.0\r\n"; 
//add boundary string and mime type specification 
$headers .= "Content-Type: multipart/alternative; boundary=$random_hash\r\n"; 
$headers .= "Content-Transfer-Encoding: 7bit\r\n"; 
//define the body of the message. 
$message = "This is a MIME encoded message.\r\n\r\n" . 
    "--$random_hash\r\n" . 
    "Content-Type: text/plain; charset=utf-8\r\n" . 
    //"Content-Transfer-Encoding: 7bit\r\n" . 
"\r\nthis is plain text.\r\n\r\n" . 
"--$random_hash\r\n" . 
"Content-Type: text/html; charset=utf-8\r\n" . 
    //"Content-Transfer-Encoding: 7bit\r\n" . 
    "\r\n<html><body>this is wonderful <b>HTML</b> text.</body></html>" . 
    "\r\n\r\n--$random_hash--\r\n"; 
mail('[email protected]', 'This is u umlaut: ü', $message, $headers); 

Если бы я только отправить либо HTML или обычный текст, он будет отображаться правильно.

Любые идеи?

Я не хочу использовать дополнительную библиотеку. Все, что мне нужно для HTML, это ссылки, в основном. Ответы на PHP Multi-Part Text/HTML showing blank не помогают мне.

И кстати: и- умляут отображается неправильно в списке электронной почты в почтовом ящике live.com но отображается правильно, когда я открываю почту в live.com ...

+0

посмотрите на http://phpmailer.worxware.com/, он работает очень хорошо и имеет хорошую встроенную поддержку multipart – ITroubs

+0

Большое спасибо за подсказку, ITroubs! Однако: «Я не хочу использовать дополнительную библиотеку» - мне нужен только HTML, чтобы иметь красивые ссылки, потому что я отправляю ссылки подтверждения с длинными произвольными строками, которые выглядят уродливо в виде обычного текста. Я серьезно не хочу вводить зависимость от какой-то другой базы кода только для этого. –

+0

Это действительно стоит попробовать. Такие библиотеки не создаются без какой-либо причины. В этих библиотеках много знаний относительно обработки особых случаев и/или особых проблем. Вот почему я упомянул об этом. – ITroubs

ответ

0

Понял через несколько часов.

Вопрос: CR и LF.

Я заменил все CRLF (\r\n) на LF (\n), и это сработало.

По дороге я также заменил 7 бит на 8 бит.

И как для сюжетной линии, которая была простой в Google для, и это решение для UTF-8:

$subject = '=?utf-8?B?' . base64_encode($subject) . '?='; 

Спасибо, ребята!

+0

Вы должны правильно использовать CTE, например, кавычки и кодировать данные; SMTP по-прежнему технически является 7-битным протоколом, хотя во многих местах вы можете уйти с голыми 8-битными данными – tripleee

+0

Спасибо, тройной. Что вы подразумеваете под «CTE», как бы я «правильно его использовал»? –

+0

К сожалению, я имею в виду замену «Content-Transfer-Encoding: 8bit» одним из 7-битных безопасных кодировок для 8-битных данных, определенных стандартом MIME, то есть «quoted-printable» или 'base64'. Для информации с несколькими нечетными 8-битными байтами в ней предпочтение отдается первому; для двоичных данных или текста в 8-битном наборе символов выберите последний. Единственное различие заключается в экономии выражения и удобочитаемости человека в кодированных данных. – tripleee