• ベストアンサー
  • すぐに回答を!

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

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数888
  • ありがとう数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()メソッドのマニュアルになります。 いかがでしょうか。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • 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
  • 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
  • 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
  • PHPでmb_send_mail()関数を使っときの件名について

    PHPでmb_send_mail()関数を使っときの件名について mb_send_mail()でメールの送信はできるのですが、件名(Subject)を日本語にすると8文字以上送信すると送信エラーが起こります。同じプログラムをLinuxでやるとうまくいきます。プログラムは以下のようにしています。(mail()関数を使うとこのような問題は起こりませんでした。) mb_language('Japanese'); $subject='メールテスト'; $subject=mb_convert_encoding($subject,'ISO-2022-JP','UTF-8'); $message='Webメールのテストです。'; $message=mb_convert_encoding($message,'ISO-2022-JP','UTF-8'); $head='私から送信されました。<****@****.net>'; $head=mb_convert_encoding($head, 'ISO-2022-JP', 'UTF-8'); $head=mb_encode_mimeHeader($head,'ISO-2022-JP','B'); if(mb_send_mail('****@****.com',$subject,$message,'From:'.$head)){ echo 'おくったよ。<br>'; } else{ echo 'おくれない。'; }  件名の全角での文字数を増やす方法があったら教えてください。  よろしくお願いいたします。 <システム環境>  Windows7(64Bit)  Apache2.2  PHP5.3.2

    • ベストアンサー
    • PHP
  • PEAR::Mailでエンコードの指定はどうすれば

     PEAR::Mailを使ったメールフォームを作りました。  一般的なUTF-8ではなく、事情があってISO-2022-JP-MSに変換して送ってるもんですから、メーラーによっては文字化けしてしまうようです。  で、メールのヘッダで文字コードを指定してやれば上手くいくみたいな話を教えていただきまして、その方法を探っております。  PHPで作ってるんですが、PHPに用意されてる関mail関数だと参考になるサイトが見つかるんですが、PEAR::Mailでのヘッダで指定する方法がいまいちみつからず、困っている次第です。  そもそもISO-2022-JP-MS自体が特殊なようで、これをこのまま指定しても良いものなのかとか。  shift-jisとして指定する?  その辺も含めてお分かりになる方、よろしくお願いいたします。

    • 締切済み
    • 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
  • 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
  • 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で外部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
  • メールのFromに半角ピリオドが入るとエラーが・・・

    PEARのメール送信について教えてください。 現在PEARのMailと、mime.phpを使用してメール送信をするプログラムを組んでいるのですが、エンコードの仕方が悪いのかメールのFromに半角ピリオド、半角カンマなどが入るとエラーが出てしまいます。 以下がそのコードの主要部分ですが、対応策がありましたらご教授ください。よろしくお願いいたします。 --------------------------------------------------------- //ヘッダーのFromエンコード(問題の部分?) $headers['From'] = mb_encode_mimeheader(mb_convert_encoding( $mail_from_name , "ISO-2022-JP", "EUC-JP"))."<".$mail_from.">"; $objMail =& Mail::factory('sendmail'); $original = mb_internal_encoding(); $headers['Subject'] = mb_convert_encoding( $sbj , "ISO-2022-JP" , "EUC-JP" ); mb_internal_encoding("ISO-2022-JP"); $headers['Subject'] = mb_encode_mimeheader($headers['Subject'],"ISO-2022-JP"); mb_internal_encoding($original); $crlf = "\n"; $mime =& new Mail_mime($crlf); $mime->setHTMLBody($body); $build_param = array( "html_charset" => "EUC-JP", "text_charset" => "ISO-2022-JP", "head_charset" => "ISO-2022-JP", ); $body = $mime->get( $build_param ); $headers = $mime->headers($headers); $objMail =& Mail::factory('sendmail'); $result = $objMail->send( $mail_to , $headers , $body );

    • 締切済み
    • PHP