私は、phpのメール機能を使用した多くの例を見てきました。ヘッダーの改行として\ r\nを使用するものもあれば、\ nを使用するものもあります。
$headers = "From: Just Me\n";
$headers .= "Reply-To: Just me <$email>\n";
vs
$headers = "From: Just Me\r\n";
$headers .= "Reply-To: Just me <$email>\r\n";
どちらが正しいか?
\ r\nが使用され、ヘッダーの一部が一部の電子メールクライアントによってメールテキストとして解釈される(これらのヘッダー情報が失われる)場合があります。これは、\ r\nが間違っているためですか?
検索エンジンがこれを見つけて他の誰かを救った場合に備えて、私が経験した不満を解消します。ここに追加の好奇心があります。
Linuxのphp5.2xでは、php mail()のメールヘッダーに\ r\nがありましたが、php 5.3.3にアップグレードした後、フォーマットと送信が不思議なことに失敗しました。\rを削除すると、スクリプトが修正されました(他の多くの可能性を検討した後)。
上で述べたように、\ r\nはRFCに従って使用する必要がありますが、これにより、いくつかのメールシステム(f.i. Outlook 2003)のヘッダーが壊れます。\nは使用するのに「適切な」改行ではありませんが、私の経験では、これまでに遭遇したすべてのメールシステムで正しく機能します。このため、私は常に\ nだけを使用します。
RFCは正式にCRLF(\ r\n)を義務付けていますが、ヘッダーにUnixの改行(\ n)を使用すると、多くの手間が省けます。 qmailなどの一部のメールサーバーは、\ r\nを使用するとメッセージを拒否します。
出典:経験、このメモで確認: http://www.php.net/function.mail#40204
私の経験:HTMLメールはWebクライアントで機能していましたが、MSベースのデスクトップクライアント(entourage、Outlook)では機能していませんでした。\r\nを使用していました。 MIMEバージョンの\ rのみを削除し、全面的に機能するようになりました。
Gmailが\ r\nヘッダーを誤解するという問題がありましたが、私の場合、ヘッダーの改行を\ nのままにしておくだけでは不十分でした。その場合、Outlookの一部のバージョンでメールが空として表示されていたためです。
https://stackoverflow.com/a/7960957 (ppaからlucidにpostfix 2.9をインストールすることを選択しました)の解決策と\ nの使用は、今ではどこでも機能しているようです。
スクリプトを変更して、代わりにPHP_EOLを使用するようにしました。これは機能しているようです-次のようになります。
//Set Content-type header
$headers = "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/html; charset=iso-8859-1" . PHP_EOL;
//Additional headers
$headers .= "From: $from" . PHP_EOL;
$headers .= "Cc: $cc" . PHP_EOL;
$headers .= "Content-type: text/html" . PHP_EOL;
$headers .= "Bcc: $bcc" . PHP_EOL;
注意。後者は機能していないようですので、「」の代わりに「」を使用してください。