こちらへ移動
http://dozo.matrix.jp/pear/mail/mimedecode
マルチパートメールも綺麗に分解してくれます。
(ノ・・)ン。。。。。。(((●コロコロッ
メールを送信するとき日本語が入っていると、
アドレス、タイトル、本文などを別々にJIS(ISO-2022-JP)変換しなければなりません。
それは少し面倒だし処理数も増えちゃうので、
すでに変換されたメールを分解してから、
各パラメータをセットする方が楽です。
そこで使うのがPEAR :: Mail_MimeDecodeです。
PEAR :: Mail_Mimeのサブパッケージなので、
PEAR :: 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状の配列で返ってくるので処理するのに少し工夫が必要。