web-dev-qa-db-ja.com

phpメールヘッダーのどの改行、\ r \ nまたは\ n?

私は、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が間違っているためですか?

26
Sam

検索エンジンがこれを見つけて他の誰かを救った場合に備えて、私が経験した不満を解消します。ここに追加の好奇心があります。

Linuxのphp5.2xでは、php mail()のメールヘッダーに\ r\nがありましたが、php 5.3.3にアップグレードした後、フォーマットと送信が不思議なことに失敗しました。\rを削除すると、スクリプトが修正されました(他の多くの可能性を検討した後)。

11
Chuck

上で述べたように、\ r\nはRFCに従って使用する必要がありますが、これにより、いくつかのメールシステム(f.i. Outlook 2003)のヘッダーが壊れます。\nは使用するのに「適切な」改行ではありませんが、私の経験では、これまでに遭遇したすべてのメールシステムで正しく機能します。このため、私は常に\ nだけを使用します。

8
Daniel

RFCは正式にCRLF(\ r\n)を義務付けていますが、ヘッダーにUnixの改行(\ n)を使用すると、多くの手間が省けます。 qmailなどの一部のメールサーバーは、\ r\nを使用するとメッセージを拒否します。

出典:経験、このメモで確認: http://www.php.net/function.mail#40204

3
Scott C

私の経験:HTMLメールはWebクライアントで機能していましたが、MSベースのデスクトップクライアント(entourage、Outlook)では機能していませんでした。\r\nを使用していました。 MIMEバージョンの\ rのみを削除し、全面的に機能するようになりました。

2
Baker

Gmailが\ r\nヘッダーを誤解するという問題がありましたが、私の場合、ヘッダーの改行を\ nのままにしておくだけでは不十分でした。その場合、Outlookの一部のバージョンでメールが空として表示されていたためです。

https://stackoverflow.com/a/7960957 (ppaからlucidにpostfix 2.9をインストールすることを選択しました)の解決策と\ nの使用は、今ではどこでも機能しているようです。

1
raquo

スクリプトを変更して、代わりに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;

注意。後者は機能していないようですので、「」の代わりに「」を使用してください。

1
Kee