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」とエラー表示がされました。
原因に何か心当たりがございましたら、ご教示・ご指摘の程よろしくお願いします。