2011-07-25 9 views
4

PHPマニュアル(http://php.net/manual/en/function.mail.php)は言う:PHPのmail()ドキュメントでは、私は本文中でLFのみを使うべきだと言いますが、RFC 5322はそうではないと言います。

各行はLF(\ n)となります。行は で、70文字を超えてはいけません。

2.3:

しかし、実際のRFC 5322には、さまざまな情報を提供しますtotallty。本文メッセージの本文はUS-ASCII 文字の単なる行です。体の唯一の2つの制限は次のとおりです:
o CRとLFはCRLFとして一緒に発生しなければなりません。体内に別途 と表示されてはいけません。 o本体の文字列 は、998文字( )に制限しなければならず、CRLFを除く78文字に制限してください(SHOULD)。

So - RFCは、\ r \ nだけを使用する必要があると言います。 私は理解できません - php mail()はバックグラウンドでどのように機能しますか?

+3

PHPのオープンソースあなたは非常に簡単にソースを読んで、mail()が何をしているか見ることができます。 mail()のドキュメントが物事を一方的に提供すると言っているため、基本的なRFCは、何か他のことはPHPが内部的に翻訳を行うことができないことを意味するとは限りません。 –

+1

このバグには興味があるものがあります:https://bugs.php.net/bug.php?id=15841 *(正確な答えはわかりませんが、qmail、sendmail、ウィンドウズ、すべて)* –

+1

@Marc B:簡単だと思いますが、なぜPHP開発者にとって大規模なCコードベースが難しいのでしょうか?私は朝食のような問題を食べる。 – Stann

答えて

1

php mail()はバックグラウンドでどのように機能しますか?

設定のとおりです。デフォルトでは、ほとんどのシステムでsendmailバイナリを包むラッパーと、SMTPホストが指定された非常に単純なMUAです。前者はLFを入力で終わる行として使用していますが、後者は出力のためにCRLFが必要です - PHPのオープンソースはOSごとに異なるので、PHPはメール(LF)の統一行の終わりを提供します

+2

私はこれが正確には期待できないと主張します。 Rf5321/5322は明らかに - ヘッダーと本文に\ r \ nを使用します。そしてそれは明らかに - シングル\ nかシングル\ rを使わないでください。なぜPHPが二重変換を避けるために\ n \と\ r \ nを使用することを選択したのですか?わかりません。 – ThatGuy

2

明らかに、PHP mail()は、バックグラウンドで\nから\r\nに変換する必要があります。

これは\nを使用して "論理"改行を表し、それをOSに応じて内部的に変換するのに似ています。 PHPは部分的にPerlに触発されて以来、PHPにも同様のメカニズムが存在することは驚くことではありません。

関連する問題