3

HTMLのみのメールを送信する簡単なフォームがいくつかあります。ほとんどのクライアント (Gmail、Lotus Notes 8、hotmail/live、windows live メール、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>

何か案は?

4

8 に答える 8

8

マルチパート メールを送信してみましたか? これを行った場合、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>。実際のメールなのか、問題のタイプミスなのかはわかりません。

于 2010-03-11T08:54:23.193 に答える
4

非常によく似た問題がありました。返品から /r を削除して、/n のみを使用してみてください。Outlook と hotmail で /r/n に問題があります。

于 2011-01-25T19:23:46.713 に答える
3

Outlook2007でも同じ問題が発生しました。

答えは簡単です:\ r\n\nに置き換えます

于 2012-09-25T18:38:34.080 に答える
3

Exchange janmoesenが共有した経験を確認します。ヘッダーの CRLF を LF に変更する必要がありましたが、機能し始めました。

(Microsoft にもう一度、40% 余分に作業させてくれてありがとう。

また、これを指摘してくれたjanmoesenに本当に感謝します! この検索は終了しました。)

于 2010-12-28T15:58:57.920 に答える
2

ヘッダーのExchange(Outlookだけでなく)とCRLFで問題が発生し、同様の結果が得られました。基本的に、私たちは(Postfixを使用してDebianでPHPを使用して)CRLFで区切られたヘッダーを使用してメールを送信していました。これは、到着時にExchangeで混乱します。それら\r\nを単純に変更すると\n、問題はなくなりました。(「RFCは酷い!」、え?)

YMMVは、明らかに、他のメールクライアントがOutlookと同じサーバーに接続するのか、それとも別のサーバーを使用するのかが明確でないためです。

于 2010-03-11T07:53:42.820 に答える
1

私はいつもMIMEエンコードされたHTMLメールで幸運に恵まれてきました。パートが1つしかない場合でも、通常はmultipart / mixedを使用して、コンテンツタイプ(text / html)を明示的に設定します。私はPHPにあまり詳しくありませんが、PEAR::Mail_Mimeパッケージは候補のように見えます。

Outlookはそれを処理するのに問題がないはずです。(強調すべきではありません)。

于 2010-03-10T05:24:44.203 に答える
1

メッセージが HTML の場合は、次のように識別する必要があります。

$header .= "Content-Type: text/html; charset=iso-8859-1\r\n";
于 2010-01-27T18:31:27.433 に答える