PEARのMail/Queue.phpで文字化け

このQ&Aのポイント
  • PEARのMail/Queue.phpで文字化けが解消できずにいます。
  • メールを作成するPHPは、UTF-8にしていますが、データベースに入れるときにISO-2022-JPに変換しています。
  • 初めてPEARを使うため、動作がよく分からず、文字化けに対処できません。お分かりになる方、ご教授願います。
回答を見る
  • ベストアンサー

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); ?>

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

メッセージをキューに追加する前の部分の記述ですが、 こちらは、Mail_mimeクラスとのことで、 恐らく、通常の文字列から有効なmimeヘッダを作成するものと思います。 それに加えてその前段階で、mb_encode_mimeheaderを行っておられる様子ですので、まずはそちらをはずしたほうがよいかと思います。(多重でエンコードを行ってる) その上で、$message/$subjectはUTF-8からISO-2022-JPへ変換(中ほどの$message=mb_convert_encodingはそのままで、$subjectをmb_encode_mimeheaderからmb_convert_encodingへ書き換え) $mime->get() の部分を、 $param = array(); $param["text_charset"] = 'ISO-2022-JP'; $mime->get($param) と変更し、getに引数を与える と、これで文字化けは解消されそうです。 http://peardoc.xole.net/package.mail.mail-mime.get.html こちらが、Mail_mime::get()メソッドのマニュアルになります。 いかがでしょうか。

kiyomidesuyo
質問者

お礼

ありがとうございました。 何事も無かったかのように、ピシッと動きましたm(__)m とりあえずはソースまで書いていただいたので、そのまま書き換えて うまく動く事を確認後、教えていただいたマニュアルとソースを見ています。 本当にありがとうございました。

関連するQ&A

  • PEAR::DBの利用について

    先日、LAMPのインストールが完了しました。 そこで、PHPからMySQLを操作するにPHPの拡張モジュールであるPEAR::DBを利用しようと考えました。 #sudo apt-get install pear とし、pearをインストールしたあとで、 #sudo pear install DB としてDBモジュールをインストールしました。 #sudo pear list Installed packages, channel pear.php.net: ========================================= Package Version State Archive_Tar 1.3.3 stable Auth_SASL 1.0.3 stable Console_Getopt 1.2.3 stable DB 1.7.13 stable Log 1.11.6 stable Mail 1.1.14 stable Net_SMTP 1.3.4 stable Net_Socket 1.0.9 stable PEAR 1.9.0 stable Structures_Graph 1.0.3 stable XML_Util 1.2.1 stable 上記がインストールされているものです。 しかし、MySQLにどうしても接続することができません。 /* require_once("DB.php");   // 接続設定  $dbtype = "mysql";   $sv = "localhost";   $dbname = "sampledb";   $user = "root";   $pass = "*******";   // データベースに接続する   $dsn = "$dbtype://$user:$pass@$sv/$dbname";   $conn = DB::connect($dsn);   if (DB::isError($conn)) {   die("接続エラー"); } */ とくに必要な設定とかはあるのでしょうか? php.iniの設定をしなければならないなど。windowsの場合、インクルードパスにpearのインストール先絶対パスを追記したのを覚えています。 どなたか、アドバイスお願い致します。よろしくお願い致します。 環境やバージョン os Linux ubuntu 2.6.31-16-generic apache 2.2.12-1ubuntu2.1 mysql-server 5.1.37-1ubuntu5 php 5.2.10-2ubuntu6.3

    • 締切済み
    • PHP
  • pear_info.phpも表示できません

    PCをサーバーにしてPHPの練習をしている初心者です。最近PEARを入れてDBパッケージをインストールしたのですが、機能しなくて困っています。試しにpear_info.phpを作ってブラウザで開くと下記の警告がでました。 ---------------------------------------------- <?php ini_set ("display_errors", "1"); error_reporting(E_ALL); require_once ("PEAR/Info.php"); //←line 5 $info = new PEAR_Info(); $info->show(); ?>  Warning: require_once(PEAR/Info.php) [function.require-once]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\pear_info.php on line 5 Fatal error: require_once() [function.require]: Failed opening required 'PEAR/Info.php' (include_path='.;c:\php\includes;C\php\PEAR;') in C:\Program Files\Apache Group\Apache2\htdocs\pear_info.php on line 5 (コピーペーストすると\になりましたが、ブラウザの表示では/の逆向きです) ---------------------------------------------- DB::connectでも同様の警告が出ます。PHPとMySQLだけだと問題なく動くのでPEARのパスを確認したのですか、原因が分かりません。助言いただけるとありがたいです。 php.iniのパス  ;***** Added by go-pear  include_path=".;c:\php\includes;C\php\PEAR;"  ;***** phpinfoのinclude_path  .;c:\php\includes;C\php\PEAR;  (コピーペーストすると\になりましたが、ブラウザの表示では/の逆向きです) コマンドプロンプトから "C:\PHP>pear list" での表示  Archive_tar  1.3.2  stable  Console_Getopt  1.2.3  stable  DB  1.7.11 stable  MDB2  2.4.1  stable  PEAR  1.6.0  stable  Pear_info  1.6.1  stable  Structure_Graph  1.0.2  stable PCの環境  Windows XP  Apache  2.0.59  PHP 5.2.3  MySQL 5.0.41

    • ベストアンサー
    • PHP
  • PHPでHTMLメールを送信、文字化けします。

    Mail/mime.php を利用してHTMLメールの送信をしようとしています。 試行錯誤をしているのですが、どうしても文字化けしてしまいます。 データベースから取得したデータをHTMLメールにして送信したいのですが、 このままでは、タイトルはきちんと送れていますが、本分が文字化けします。 何か抜けたり、設定が変だったりはありますでしょうか? ご教授お願いいたします。 以下にソースを記しています。 データベースとPHPのソースはどちらも【UTF-8】です。 /*-------------------ここから データベースより取得----------*/ $recipients //送信先 $sender //送信元 $Subject //タイトル $body //本文 /*--------------------ここまでデータベースより取得--------------*/ mb_language("japanese"); mb_internal_encoding("UTF-8"); require_once("Mail.php"); require_once("Mail/mime.php"); $params = array( "host" => "自ドメイン", "port" => 587, "auth" => true, "username" => "送信元アカウント", "password" => "********" ); $mailObject = Mail::factory("smtp", $params); $mimeObject = new Mail_Mime("\n"); $mimeObject -> setHTMLBody($body); $bodyParam = array( "head_charset" => "ISO-2022-JP", "html_charset" => "Shift_Jis" ); $body = $mimeObject -> get($bodyParam); $addHeaders = array( "To" => "$recipients", "From" => "$sender", "Subject" => mb_encode_mimeheader("$Subject") ); $headers = $mimeObject -> headers($addHeaders); $mailObject -> send($recipients, $headers, $body);

    • ベストアンサー
    • PHP
  • PHPでPEARを使った認証について

    PHPでPEARを使った認証をテストしています。 モバイルサイトでも使えるものを・・・ということで見つけたdinolibというものをサンプルに利用しました。 dinolib:http://openlab.dino.co.jp/ サンプル:http://openlab.dino.co.jp/?key=%5B%5Bdinolib_sample%5D%5D dinolibとpear、postgresをインストールし動作確認をしたところ adduser()が見つからずユーザ追加が出来ませんでした。 エラー:Fatal error: Call to undefined function: adduser() in /usr/local/share/dinolib/lib/auth/Auth.php on line 862 pear listではAuthパッケージは見えます。 Installed packages, channel pear.php.net: ========================================= Package Version State Archive_Tar 1.3.1 stable Auth 1.2.3 stable Auth_HTTP 2.1.6 stable Console_Getopt 1.2 stable DB 1.7.6 stable HTML_Template_IT 1.1 stable Mail 1.1.9 stable Net_SMTP 1.2.7 stable Net_Socket 1.0.6 stable Net_UserAgent_Detect 2.0.1 stable PEAR 1.4.5 stable PHPUnit 1.3.2 stable XML_Parser 1.2.7 stable XML_RPC 1.4.4 stable php.iniのinclude_pathにはpear、Authなどは追加してあります。 このエラーが言っているadduser()とは何の事を言っているのでしょうか?

    • ベストアンサー
    • PHP
  • phpでmail()関数以外のやり方について

    PHPでmailを複数配信するのですが、 マニュアルサイト http://jp.php.net/manual/ja/ref.mail.php でmail()関数 を見ると 『mail() 関数は、大量のメールをループ内で送信するには 向いていないことに注意しましょう。』 とあります。 そして PEAR::Mail http://pear.php.net/package/Mail や PEAR::Mail_Queue http://pear.php.net/package/Mail_Mime を続けて紹介しているのですが ここからは英語なのでサッパリわかりません。 どなたかご教授願えませんか

    • ベストアンサー
    • PHP
  • PEARインストールについて(xampp

     こんにちは。 xamppを使いPHPの勉強をしております。 PEARインストールの段階で手が止まっており、他の質問を見ても解決せず困っております。 ・OSはWin xp(Home) ・これまでの手順  購入した本を元にPEARをインストールしようと致しましたが、うまく行かず。→購入した書籍のサイトでPEARインストールについて訂正があり、そちらも試したものの、上手くいきませんでした。  また、他のインストール方法を解説しているサイトを見てもなかなかうまくいきませんでしたが、とあるWebサイトの方法を試したところ、コマンドプロンプトにそれまでと違う表示が出てきて、いくつか段階が進みました。 【質問点】 次の結果は、インストールが無事に出来ているのでしょうか??? C:\Documents and Settings\Owner>cd C:\xampp\php C:\xampp\php>pear install MDB2 pear/MDB2 is already installed and is the same as the released version 2.4.1 install failed C:\xampp\php>pear install MDB2#mysql Skipping package "pear/MDB2", already installed as version 2.4.1 No valid packages found install failed C:\xampp\php>pear list INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET: ========================================= PACKAGE VERSION STATE Archive_Tar 1.3.3 stable Console_Getargs 1.3.4 stable Console_Getopt 1.2.3 stable MDB2 2.4.1 stable MDB2_Driver_ibase 1.4.1 stable MDB2_Driver_mssql 1.2.1 stable MDB2_Driver_mysql 1.4.1 stable MDB2_Driver_mysqli 1.4.1 stable MDB2_Driver_oci8 1.4.1 stable MDB2_Driver_pgsql 1.4.1 stable MDB2_Driver_sqlite 1.4.1 stable Mail 1.1.14 stable Mail_Mime 1.5.2 stable Mail_mimeDecode 1.5.0 stable Net_SMTP 1.3.3 stable Net_Socket 1.0.9 stable PEAR 1.8.1 stable PEAR_Info 1.9.2 stable Structures_Graph 1.0.2 stable XML_Util 1.2.1 stable 以上です。 特に3つ目のコマンド(pear install MDB2#mysql)の結果が「上手くいってないのでは???」と首を傾げている状態です。 どなたかお分かりになる方がおられましたら、ご回答を頂けますようお願い致します。

    • ベストアンサー
    • PHP
  • PHPとMySQLで文字化けします

    <?php $con=mysql_connect("localhost","oxwar2","chono3"); $db=mysql_select_db("oxwar2",$con); $query="insert into japan(id,title,price)values(1,'絵本',1000)"; $result=mysql_query($query,$con); if($result){ print "OK"; } ?> として、実行すると上手くいきますが、phpMyadminで見ますと、日本語の部分だけが文字化けしております。 これを直すにはどうしたらよいのでしょうか。 文字コードはUTF8で作りました。色々試しても同じです。 どのようにしたらよいのでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PEARのパッケージmail_mimeのインストールについて

    初めて質問させていただきます。 色々検索をしましたがわからなかったのでよろしくお願いいたします。 さくらのレンタルサーバー(スタンダード)を使用しております。 PHP Version 5.2.5でPRAEを使用するためインストールをしました。 パッケージのMail_Mimeを使用するためインストール(pear install mail_mime) をしたら下記エラーが出て失敗していまいます。 %pear install mail_mime pear/Mail_Mime requires PEAR Installer (version >= 1.6.0), installed version is 1.5.4 pear/Mail_mimeDecode requires PEAR Installer (version >= 1.6.0), installed versi on is 1.5.4 pear/Mail_mimeDecode requires package "pear/Mail_Mime" (version >= 1.4.0, exclud ed versions: 1.4.0) No valid packages found install failed PEARのバージョンが古いのかと思いバージョンを調べました(下記)が PEARが1.6.2なので1.6.0よりもバージョンが新しいので 何がエラー要因かわかりません。 %pear list INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET: ========================================= PACKAGE VERSION STATE Archive_Tar 1.3.2 stable Auth 1.5.4 stable Auth_HTTP 2.1.6 stable Config 1.10.11 stable Console_Getopt 1.2.3 stable DB 1.7.13 stable HTTP_Request 1.4.2 stable MDB2 2.4.1 stable Mail 1.1.14 stable Net_SMTP 1.2.10 stable Net_Socket 1.0.8 stable Net_URL 1.0.15 stable PEAR 1.6.2 stable Pager 2.4.4 stable Structures_Graph 1.0.2 stable XML_Parser 1.2.8 stable XML_Serializer 0.18.0 beta XML_Util 1.1.4 stable ちなみに %pear config-show CONFIGURATION (CHANNEL PEAR.PHP.NET): ===================================== Auto-discover new Channels auto_discover <not set> Default Channel default_channel pear.php.net HTTP Proxy Server Address http_proxy <not set> PEAR server [DEPRECATED] master_server pear.php.net Default Channel Mirror preferred_mirror pear.php.net Remote Configuration File remote_config <not set> PEAR executables directory bin_dir /home/アカウント名/pear/bin PEAR documentation directory doc_dir /home/アカウント名/pear/docs PHP extension directory ext_dir /home/アカウント名/pear/ext PEAR directory php_dir /home/アカウント名/pear/php PEAR Installer cache directory cache_dir /home/アカウント名/pear/cache PEAR data directory data_dir /home/アカウント名/pear/data PEAR Installer download download_dir /home/アカウント名/pear/temp directory PHP CLI/CGI binary php_bin /usr/local/php-4.4.7/bin/php php.ini location php_ini <not set> PEAR Installer temp directory temp_dir /home/アカウント名/pear/temp PEAR test directory test_dir /home/アカウント名/pear/tests Cache TimeToLive cache_ttl 3600 Preferred Package State preferred_state stable Unix file mask umask 22 Debug Log Level verbose 1 PEAR password (for password <not set> maintainers) Signature Handling Program sig_bin /usr/local/bin/gpg Signature Key Directory sig_keydir /usr/local/php-4.4.7/etc/pearkey Signature Key Id sig_keyid <not set> Package Signature Type sig_type gpg PEAR username (for username <not set> maintainers) User Configuration File Filename /home/アカウント名/.pearrc System Configuration File Filename /usr/local/php-4.4.7/etc/pear.conf どなたかご教授願えないでしょうか? よろしくお願いいたします

    • 締切済み
    • PHP
  • PHPで外部SMTPサーバーを利用したメールの送信方法

    PHPで外部SMTPサーバーを利用したメールの送信方法を調べています。 過去の事例からPEARを使用すれば良いことが分かりPEARをインストールしたのですが、 実行すると「$smtp = Mail::factory("smtp", $params);」の所で、 「Fatal error: Class 'Mail' not found in C:\Inetpub\wwwroot\Mail.php on line 14」と なってしまいます。 PEARのインストール後はサーバーの再起動は行っております。 ※環境 OS:WindowsXP Pro SP3 WebServer:IIS PHP:Ver.5.2.6 ※PEARのインストール状態 C:\Documents and Settings\horie>C:\php\pear list PHP Warning: Module 'mbstring' already loaded in Unknown on line 0 INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET: ========================================= PACKAGE VERSION STATE Archive_Tar 1.3.2 stable Console_Getopt 1.2.3 stable PEAR 1.7.1 stable Structures_Graph 1.0.2 stable ※Mail.php <?php $params["host"] = "smtp.mail.yahoo.co.jp"; $params["auth"] = true; $params["username"] = "AAA-BBB"; $params["password"] = "9999"; $sender = "aaa**@yahoo.co.jp"; $recipient = "bbb**@yahoo.co.jp"; $subject = "TEST"; $subject = mb_convert_encoding($subject, "jis", "sjis"); $subject = mb_encode_mimeheader($subject, "jis"); $message = "テストメッセージ"; $message = mb_convert_encoding($message, "jis", "sjis"); require_once 'Mail.php'; $smtp = Mail::factory("smtp", $params); if (PEAR::isError($smtp)) die($smtp->getMessage()); $headers['From'] = $sender; $headers['Subject'] = $subject; $headers['MIME-Version'] = "1.0"; $headers['Content-Type'] = 'text/plain; charset="iso-2022-jp"'; $headers['Content-Transfer-Encoding'] = "8bit"; $headers['X-Mailer'] = "PHP PEAR/Mail(smtp)"; $error = $smtp->send($recipient, $headers, $message); if (PEAR::isError($error)) die($error->getMessage()); exit("メッセージを送信しました"); ?>

    • ベストアンサー
    • PHP
  • PEAR::MailでPEAR.php?

    Mailを使ってメールを送信したいのですが、エラーがでます。 Warning: require_once(PEAR.php) [function.require-once]: failed to open stream: この PEAR.php はどこで入手できるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう