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

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

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

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

PEAR

PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

Q&A

2回答

6402閲覧

PEARで添付ファイルが送信できません。

KentaroOnoda

総合スコア17

PHP

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

PEAR

PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

0グッド

0クリップ

投稿2017/03/15 10:29

編集2017/03/16 11:39

PHPのMail及びMimeパッケージを使って添付ファイル付きのメールを送信するプログラムを作成しています。現在メールを送信することはできるのですが、ファイルが添付されておらず、また本文中の改行コード(コード中の"\n")が文字化けしてしまい、送信したメールには改行が反映されていない状態です。ちなみに作成中のソースは以下の通りになります。

require_once("Mail.php"); require_once("Mail/mime.php"); $params = array( "host" => "ssl://smtp.lolipop.jp", "port" => 465, "auth" => true, "username" => "○○○○@△△△△.or.jp", "password" => "××××" ); $mailObject = Mail::factory("smtp",$params); $recipients = "○○○○@△△△△.or.jp"; //メールの本文を作成 $honbunName = "氏名:" . $name . "\n"; $honbunFurigana = "フリガナ:" . $furigana . "\n"; $honbunCompany = "会社名:" . $company . "\n"; $honbunZipcode = "郵便番号:〒". $zipcode1 . "-" . $zipcode2 . "\n"; $honbunAddress = "住所:" . $prefecture . $cityName . $building . "\n"; $honbunMailAddress = "メールアドレス:" . $mailaddress1 . "\n"; $honbunPhoneNumber = "電話番号:" . $phoneNumber1 . "-" . $phoneNumber2 . "-" . $phoneNumber3 . "\n"; $honbunContent = "問い合わせ内容:" . $content; $honbun = $honbunName . $honbunFurigana . $honbunCompany . $honbunZipcode . $honbunAddress . $honbunMailAddress. $honbunPhoneNumber .$honbunContent; $body = mb_convert_encoding($honbun, "ISO-2022-JP", "utf-8"); $mimeObject = new Mail_Mime("¥n"); $mimeObject -> setTxtBody($body); //mb_language("ja"); //各項目をShift-JISに変換 //件名 $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']; $filetype = $_POST['filetype']; $mimeObject -> addAttachment($filepath, $filetype); }//if $bodyParam = array( "head_charset" => "ISO-2022-JP", "text_charset" => "ISO-2022-JP" ); $body = $mimeObject -> get($bodyParam); $addHeaders = array( "To" => $to, "From" => $mailaddress1, "Subject" => $title ); $headers = $mimeObject -> headers($addHeaders); $mailObject -> send($recipients, $headers, $body);

$filepath については「../フォルダ名/ファイル名」というように上記の処理を行うファイルからの相対パスで値を受け取る。

ちなみにアップロードしたファイル情報を受け取る部分は以下のように作成しました。

//連想配列に各要素を格納する //表示用 $arr1 = array('お名前' => $name,'フリガナ' => $furigana,'会社名' => $company,'郵便番号' => $zipcode,'住所' => $address, 'メールアドレス' => $mailaddress1,'電話番号' => $phoneNumber,'お問い合わせ内容' => nl2br($content)); //データ処理用 $arr2 = array('name' => $name,'furigana' => $furigana,'company' => $company,'zip1' => $zipcode1,'zip2' => $zipcode2, 'prefecture' => $prefecture,'cityName' => $cityName,'building' => $building, 'mailaddress1' => $mailaddress1,'mailaddress2' => $mailaddress2,'phoneNumber1' => $phoneNumber1, 'phoneNumber2' => $phoneNumber2,'phoneNumber3' => $phoneNumber3,'content' => $content); if(isset($_FILES['sendfile']['name'])){ //ファイルが添付されている場合 $fname = $_FILES['sendfile']['name']; $temp = $_FILES['sendfile']['tmp_name']; $target = '../file/' . $fname; $filetype = $_FILES['sendfile']['type']; if(move_uploaded_file($temp, mb_convert_encoding($target, "SJIS", "AUTO") )){ //アップロードファイルの移動に成功した場合 $arr1['添付ファイル'] = $fname; $arr2['fname'] = $fname; //ファイルパスを設定 echo "<input type = hidden name = filepath value = '" . $target . "' />"; echo "<input type = hidden name = filetype value = '" . $filetype . "' />"; } }//if foreach ($arr1 as $ky => $val){ //入力内容を表示する echo "<tr><th>" . $ky . "</th><td>" . $val . "</td></tr>"; }//for-each foreach ($arr2 as $ky => $val){ //送信するデータをhiddenで表示する echo "<input type = hidden name = " . $ky . " value = '" . $val . "' />"; }//for-each

ファイルが添付されない原因につきましては自分でデバックしたところ、$mimeObject -> addAttachment($filepath, $filetype);のところで「PEAR_Error:File not found」とエラー表示がされました。
エラー内容

原因に何か心当たりがございましたら、ご教示・ご指摘の程よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/03/15 10:32

ファイルパスがPOSTで設定されているって、いったいどんな仕様?$_POST['filepath']に代入される具体的な値の例でもあげてもらうと回答しやすいとおもいます。
KentaroOnoda

2017/03/15 10:35

ご指摘ありがとうございます。$_POST['filepath']の値の例としては「../フォルダ名/ファイル名」という様に相対パスで受け取ります。
退会済みユーザー

退会済みユーザー

2017/03/15 10:38 編集

ここで変に情報をぼかされると回答できません。 実際に動かして変数に格納されている値を、記述してください。
KentaroOnoda

2017/03/15 10:40

値の例としては「../file/○○○.pdf」です。
KentaroOnoda

2017/09/08 00:51

ご返答が遅くなってしまいすみません。はい、そうです。
guest

回答2

0

まず既に Kosuke_Shibuya さんも書かれていますが、アップロードされたファイルは $_POST ではなく、$_FILES で受け取らねばなりません。
その上で、$_FILES は、次のような構造を持っていて、直接ファイルを示していません。

PHP

1 $_FILES = array( 2 '{アップロード時のname属性の値}' = array ( 3 'name' => '{本来のファイル名}', 4 'tmp_name' => '{テンポラリ領域に格納されているファイルのファイル名}', //※ファイル名競合を避けてユニーク名に変更されています 5 'size' => {ファイルサイズ}, 6 'type' => '{ブラウザから渡されたファイルの MIME-TYPE}', 7 'error' => {アップロードに関するエラーコード} 8 ), 9 ); 10

なので直接 $_FILES[{id}][name] を見ても、その時点では実態はそこにありません(そもそもパスがなく、単なるファイル名です)。
move_uploaded_file ( $_FILES[{id}]['tmp_name'], '{ファイル配置場所}/' . $_FILES[{id}]['name'] ) を使って、適当な場所(たいていは /tmp/ 以下の書き込み可能なディレクトリの下)にファイルを再配置してから使います。

投稿2017/03/16 00:50

tacsheaven

総合スコア13703

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

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

KentaroOnoda

2017/03/16 11:30

ご回答頂きありがとうございます。質問内容が説明不足で申し訳ないのですが、アップロードしたファイルを$_FILESで受け取る部分は別で作成しています。こちらの質問をご覧頂けると幸いです。⇒https://teratail.com/questions/68299
guest

0

この質問の関連であると仮定して回答します。
https://teratail.com/questions/68299

アップロードしてファイルは、$_POST では受け取れません。

$_FILES['sendfile']; で受け取ってください。

投稿2017/03/15 10:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

KentaroOnoda

2017/03/16 00:24

ご回答頂きありがとうございます。 https://teratail.com/questions/68299  上の質問とはやりたい事は同じですが、やり方が違いますので関係ないと考えてください。 私が質問したいのはコード文中のaddAttachment($filepath, $filetype)の部分で「PEAR_Error:File not found」となる理由です。分かりにくい質問ですみません。もし原因に心当たりがあればご指摘頂けると幸いです。よろしくお願いします。
退会済みユーザー

退会済みユーザー

2017/03/16 00:28

var_dump( $filepath ); を $filepath = $_POST['filepath']; の舌に記述して正しい値が入っているかどうかを確認してください。
KentaroOnoda

2017/03/16 11:29

確認したところ正しい値が入っていました。
退会済みユーザー

退会済みユーザー

2017/03/16 12:48

$fname; に入っているのは、ファイルが存在していない、アップロード時のがいる名でしょう。ファイルが存在しているのは $temp です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問