質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

2212閲覧

メール送信で添付ファイルを送ることが出来ません

KentaroOnoda

総合スコア17

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/03/07 09:32

編集2022/01/12 10:55

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

恐れ入りますがどなたか原因に心辺りがある方はご回答頂けると幸いです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ockeghem

2017/03/08 03:41

送信されたメールのソースを添付いただけると、分析がしやすいと思います。
KentaroOnoda

2017/03/09 10:22

ご連絡ありがとうございます。メールのソースというのは、送信処理のソースコードのことでしょうか?それとも添付ファイルのことでしょうか?
guest

回答2

0

マルチパートであると、
Content-Type: multipart/mixed;boundary="BOUNDARY"
をヘッダに追加してやる必要があります。

なんですが…… mail に渡している引数、なんかおかしいような……

投稿2017/03/07 09:55

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KentaroOnoda

2017/03/08 02:39

ご回答ありがとうございます。ご指摘頂いた内容を基に自分なりにメール送信処理部分のコードを修正したところ、今度は添付ファイルがテキストファイルになってしまい(今回PDFファイルを添付しました)、更に本文が何も表示されないという状態になってしまいました。(詳しくは質問内容を更新しましたので、ご確認頂けると幸いです。)何か原因に心当たりがございましたら、ご回答の程宜しくお願いします。
tacsheaven

2017/03/08 03:16

添付したファイル名、日本語を含んでいますよね? なのでファイル名についても MIME エンコードしてやらねば駄目ですよ。 参考にされた Web サイトでは、mail() ではなく、日本語対応の mb_send_mail() を使っているから、その辺あいまいですけど。
KentaroOnoda

2017/03/09 10:23

ご回答ありがとうございます。ファイル名についてもエンコードしてみましたが、それでも上手くいきませんでした。なので、Mailパッケージを使ってみます。
guest

0

ちょっと冗長な気がしますが、こちらの記事は参考になりませんか?
http://qiita.com/ShibuyaKosuke/items/78c8673782ebbf51584b

投稿2017/03/09 10:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KentaroOnoda

2017/03/10 00:36

ご回答ありがとうございます。参考にしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問