Outlook 2007 riceve la posta HTML come sorgente con le intestazioni, gli altri programmi di posta elettronica funzionano bene. Perché?

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

  •  23-09-2019
  •  | 
  •  

Domanda

Ho un paio di semplici forme che inviano una e-mail HTML-only. La maggior parte dei clienti (Gmail, Lotus Notes 8, hotmail / live, Windows Live Mail, Outlook Express) ricevono le e-mail più che bene, ma Outlook 2007 non.

Il codice è simile al seguente:

$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 è l'unica parte del messaggio convalidato)

Il messaggio ricevuto da parte del cliente è simile al seguente:

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>

Tutte le idee?

È stato utile?

Soluzione

Hai provato l'invio di email multipart, quando si fa questo non abbiamo mai avuto problemi con Outlook 2k3 e 2k7 (eccettua poveri rendering 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>";

È possibile sostituire i confini con quello che vuoi, ma devono essere unici.

Per e-mail più potente e flessibile l'invio in php Suggerisco di usare SwiftMailer

EDIT:. Come Outlook 2007 ha un renderer HTML veramente stupido, si può anche provare a fissare il vostro margine di profitto, c'è un </font> mai aperto nel tuo esempio, so se è il vero mail o un errore di battitura in questione

Altri suggerimenti

Ho avuto un problema molto simile, provare a rimuovere la / r da vostre dichiarazioni e utilizzare solo / n. Outlook andd hotmail hanno problemi con / r / n.

Confermo l'esperienza con Exchange janmoesen è condiviso. Ho dovuto cambiare CRLF nelle intestazioni a poco LF, poi ha cominciato a lavorare.

(Grazie Microsoft, ancora una volta, per avermi lavoro a tempo il 40% in più.

Anche un vero e proprio grazie a janmoesen per averlo! Questa ricerca è finita.)

Ho incontrato lo stesso problema con Outlook 2007.

La risposta è semplice: sostituire \ r \ n di \ n

Se il messaggio è in formato HTML è necessario identificarlo come tale:

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

Ho sempre avuto migliore fortuna con codifica MIME mail HTML. Anche se v'è solo una parte, io di solito uso multipart / mixed ed esplicitamente impostare il tipo di contenuto (text / html). Io non sono molto familiarità con PHP, ma il pacchetto PEAR::Mail_Mime sembra un candidato.

Outlook non dovrebbe avere un problema di toccarla. (Emphisis su non dovrebbe ).

Ho avuto problemi con lo scambio (non solo Outlook) e CRLF nelle intestazioni con risultati simili. In sostanza, siamo stati l'invio di mail (utilizzando PHP su Debian con Postfix) con intestazioni CRLF separati, che otterrebbe maciullato in Exchange al momento dell'arrivo. Quando ho cambiato coloro \r\n a \n semplicemente, il problema era sparito. ( "RFC Al diavolo!", Eh?)

YMMV, ovviamente, dal momento che non è chiaro se i vostri altri client di posta si connettono allo stesso server come Outlook, o utilizzare server separati del tutto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top