• []
  • []
  •  
  • del.icio.us 
  •  
  • Yahoo!֥åޡϿ 

メール分解 PEAR :: Mail_mimeDecode Mail_Mimeパッケージ

PHP 求人 募集 Symfony CakePHP Smarty Ruby on Rails

PEAR :: Mail_mimeDecode

PEAR :: Mail_mimeDecode 概要

メールを送信するとき日本語が入っていると、
アドレス、タイトル、本文などを別々にJIS(ISO-2022-JP)変換しなければなりません。
それは少し面倒だし処理数も増えちゃうので、
すでに変換されたメールを分解してから、
各パラメータをセットする方が楽です。

そこで使うのがPEAR::Mail_MimeDecodeです。
最近PEAR::Mail_Mimeから独立して、
別パッケージになりました。

# pear install --onlyreqdeps -f mail_mimedecode

PEARのバージョンは1.6以上必要そうです。

# pear upgrade pear

PEAR :: Mail_mimeDecode サンプル

使い方はこんな感じ。

 <?
  require_once("Mail.php");             // メール
  require_once("Mail/mimeDecode.php");      // PEAR MimeDecode
 
  $sender = "dozo@matrix.jp";
  $from   = $sender;
  $to     = "dozo@rgr.jp";
  $subject = "日本語のタイトル。結構長めに設定してmime変換されているかチェック。";
 
  $mail_text = <<<EOS
 From: $from 
 Sender: $sender 
 To: $to 
 Subject: $subject 
 Content-Type: text/plain; charset="ISO-2022-JP"
 Content-Transfer-Encoding: 7bit
 
 実際はテンプレートエンジンとかを利用して、
 メールの本文も作成します。
 今回はサンプルなので、
 こんな感じにしてます。
 EOS;
 
  // JIS変換
  $mail_text = mb_convert_encoding( $mail_text, "ISO-2022-JP", "auto" );
 
  // メールを分解
  $decoder = & new Mail_mimeDecode( $mail_text ); // MIME分解
  $parts = $decoder->getSendArray();  // それぞれのパーツを格納
  list( $recipients, $headers, $body ) = $parts; // 各パーツを配列に格納
  // サブジェクトの処理
  $original = mb_internal_encoding();
  mb_internal_encoding( "ISO-2022-JP" );
  $subject = mb_encode_mimeheader( $headers['Subject'] ) ;
  mb_internal_encoding( $original );
 
  // SMTPサーバ
  $mail_options = array(
   'host'    => 'dozo.rgr.jp', // ホスト名
   'port'    => 25,      // ポート番号
   'auth'    => true,      // 認証必要?
   'username'  => "dozo",    // ユーザー名
   'password'  => "pass",    // パスワード
   'localhost' => 'localhost',   // HELO名
  );
 
  // Create the mail object using the Mail::factory method
  $mail_object =& Mail::factory("SMTP",$mail_options);  // SMTP送信準備
 
  $mail_object->send($recipients, $headers, $body);
 
 ?>

ケータイだと日本語処理が増えます。

 DoCoMoの絵文字はmb_convert_encodingが使えない。
 Vodafone3G用に半角カタカナを全角にする処理が必要。

ケータイメールに関して言うと、

 Sender句はVodafoneにメールを送信するときに必要。\\
 メールからtoを取り出して端末判別のキーにする処理が必要。\\

3キャリア対応も楽じゃないねぇ。

欠点

 添付ファイル名が日本語だと文字化けすることがある
 分解された結果がTree状の配列で返ってくるので処理するのに少し工夫が必要。

-& new Mail_mimeDecode( $mailtext ) → & new Mail_mimeDecode( $mail_text ) ですね。 – あらやだ {2005-10-06 11:49:12 (木)};
-ほんとだ。。。 – dozo {2005-10-06 23:00:00 (木)};
-サブジェクトの処理 の部分はなにか意味があるのでしょうか。$subjectがその後使われてないようだし – c {2007-03-16 23:44:25 (金)};
-今更ながら思うんですが、あんまり意味無いことやってますね、これ。。。 – dozo {2007-04-06 23:43:41 (金)};
-$mail_object→send($recipients, $headers, $body);だと送れませんけど、どうしてでしょう? – デコピン {2007-05-17 20:57:05 (木)};
-どうしてでしょうね。 – dozo


pear/mail/mimedecode.txt · 最終更新: 2007/06/11 15:39 by dozo