Thursday, September 07, 2006

9/6 続・メールなど

イロイロと文献を漁ったり、調査を進めたが、バージョン特有の
バグ等々の問題もあって、バッチリ「これだっ!」という内容が
得られない状況だった。まーとにかく、現状までの内容を
箇条書きにしておくと、

・Subject を mb_encode_mimeheader でエンコード後、mb_send_mail
でメール送信すると、文字化けする。とにかくこの組み合わせだと、かならず
下のような文字化けが出るらしい。(PHP4.4.2 で確認)
文字化けの種類は、「=?ISO-2022-JP?B?PyA/IFx・・・」

・Subject を mb_convert_encoding で JIS 変換後、mb_encode_mimeheader
でエンコードし、mail でメール送信すると、長い件名が文字化けする。
(PHP4.3.11 で確認)
文字化けの種類は、「123456789#0#1#2#3#4#・・・」

・Subject を mb_convert_encoding で JIS 変換後、36バイトで分割して
mb_encode_mimeheader でエンコード後、mail でメール送信すると、
機種依存文字が「?」に文字化け。(PHP4.3.11 で確認)
文字化けの種類は、「hoge ? ? \n <> ? お ? ?・・・」

というわけで、最終的に下のように落ち着いた。
mb_convert_encoding で JIS 変換 → base64_encode で MIME 変換 →
1行を76バイト未満(RFC2047)に分割 ("=?ISO-2022-JP?B?" やメールヘッダ
フィールドを含むバイト数) → mail でメール送信
一応、この内容であれば PHP4.3.11もPHP4.4.2でも、機種依存文字を含めて
問題なく送信できることが確認できた。

ん~しかし、mb_encode_mimeheaderやらmb_send_mailやら、マルチバイト
関連の関数は要注意だなーと痛感。

以下参考文献
・http://q.hatena.ne.jp/1117708187
・http://aki.adam.ne.jp/scripts/question/detail.php?rt=1392&id=1392

No comments: