Top / PEAR / Mail / Mail_MimeDecode


 #setlinebreak(on)
 * メール分解 PEAR :: Mail_mimeDecode Mail_Mimeパッケージ[#x6adb338]
 
 こちらへ移動
 http://dozo.matrix.jp/pear/mail/mimedecode
 
 #htmlinsert(googleAdsense.html)
 #ref(http://dozo.rgr.jp/img/img20_file.png,right,nolink,around,PHP::PEAR)
 
 マルチパートメールも綺麗に分解してくれます。
 
 (ノ・・)ン。。。。。。(((●コロコロッ
 
 メールを送信するとき日本語が入っていると、
 アドレス、タイトル、本文などを別々にJIS(ISO-2022-JP)変換しなければなりません。
 それは少し面倒だし処理数も増えちゃうので、
 すでに変換されたメールを分解してから、
 各パラメータをセットする方が楽です。
 そこで使うのが[[PEAR :: Mail_MimeDecode>http://pear.php.net/manual/en/package.mail.mail-mimedecode.mail-mimedecode.php]]です。
 [[PEAR :: Mail_Mime>http://pear.php.net/package/Mail_Mime]]のサブパッケージなので、
 [[PEAR :: Mail_Mime>http://pear.php.net/package/Mail_Mime]]をインストールすれば一緒について来ます。
  # pear install Mail_Mime
 
 使い方はこんな感じ。
 
  <?
   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が使えない。
  (藤本版PHP4のi18nなら・・・あるいは・・・)
  Vodafone3G用に半角カタカナを全角にする処理が必要。
 
 ケータイメールに関して言うと、
  Sender句はVodafoneにメールを送信するときに必要。
  メールからtoを取り出して端末判別のキーにする処理が必要。
 
 3キャリア対応も楽じゃないねぇ。
 
 
 
 欠点
  添付ファイル名が日本語だと文字化けすることがある
  分解された結果がTree状の配列で返ってくるので処理するのに少し工夫が必要。
 -& new Mail_mimeDecode( $mailtext ) → & new Mail_mimeDecode( $mail_text ) ですね。 -- [[あらやだ]] &new{2005-10-06 11:49:12 (木)};
 -ほんとだ。。。 -- [[dozo]] &new{2005-10-06 23:00:00 (木)};
 -サブジェクトの処理 の部分はなにか意味があるのでしょうか。$subjectがその後使われてないようだし -- [[c]] &new{2007-03-16 23:44:25 (金)};
 -今更ながら思うんですが、あんまり意味無いことやってますね、これ。。。 -- [[dozo]] &new{2007-04-06 23:43:41 (金)};
 -$mail_object->send($recipients, $headers, $body);だと送れませんけど、どうしてでしょう? -- [[デコピン]] &new{2007-05-17 20:57:05 (木)};
 
 #comment
 


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Third Project
証券会社ランキング比較