[PHP-users 28318] 添付メールで真っ白なメールが送信される現象

Toshinori Koba tossy_knoxville72 @ white.livedoor.com
2006年 2月 3日 (金) 20:07:06 JST


初めて投稿させていただきます。木庭と申します。
ブラウザから、画像ファイルをアップロードさせて、添付メールを送る部品を
PHP4.3.11で作成しております。

現在問題なのは、添付ファイルがついてこないどころか、真っ白のメールが
送られてきてしまうので原因を調べております。

こちらのMLでの過去ログを参考にして、なおかつ先輩が作成した稼動実績の
あるPHPソースを確認して、ヘッダの順番、改行の回数を確認しました。
メールは真っ白ですが、メールのソースを調べてみると、ヘッダデータや本文
内容、添付メールのパートは書かれていることは確認できています。

問題(1)
 chunk_split(base64())で変換された画像データで、添付ファイルのパート
 にて各行に余分な改行が入る。

#気になる現象でありますが、chunk_splitの第2引数を「76」、第3引数を「\n」
#に設定してみたら、余分な改行はなくなりました。
#しかしながら、改善されません。

問題(2)
 ソースのエンコーディング、ファイル名などのエンコーディングをEUC-JP
 にしても改善されません。

ヘッダの組み方にも問題があるのか、何らかのオプションが必要なのか見当
がつかない状態です。
こうした問題に遭遇されたことはありますでしょうか?

念のため、以下に環境情報や、ソースの一部を以下に書き込ませていただきます。

皆様のお力を拝借できればと思います。
何卒、よろしくお願い申し上げます。

========================================================
(エンコーディング状況)
ソース(Shift-JIS)
内部エンコード(EUC-JP)


(使用環境)
RedHatLinux/7.3、Apache/1.3.34、PHP/4.3.11

(確認OS、ブラウザ、メーラー)
IE6、Netscape 7.1、Firefox 1.5
(いずれも Win-XP-SP2)

ThunderBird 1.0.7 (Win-XP-SP2)
Ed-Max(フリー版) 2.85 (Win-XP-SP2)


(ソース)
$BoundaryStr = "-----=_NextPart_".uniqid(rand(),1);

$FileName = mb_convert_encoding($_FILES['hoge']['tmp_name'],"JIS","SJIS");

//ファイル内容のエンコード
$fp = fopen($_FILES['hoge']['tmp_name'], "r") or die("error");
$Contents = fread($fp, filesize($_FILES['hoge']['tmp_name']));
fclose($fp);

$Encoded = chunk_split(base64_encode($Contents));

//ヘッダ・本文の構築
$Header  = "From: (メールアドレス)\n";
$Header .= "Reply-To: (メールアドレス)\n";
$Header .= "MIME-Version: 1.0\n";
$Header .= "Content-Type: multipart/mixed;\n";
$Header .= "\tboundary=\"{$BoundaryStr}\"\n";

$Msg   .= "This is a multi-part message in MIME format.\n\n";
$Msg   .= $BoundaryStr."\n";

$Msg   .= "Content-Type: text/plain; charset=ISO-2022-JP\n";
$Msg   .= "Content-Transfer-Encoding: 7bit\n\n";
$Msg   .= (ここに本文が入る)

$Msg   .= "\n\n".$BoundaryStr."\n";
$Msg   .= "Content-Type: image/jpeg;\n";
$Msg   .= "\tname=\"{$FileName}\"\n";
$Msg   .= "Content-Transfer-Encoding: base64\n";
$Msg   .= "Content-Disposition: attachment;\n";
$Msg   .= "\tfilename=\"{$FileName}\"\n\n";

$Msg   .= "{$Encoded}\n";

$Msg   .= $BoundaryStr."\n";




-----------------------------------------------
得するキャンペーンやプレゼント情報を是非ご覧下さい!
livedoor 懸賞
http://present.livedoor.com/



PHP-users メーリングリストの案内