1

週末に、MTA (POSTFIX) がメッセージの境界に突然改行を追加し始めました。マルチパート/代替メッセージを定義し、ヘッダーを定義する PHP テンプレートがいくつかあります。これは PHP メーラーの形式で、金曜日には機能していましたが、月曜日に突然停止しました。

$headers = "From: name <our@example.com>\r\n" .
   "Reply-To: name <our@example.com>\r\n" .
   "MIME-Version: 1.0\r\n" .
   "Content-Type: multipart/alternative; boundary=\"09127kjhd821\"";

$txt = "\r\n\r\n--09127kjhd821\r\n" .
   "Content-Type: text/plain; charset=UTF-8\r\n" .
   "Content-Transfer-Encoding: quoted-printable\r\n\r\n" .
   "Text Message";

$html = "\r\n\r\n--09127kjhd821\r\n".
   "Content-Type: text/html; charset=UTF-8\r\n" .
   "Content-Transfer-Encoding: base64\r\n\r\n" .
   chunk_split( base64_encode( "HTML Message") );

$body = $txt . $html . "\r\n\r\n--09127kjhd821--";

mail(
   "someone@example.com",
   "=?UTF-8?B?" . base64_encode( "Subject" ) . "?=",
   $body,
   $headers
);

元のメールと壊れたメールを比較すると、次の壊れたメールが表示されます。

Date: Fri,  3 Aug 2012 16:52:39 -0400 (EDT)





--09127kjhd821

Content-Type: text/plain; charset=UTF-8

Content-Transfer-Encoding: quoted-printable

オリジナル(ワーキング)

Date: Tue, 31 Jul 2012 12:36:45 -0400 (EDT)



--09127kjhd821
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

ご覧のとおり、改行は \r と \n ごとにほぼ 2 倍になっていますが、私の知る限り、これを引き起こすような変更はありません。

どんな提案や助けも大歓迎です。

4

1 に答える 1

2

私が思いつくことができる唯一のことは、LF を CRLF に変換する際の POSTFIX と PHP の問題です。そのため、境界とヘッダーのメッセージ本文で CRLF が定義されている場合、CRCRLF に変換されます。ただし、メッセージ ソースを保存しても、16 進エディターでは CRLF としてのみ表示されます。これは、使用しているエディターまたは電子メール クライアントのダウンロード プロセスでの変換である可能性があります。

以前は正常に機能していたのに、なぜ突然変更されたのか、まだわかりません。私が考えることができる唯一の違いは、CRLF から LF に変更された可能性のあるスクリプトの行末が原因で、変換が行われ、本文に CRLF を含む電子メールが壊れている可能性があることです。

php.ini の sendmail_path を次のように変更することで、最終的に問題を修正しました。

sendmail_path="/usr/bin/dos2unix|/usr/sbin/sendmail -t -i"
于 2012-08-14T17:18:55.490 に答える