[PHP-users 35799] メールフォームの画像添付でつまずいています。

杉浦 勝気 qwygn116 @ yahoo.co.jp
2014年 2月 12日 (水) 13:30:53 JST


Sourceです。

Formに入力した情報をDBに登録して、送信するといったSystemにしたのですが、
合っているのか合っていないのか自分自身で判断不能に 陥ってしまいました…。

DB側では日本語表示できるのですが、メーラーだと上手く表示されません。

添付ファイルもメッセージ本分の下に表示されるのですが、正式な添付ファイル
扱いにする為にはどうすればいいか…(悩)。
画像だけでなくpdfファイルやxlsファイルも送信できるようにすればいいかな
ど、わからない事だらけで泣きそうです…。

どなたかご教授願えないでしょうか。

宜しくお願い致します。

----------------------------------------------------------------------------

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>UploadFile</title>
</head>

<body>


<?php

//添付ファイルをこのファイルと同じ階層に予め用意してあるimgフォルダに
アップロード

if (is_uploaded_file($_FILES["file"]["tmp_name"])) {
if (move_uploaded_file($_FILES["file"]["tmp_name"], "img/japan" .
$_FILES["file"]["name"])) {
chmod("img/japan" . $_FILES["file"]["name"], 0644);
}
}

/*----------------------------------------------------------
添付ファイル付きメールをmb_send_mail()関数で送信する
----------------------------------------------------------*/
$name    = htmlspecialchars($_POST['name']);
// 宛て先アドレス
$mailTo = htmlspecialchars($_POST['mailto']);

// メールのタイトル
$mailSubject = htmlspecialchars($_POST['subject']);

// メール本文
$mailMessage = htmlspecialchars($_POST['message']);

// 添付するファイル
$fileName = "img/japan". $_FILES["file"]["name"];
$fileName = "img/japan". $_FILES["file"]["name"];

// 差出人のメールアドレス
$mailFrom = $_POST['from'];

// Return-Pathに指定するメールアドレス
$returnMail = $_POST['from'];

//Connect

$dbh = mysqli_connect('hostaddress', 'hostpass', 'username','dbname')
OR die(mysqli_connect_error());

if(!$dbh){
echo('no');
}

//Charset

$char = $dbh->query("SET NAMES utf8");

if(!$char){
print "error" ;
}

//Select

$select = $dbh->query("SELECT * FROM tablename");

if(!$select){
print "error" ;
}else{

//Insert


$insert = $dbh->query("INSERT IGNORE INTO
tablename(name,replyto,mailto,subject,message)
VALUES('$name','$mailFrom','$mailTo','$mailSubject','$mailMessage')");

}

mysqli_close($dbh);


// メールで日本語使用するための設定。
mb_language("Ja") ;
mb_internal_encoding("utf-8");

$header = "From: "." $mailFrom"."". "\r\n"."Reply-to:
".""."<"."$mailFrom"."> \n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"__PHPRECIPE__\"\r\n";
$header .= "\r\n";

$mailSubject = mb_convert_encoding($mailSubject,"utf-8");

$body = "--__PHPRECIPE__\r\n";
$body .= "Content-Type: text/plain; charset=\"utf-8\"\r\n";
$body .= "\r\n";
$body .= $mailMessage . "\r\n";
$body .= "--__PHPRECIPE__\r\n";

// 添付ファイルへの処理。
$handle = fopen($fileName, 'r');
$attachFile = fread($handle, filesize($fileName));
fclose($handle);
$attachEncode = base64_encode($attachFile);

$body .= "Content-Type: image/jpeg; name=\"$file\"\r\n";
$body .= "Content-Transfer-Encoding: base64\r\n";
$body .= "Content-Disposition: attachment; filename=\"$file\"\r\n";
$body .= "\r\n";
$body .= chunk_split($attachEncode) . "\r\n";
$body .= "--__PHPRECIPE__--\r\n";

// メールの送信と結果の判定をします。セーフモードがOnの場合は第5引数が使
えません。
if (ini_get('safe_mode')) {
$result = mb_send_mail($mailTo, '<Info-RabbitMail> '.$mailSubject,$body,
$header);
} else {
$result = mb_send_mail($mailTo, '<Info-RabbitMail> '.$mailSubject,$body,
$header,'-f' . $returnMail);
}

//

if($result){
echo 'メッセージを送信致しました。';
echo'ご返信お待ち下さい';
}else{
echo '<p>システムエラー!!管理者にご連絡下さい。</p>';
}

?>

</body>
</html>


PHP-users メーリングリストの案内