[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 メーリングリストの案内