老眼palm

老眼だけど、ぢっと掌を見る プロフィール RSS

2007年 7月 6日のアーカイブ

WordPress ME 2.2.1のコメント通知メールを無理矢理なんとかする

2007/9/17 追記:下記のパッチでは修正が足りずうまくいきません。class-phpmailer.phpも修正する必要があります。本家版2.2.3で試したパッチを別記事に書きましたので、そちらを参考にしてください。(そっちはpluggable.phpの修正のみでいけるはずです。)

WordPress ME 2.2.1でコメント通知メールの文字コードがおかしい件、どうせ自分のブログなんだし、適当に決め打ちのコードでなんとかしちゃえばいいや、というノリで無理矢理なんとかしてしまった。(コードをきれいに載せることができていないので、必要な人はソースを見てください。)

--- pluggable.php.save  2007-07-06 21:28:51.000000000 +0900
+++ pluggable.php       2007-07-06 21:36:28.000000000 +0900
@@ -186,6 +186,9 @@
        $phpmailer->FromName = "WordPress";
        $phpmailer->AddAddress("$to", "");
        $phpmailer->Subject = wpj_mimeheader($subject);
+       if (function_exists('mb_convert_encoding')) {
+               $message = mb_convert_encoding($message, "ISO-2022-JP", "UTF-8");
+       }
        $phpmailer->Body    = $message;
        $phpmailer->IsHTML(false);
        $phpmailer->IsMail(); // set mailer to use php mail()
@@ -443,7 +446,7 @@

        $message_headers = "MIME-Version: 1.0\n"
                . "$from\n"
-               . "Content-Type: text/plain; charset="" . get_option('blog_charset') . ""\n";
+               . "Content-Type: text/plain; charset=iso-2022-jp\n";

        if ( isset($reply_to) )
                $message_headers .= $reply_to . "\n";
--- functions.php.save  2007-07-01 16:32:47.000000000 +0900
+++ functions.php       2007-07-05 22:26:23.000000000 +0900
@@ -1528,7 +1528,7 @@

 function wpj_mimeheader($mine) {
        if(function_exists('mb_encode_mimeheader')) {
-               return mb_encode_mimeheader($mine);
+               return mb_encode_mimeheader($mine, "ISO-2022-JP", "B", "\n");
        } else {
                return $mine;
        }

要するに、

  1. ヘッダには決め打ちでcharset=iso-2022-jpを入れる。ASCIIのみのメールでこれが入っていても別に実害ないし、まー他のコードでコメント付けてこられてもどうせ読めないから。
  2. コメント本文もmb_convert_encodingでUTF-8からiso-2022-jpに決め打ちでコード変換。
  3. メールヘッダもmb_encode_mimeheaderでiso-2022-jpに決め打ちでコード変換する。

無茶苦茶なやり方だが、自分のサイトの勝手でしょ、とか開きなおってる次第(笑)。

明日から、土日月と会社の研修。折角の週末、WordPressのコード眺めたりしてまったり過ごしたかったが、かなわず。ちょっと残念。(だからこんな手抜きコードを仕込んだというわけではなく、単に面倒だからである。)