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で出力したかったけど、調べるのが面倒だったので、このまま。最後にエンコードしてますが、役に立ってません。