0

以下のコードは、何年もの間、印刷フルフィルメント担当者に CSV を送信してきました。週の初めに、システム管理者は、実行したい procmail レシピに関係する理由で、sendmail から qmail に切り替えました。

おそらく偶然ではありませんが、フルフィルメント担当者は、メールで CC した他の人がレコードを見たときでさえ、空の CSV を見ていると聞き始めました。この問題を抱えている人は、添付ファイルを見て開くことができましたが、MUI では 131 バイトまたはゼロ バイトとしてリストされていました。

同じ結果でYahooアドレスへの送信を開始しました。ただし、Gmail は正しい行の添付ファイルを認識します。これはすべて 1 つの CC されたメールであり、メール クライアントによって結果が異なることに注意してください。

私は vi でコードを調べ、^M 文字やその他の制御文字のジャンクがないことを確認しました。

これを前に見た人はいますか?どんな提案でも大歓迎です!

ありがとう!

$message = "Here is the file (comma-separated values) of addresses for\n";
$message .= $pm_row['title'] . " Requests ($now_YmdHMS).\n\n";
$data_email = $pm_row['fulfillment_data_email'];
$data_email_cc = "$pm_row[fulfillment_data_email_cc],$developer_email";
$subject = $pm_row['title'] . " Requests ($now_YmdHMS)";
$random_hash = md5(date('r', time()));
$headers = "From: XXX <tourism@xxx.org>\r\nReply-To: tourism@xxx.org\r\nCc:$data_email_cc"; 
$headers .= "\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
$attachment = chunk_split(base64_encode(file_get_contents($filename)));
$output = "
--PHP-mixed-$random_hash; 
Content-Type: multipart/alternative; boundary='PHP-alt-$random_hash'
--PHP-alt-$random_hash
Content-Type: text/plain; charset='iso-8859-1'
Content-Transfer-Encoding: 7bit

$message

--PHP-alt-$random_hash 
Content-Type: text/html; charset='iso-8859-1'
Content-Transfer-Encoding: 7bit

$message

--PHP-alt-$random_hash--

--PHP-mixed-$random_hash
Content-Type: application/zip; name=$now_YmdHMS.$pm_row[handle].csv
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

$attachment
--PHP-mixed-$random_hash--";

mail($data_email, $subject, $output, $headers);
4

1 に答える 1

1

これは CR/LF の問題だと思います。これは約 3 年前から PHP の既知のバグであり、私の知る限り、現在まで修正されていません。

http://bugs.php.net/bug.php?id=15841

RFC に準拠していない改行形式を使用しているため、生成された電子メールは有効ではありません (説明はhttp://cr.yp.to/docs/smtplf.htmlにあります)。sendmail や postfix などの他の MTA は、この問題を自動的に修正します。qmail はそうではありません。

php で正しいメールを作成するか ()、qmail 管理者に QmailScanner ( http://qmail-scanner.sourceforge.net/ ) を使用するように依頼してください。これもこの仕事をしています。

最善の解決策は、php をアンインストールして、今後は perl を使用することです;)

于 2010-07-12T09:46:58.290 に答える