O Outlook 2007 recebe emails em HTML como fonte com cabeçalhos, outros MUAs funcionam bem.Por que?

StackOverflow https://stackoverflow.com/questions/2149366

  •  23-09-2019
  •  | 
  •  

Pergunta

Tenho alguns formulários simples que enviam um e-mail somente em HTML.A maioria dos clientes (Gmail, Lotus Notes 8, hotmail/live, windows live mail, Outlook Express) recebe os e-mails perfeitamente, mas o Outlook 2007 não.

O código fica assim:

$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 é a única parte da mensagem validada)

A mensagem recebida pelo cliente é assim:

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>

Alguma ideia?

Foi útil?

Solução

Você já tentou enviar e -mails multipart, ao fazer isso, nunca tivemos problemas com o Outlook 2K3 e 2K7 (exceto que a renderização html ruim)

<?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>";

Você pode substituir os limites pelo que quiser, mas eles devem ser únicos.

Para um e -mail mais poderoso e flexível, enviando no PHP, sugiro usar Swiftmailer

EDIT: Como o Outlook 2007 tem um renderizador HTML realmente idiota, você também pode tentar consertar sua marcação, há um </font> Nunca abriu em seu exemplo, não é o correio real ou um erro de digitação em questão.

Outras dicas

Eu tive um problema muito semelhante, tente remover o /r de suas devoluções e usar apenas /n. Outlook e Hotmail têm problemas com /r /n.

Certifique-se de ter compilado definido nas propriedades do arquivo.

e.g.

clique individual "recurso1.eventreciver.cs" dentro do Solution Explorer.Agora olhe para a guia Propriedades e você deve ver a Ação de Construção .... Certifique-se de definir para compilar.

O mesmo vale para qualquer outra coisa dentro do projeto

Encontrei o mesmo problema com o Outlook 2007.

A resposta é simples: substitua r n por n

Se a mensagem estiver em HTML você precisa identificá-la como tal:

$header .= "Content-Type: text/html; charset=iso-8859-1\r\n";

Eu sempre tive mais sorte com o MIME codificado HTML e -mails. Mesmo se houver apenas uma parte, normalmente uso multipart/misto e defino explicitamente o tipo de conteúdo (texto/html). Não estou muito familiarizado com o PHP, mas o PEAR::Mail_Mime O pacote parece um candidato.

O Outlook não deve ter problemas para lidar com isso. (ênfise em não deveria).

Tive problemas com o Exchange (não apenas o Outlook) e o CRLF em cabeçalhos com resultados semelhantes. Basicamente, estávamos enviando e-mails (usando o PHP no Debian com o Postfix) com cabeçalhos separados pela CRLF, que seriam mutilados em troca na chegada. Quando eu mudei esses \r\n para simplesmente \n, o problema se foi. ("RFCs são condenados!", Eh?)

YMMV, obviamente, como não está claro se seus outros clientes de email se conectam ao mesmo servidor que o Outlook ou usam servidores separados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top