PHP初心者の者です。入力画面からファイルを選択して、確認画面を遷移する際に一度ローカル環境のサーバーに選択したファイルをアップロードして、確認画面で「送信する」ボタンをクリックすると、ファイル付きのメールを送信するという処理を作成しています。
現在添付ファイル付きのメールを送信すると、添付ファイルがなぜかファイル名が文字化けしてテキストファイルになってしまい、更に本文が何も記載されていない状態になってしまいます。私が自分でデバックをしたところ、
1.入力画面からファイルを選択する
2.ローカル環境のサーバーに選択したファイルをアップロードする
以上2点は出来ていました。なので、確認画面から「送信する」ボタンをクリックした後の処理で何か問題があると思うのですが、
どうしても原因が分かりません。添付ファイル付きのメールを送信したときの結果が、以下の写真の通りになります。
(今回はPDFファイルを添付しました。)
また、以下のサイトを参考にしました。
リンク内容
ちなみに各画面および内部処理のソースコードは以下の通りになります。
(メール送信に関係のある部分のみ抜粋してあります)
入力画面
<form action="/lifeone/php/makeSure.php" method="post" enctype = "multipart/form-data"> <input type ="hidden" name = "MAX_FILE_SIZE" value = "102400"> <input type = "file" width = "120" name = "sendfile" /> <input name="submit" type="submit" id="submit" value="確認画面へ">
確認画面 makesure.php
<form action="/lifeone/php/mailsend.php" method="post"> <?php if(isset($_FILES['sendfile']['name'])){ $fname = $_FILES['sendfile']['name']; $temp = $_FILES['sendfile']['tmp_name']; $target = '../file/' . $fname; if(move_uploaded_file($temp, $target)){ //ファイルパスを設定 echo "<input type = hidden name = filepath value = '" . $target . "' />"; } }//if ?> <input name="submit" type="submit" id="submit" value="送信する" />
メール送信処理 mailsend.php
mb_language("ja"); //各項目をShift-JISに変換 //件名 if(isset($_POST['submit'])){ $title = mb_encode_mimeheader(mb_convert_encoding("メールタイトル", "JIS", "utf-8"),"JIS"); //送信先アドレス $to = mb_convert_encoding("○○○○○○@△△△△.or.jp", "JIS", "utf-8"); if(isset($_POST['fname'])){ //添付ファイルがある場合 $filepath = $_POST['filepath']; $boundary = "__BOUNDARY__"; $message1 = "\n" . "--" . $boundary . "\n"; $message2= $message1 . "Content-Type: " . mime_content_type($filepath) . "; name=\"" . basename($filepath) . "\n"; $message3= $message2 . "Content-Disposition: attachment; filename=" .basename($filepath) . "\n"; $message4= $message3 . "Content-Transfer-Encoding: base64\n"; $message5= $message4 . chunk_split(base64_encode(file_get_contents($filepath))). "\n"; $message6= $message5 . "--" . $boundary . "--"; }//if //内容 $message = "--" . $boundary . "\nContent-Type: text/plain; charset=\ISO-2022-JP\\n\n" .mb_convert_encoding($honbun , "JIS" , "utf-8") . $message6; //送信元メールアドレス $from = "Content-Type: multipart/mixed; boundary=\"" . $boundary . "\"\n" ."From: " . $mailaddress1; $xmail = "X-Mailer: PHP/". phpversion(); $i = 0; if(mail($to, $title, $message, $from . "\r\n" . $xmail)){ $_SESSION['error' . $i] = "お問い合わせ内容を送信しました。"; }else{ $_SESSION['error' . $i] = "お問い合わせ内容を送信できませんでした。"; }//if }//if
恐れ入りますがどなたか原因に心辺りがある方はご回答頂けると幸いです。よろしくお願いします。