Outlook 2007 получает html почту как источник с заголовками, другие MUA работают нормально. Зачем? - PullRequest
3 голосов
/ 27 января 2010

У меня есть пара простых форм, которые отправляют электронную почту только в формате html. Большинство клиентов (Gmail, Lotus Notes 8, hotmail / live, windows live mail, outlook express) получают сообщения электронной почты очень хорошо, а Outlook 2007 - нет.

Код выглядит так:

$data="
            <html>
                <body>
                    <strong><u>$sub</u></strong><br><br>
                    <strong>Name:</strong> {$_POST["nombre"]}<br><br>
                    <strong>Phone:</strong>{$_POST["telefono"]}<br><br>
                    <strong>Email:</strong> {$_POST["email"]}<br><br>
            <strong>Subject:</strong> {$_POST["asunto"]}<br><br>
                    <strong>Question:</strong> {$_POST["consulta"]}</strong>
                </body>
            </html>";
            $header = "Reply-To: $from\r\n";
            $header .= "From: \"".$_POST["nombre"]."\" <$from>\r\n";
            $header .= "MIME-Version: 1.0\r\n";
            $header .= "Content-Type: text/html; charset=iso-8859-1\r\n";

            $enviado = mail($destino,$sub,$data,$header);

($from является единственной проверенной частью сообщения)

Полученное клиентом сообщение выглядит так:

Content-Type: text/html; charset=iso-8859-1
From: Consulta de "Boss" <boss@myfirm.com>
Reply-To: boss@myfirm.com
X-Mailer: PHP/

<strong><u>Solicitud de envío de recetas -
CLIENT</u></strong><br><br><strong>Nombre y Apellido:</strong>
Boss<br><br><strong>Email:</strong>
boss@myfirm.com<br><br><br>

Есть идеи?

Ответы [ 8 ]

8 голосов
/ 11 марта 2010

Вы пытались отправить многочастную электронную почту, при этом у нас никогда не было проблем с outlook 2k3 и 2k7 (исключая плохой рендеринг HTML)

<?php
$header = "From: Sender <sen...@domain.org>\r\n";
$header .= "Reply-to: Sender <blabla...@domain.net>\r\n";
$header .= "X-Mailer: Our Php\r\n";

$boundary = "==String_Boundary_x" .md5(time()). "x\r\n";
$boundary2 = "==String_Boundary2_y" .md5(time()). "y\r\n";

$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/related;\r\n";
$header .= " type="multipart/alternative";\r\n";
$header .= " boundary="$boundary";\r\n";

$message = "If you read this, your email client doesn't support MIME\r\n";

$message .= "--$boundary\r\n";
$message .= "Content-Type: multipart/alternative;\r\n";
$message .= " boundary="$boundary2";\r\n";

$message .= "--$boundary2\r\n";
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n";
$message .= "Alternative message in plain text format.\r\n";

$message .= "--$boundary2\r\n";
$message .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n";
$message .= "<html><body><p>HTML formatted message</p></body></html>";

Вы можете заменить границы на все, что захотите, но они должны быть уникальными.

Для более мощной и гибкой отправки электронной почты в php я предлагаю использовать SwiftMailer

РЕДАКТИРОВАТЬ: поскольку Outlook 2007 имеет действительно тупой HTML-рендеринг, вы также можете попробовать исправить вашу разметку, в вашем примере </font> никогда не открывается, не знаю, реальная ли это почта или опечатка.

3 голосов
/ 25 января 2011

У меня была очень похожая проблема, попробуйте удалить / r из ваших возвратов и использовать только / n. Outlook и Hotmail имеют проблемы с /r/n.

2 голосов
/ 25 сентября 2012

Я столкнулся с той же проблемой в Outlook 2007.

Ответ прост: замените \ r \ n на \ n

2 голосов
/ 28 декабря 2010

Я подтверждаю опыт работы с Exchange janmoesen поделился. Пришлось изменить CRLF в заголовках просто на LF, затем он начал работать.

(Еще раз спасибо, Microsoft, за то, что я работал на 40% больше времени.

Также большое спасибо Янмосену за то, что он указал на это! Этот поиск окончен.)

1 голос
/ 11 марта 2010

У меня были проблемы с Exchange (не только Outlook) и CRLF в заголовках с похожими результатами. По сути, мы отправляли письма (используя PHP на Debian с Postfix) с заголовками, разделенными CRLF, которые могли быть искажены в Exchange по прибытии. Когда я изменил эти \r\n на \n, проблема исчезла. («Будь прокляты RFC!», А?)

YMMV, очевидно, поскольку неясно, подключены ли другие ваши почтовые клиенты к тому же серверу, что и Outlook, или используют отдельные серверы в целом.

1 голос
/ 10 марта 2010

Мне всегда повезло больше с HTML-письмами в кодировке MIME. Даже если есть только одна часть, я обычно использую multipart / mixed и явно устанавливаю тип контента (text / html). Я не очень знаком с PHP, но пакет PEAR::Mail_Mime выглядит как кандидат.

У Outlook не должно быть проблем с обработкой. (ударение на не должно ).

1 голос
/ 27 января 2010

Если сообщение в формате HTML, вам необходимо идентифицировать его как

$header .= "Content-Type: text/html; charset=iso-8859-1\r\n";
0 голосов
/ 27 января 2010
...