PEAR の Mail/Queue.php で文字化け。
タイトル通り、文字化けが解消できません。
いつも他の事は全てUTF-8 でやっているのですが
メールは [ISO-2022-JP] を使わないといけないみたいですね。
PEAR を使わないで [mb_send_mail] を使っていた時は何もトラブルは無かったのですが。
以下、長いですが宜しくお願いいたします。
CENTOS 5
Mysql 5.0.45 MySQL の文字セット: UTF-8 Unicode (utf8)
PHP 5.0
PEAR 以下の通りで運用しています。
DB 1.7.13 stable
Mail 1.1.14 stable
Mail_Mime 1.5.2 stable
Mail_Queue 1.2.2 stable
Mail_mimeDecode 1.5.0 stable
PEAR 1.4.9 stable
メールを複数人に送る為に [Mail/Queue.php] を
利用しようとしています。
(ほぼ、サンプルで公開しているものをそのまま使わせてもらっています。)
http://php.atpedia.jp/pear/ja/package.mail.mail-queue.mail-queue.tutorial.html
メールを作成するPHPは、[UTF-8] にしています。
メールをデータベースに入れるときに [ISO-2022-JP] に変換しています。
取り出して送信する時にも変換しなくてはいけないのか?
初めてPEARを使うのもあって、動作自体が良く分からない為
文字化けに対処できずにいます。
お分かりになる方、宜しくお願いいたします。
キューに入力前に本文作成用ページ
このページは、UTF-8 です。
$subject $message 送信対象のID をこのページから下のページに [POST] で送信
キューに入力用ページ *サンプルを元に
<?php
mb_language("Ja");
mb_internal_encoding("utf8");
include './config.php';
/* db_options と mail_options をここで使用する */
$mail_queue =& new Mail_Queue($db_options, $mail_options);
/*-----PEARでデータベースに接続しているが理解できないので、再度接続。。 ココから---------*/
require_once("dbini.php");
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$selectdb = mysql_select_db($DBNAME, $con);
mysql_query('set character set utf8');
/*----------------------------------データベースに接続 ココまで----------------------------*/
/*----------------------------------この変換のタイミングがおかしいのでしょうか?-----------------*/
$subject = mb_encode_mimeheader($subject,'ISO-2022-JP');
$message = mb_convert_encoding($message,'ISO-2022-JP','UTF-8');
/*----------------------------------ここまで変換-----------------------------*/
$sql = "SELECT * FROM member WHERE **************";
$rst = mysql_query($sql, $con);
//件数を数える
$recmax = mysql_num_rows($rst);
//ループでID、名前、メールアドレスを取り出す
while($rows = mysql_fetch_array($rst)){
$id = $rows["customerID"];
$name = $rows["name"];
$mail = $rows["mail"];
$from = '***@*******.net';
$to = $mail;
$hdrs = array( 'From' => $from,
'To' => $to,
'Subject' => $subject );
/* 有効なメールを構築するため、Mail_mime() を使用する */
$mime =& new Mail_mime();
//文字コード変換する
$mime->setTXTBody($message);
$body = $mime->get();
$hdrs = $mime->headers($hdrs);
/* メッセージをキューに追加する */
$mail_queue->put( $from, $to, $hdrs, $body );
}
$con = mysql_close($con);
?>
送信用ファイル *サンプルそのまま
<?php
include './config.php';
/* スクリプトがコールされるたびに何通のメールを送信するか */
$max_amount_mails = 50;
/* 設定から db_options と mail_options を再び使用する */
$mail_queue =& new Mail_Queue($db_options, $mail_options);
/* メッセージを実際に送信する */
$mail_queue->sendMailsInQueue($max_amount_mails);
?>