2

ファイルが添付されたメールで問題が発生しました。すべてヘッダーにあるhtml(テキストとして解析される)とfile(テキストとしても解析される)を含むヘッダーは、メッセージ本文として表示されます。このコードは以前は機能していましたが、何が変わったのかわかりません。

ランダムな要因があり、メールが正しく到着することもありますが、メールを台無しにする/機能させるパターンを(あると仮定して)理解できないようです。

これは、メールを生成するための私のコードです。

$file = $path.$filename;
$file_size = filesize($file);
$handle = fopen($file, "r");
$content = fread($handle, $file_size);
fclose($handle);
$content = chunk_split(base64_encode($content));
$uid = md5(uniqid(time()));
$name = basename($file);
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$header .= "This is a multi-part message in MIME format.\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-Type: text/html; charset=utf-8\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= $message."\r\n\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; 
// use different content types here
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$header .= $content."\r\n\r\n";
$header .= "--".$uid."--";
$mailto = 'yanivshimony@gmail.com';
if (mail($mailto, $subject, "", $header)) {

    echo "1"; // or use booleans here
} else {
    echo "mail send ... ERROR!";
}

すべてのヘッダーを削除しようとしましたが、次のヘッダーのみが機能するようになりました。

$header .= "Content-Type: text/html; charset=utf-8\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= $message."\r\n\r\n";

したがって、multipart / attachment / anythingのない通常のhtmlメールのように、まったく役に立たないのですが、HTMLは解析されます:)

ヘッダーを壊す可能性のあるアイデアはありますか?ありがとう!

4

1 に答える 1

2

ヘッダーは、変数が正しくない$headerコンテンツで始まることを示しています--38fd5b8f9b812b5db3ec89cd01b6bd9c...ヘッダーは境界で始まるのではなく、本文だけで始まる必要があります(したがって、最初のエントリはである必要がありますMIME-Version: 1.0)。これがどこで起こっているのかを言うのは難しいです、特にあなたが私が追加したコードフォーマットの修正を削除したが、行を切り替えた場合:

$header.= "MIME-Version: 1.0\r\n";

に:

$header= "MIME-Version: 1.0\r\n";

以前の定義が$headerそこに忍び寄るのを止める必要があります。

于 2012-04-30T16:46:25.430 に答える