MySQLにてselectした結果をメールに添付して送信する
タイトル通りMySQLにてselectした結果をメールに添付して送信します。
mb_send_mailでも可能ですが、色々面倒なので、phpmailerを利用して行います。
流れとしては、クエリを発行して、/tmp内にファイルとして出力し、それをphpmailerで添付してメール送信を行います。
最終的に出力したファイルは削除してます。
<?php /* MySQLにてselectした結果をメールに添付して送信する */ // Mysql 接続情報 define('DB_HOST' , 'localhost'); define('DB_NAME' , '********'); define('DB_USER' , '********'); define('DB_PASS' , '********'); // Mysql CONNECT $conn = mysql_connect(DB_HOST,DB_USER,DB_PASS); if($conn == FALSE){ print("DB Connect Failed"); exit; } mysql_selectdb(DB_NAME); mysql_query('SET NAMES utf8;'); // phpmailerを読み込む require("./phpmailer/class.phpmailer.php"); // クエリ結果の保存先 $date = date('YmdHi'); $filename = "/tmp/".$date.".csv"; // メールタイトル $subject = "クエリの結果"; // メール本文 $body = "クエリの結果データを添付します"; // 差出人のメールアドレス $from = "user@domain.com"; // 宛先のメールアドレス $to = "user@domain.com"; // selectした結果をファイルに保存 $str = "select * from test_tbl INTO OUTFILE '$filename' FIELDS TERMINATED BY ',' "; $res = mysql_query($str); // メールで日本語を使用するための設定 mb_language("ja"); mb_internal_encoding("UTF-8"); // メール作成 $mail = new PHPMailer(); $mail->CharSet = "iso-2022-jp"; $mail->Encoding = "7bit"; $mail->AddAddress($to); $mail->From = $from; $mail->FromName = mb_encode_mimeheader(mb_convert_encoding($fromname,"JIS","UTF-8")); $mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8")); $mail->Body = mb_convert_encoding($body,"JIS","UTF-8"); // 添付ファイル追加 $mail->AddAttachment(mb_convert_encoding($filename,"JIS","UTF-8")); $mail->Send(); // メール送信 // tmpファイル削除 $cmd = "rm -f ".$filename; exec($cmd); ?>
selectした結果がUTF-8なので、添付ファイルもUTF-8で出力されてます。
本来は添付ファイルをSJISで出力したかったけど、調べるのが面倒だったので、このまま。最後にエンコードしてますが、役に立ってません。
ディスカッション
コメント一覧
まだ、コメントがありません