ノリブログ?

メール送信する際にタイトルが文字化け(mb_send_mail)

カテゴリー:PHP

メールの送信を行うプログラムでmb_send_mailによる多重エンコードが原因で文字化けが発生したのでそのときの解決方法をのせておきます。
ソースは以下のようなものでした

$subject = "タイトル日本語";
$subject = mb_encode_mimeheader(mb_convert_encoding($subject, "JIS", "EUC-JP"), "JIS");
$header .="Content-Type: text/plain; charset=\"ISO-2022-JP\"\n";
mb_language("Japanese");
mb_send_mail("address",$subject, mb_convert_encoding("本文", "JIS", "EUC-JP"), $header);
このソースで2行目でタイトルをメール送信用にエンコードしてますが、mb_send_mailは元からsubjectをmime,base64エンコードするように実装されているため、上記のソースでは多重エンコードされていたようです。
なのでmb_send_mail関数をmail関数に変更して多重エンコードを避けると問題は解決しました。

なおメーリングリストにmb_send_mailにはパッチがあたってないバージョンではバグが存在しているとの情報がありました(下記URL参照)
http://ns1.php.gr.jp/pipermail/php-users/2005-November/028156.html

関連記事

Track Back URL

name: nori URL:

その後、同じサーバでmb_send_mailを使っても送信できるようになりました。
これはOS(CentOS)のアップデートを定期的にしていたため、PHPがアップデートされてバグが修正されたのだと思います。
ちなみに送信に成功したコードは以下のとおりです。

mb_language(\\\'Japanese\\\');
mb_internal_encoding(\\\'UTF-8\\\');
$header = \\\"Content-Type: text/plain;charset=ISO-2022-JP\\\";
$message = mb_convert_encoding($message, \\\"JIS\\\", \\\"UTF-8\\\");
mb_send_mail(\\\"$mailaddress\\\", $subject, $message, \\\"$header\\\");


ちなみにPHPのVersionは4.3.9でした。
なおCentOS用の
・php-4.3.9-3.9
・php-mbstring-4.3.9-3.9
が入っています。

2007-06-09 20:34:44

name
E-mail(省略可)
URL(省略可)
コメント