WordPress 2.2.3 のコメント通知メールは、本体で使用している文字コードと同じもので送られてきます。ウチの場合は UTF-8 なので、通常のメーラ ((Gmail とか Becky!2 とか。今は Google Apss にメールはお任せしてるので、Gmail 一本です。)) での内容確認は問題ないのですが、携帯電話に転送すると UTF-8 が利用できず、化け化けになってしまうのを何とかしたいと思っていました。
ということで、検索。 WordPress 2.2.3のコメント通知メールをISO-2022-JPに | 老眼palm というエントリを発見し、そのパッチを適用してみたところ、件名および本文の文字化けは解消。
件名の方は、時折一部が化ける現象が発生していたのですが、メールの件名の文字化け防止パッチの実証プラグイン « iDeasilo を導入することで、それも解消。数件テストしてみた感じでは、件名の化けも起きていないようです。
で、気づいたのが差出人 From: フィールドは化けたままだということ。なので、さらにちょちょいと1行書き換えてテストしたら化けなかったのでこれでいいか、と。
パッチ
./wp-includes/pluggable.php
に対するパッチは、以下。老眼palm のものとほぼ同じですが、$phpmailer->FromName
についても、mb_encode_mimeheader
を通してみました。
$ diff -u pluggable.php.bak pluggable.php --- pluggable.php.bak 2007-09-08 14:06:51.000000000 +0900 +++ pluggable.php 2007-09-20 00:19:33.000000000 +0900 @@ -160,6 +160,8 @@ function wp_mail($to, $subject, $message, $headers = '') { global $phpmailer; + mb_internal_encoding("UTF-8"); + if ( !is_object( $phpmailer ) ) { require_once(ABSPATH . WPINC . '/class-phpmailer.php'); require_once(ABSPATH . WPINC . '/class-smtp.php'); @@ -185,8 +187,12 @@ $phpmailer->FromName = "WordPress"; $phpmailer->AddAddress("$to", ""); - $phpmailer->Subject = $subject; - $phpmailer->Body = $message; +// $phpmailer->Subject = $subject; +// $phpmailer->Body = $message; + $phpmailer->CharSet = "ISO-2022-JP"; + $phpmailer->Encoding = "7bit"; + $phpmailer->Subject = mb_encode_mimeheader($subject, "ISO-2022-JP", "B", "\n"); + $phpmailer->Body = mb_convert_encoding($message, "ISO-2022-JP", "UTF-8"); $phpmailer->IsHTML(false); $phpmailer->IsMail(); // set mailer to use php mail() @@ -197,14 +203,16 @@ $header = explode( ":", $line ); switch ( trim( $header[0] ) ) { case "From": + $from = trim( str_replace( '"', '', $header[1] ) ); if ( strpos( $from, '<' ) ) { - $phpmailer->FromName = str_replace( '"', '', substr( $header[1], 0, strpos( $header[1], '<' ) - 1 ) ); + $phpmailer->FromName = mb_encode_mimeheader(str_replace( '"', '', substr( $header[1], 0, strpos( $header[1], '<' ) - 1 ) ), "ISO-2022-JP", "B", "\n"); $from = trim( substr( $from, strpos( $from, '<' ) + 1 ) ); $from = str_replace( '>', '', $from ); } else { $phpmailer->FromName = $from; } + $phpmailer->From = trim( $from ); break; default:
コメント
コメント一覧 (4件)
WordPress 2.3用コメント通知メール文字コード変更プラグイン…
WordPress 2.2.3でコメント通知メールの文字コードをISO-2022-JPにするパッチを書いた。WordPress 2.3でも同じことをしようとwp-includes/pluggable.phpのコードを眺めていたら、なんかやたらにapply_filters….
WP Multibyte Patch で WordPress 2.3 のマルチバイト文字関係の不具合を修正する…
WordPress 2.2.3 のコメント通知メールの文字コードを変更する で書いたように、本家の WordPress では、日本語を扱おうとすると一部文字化けしたりして修正・パッチが必要だったりします。
….
WordPressでコメント通知メールの文字化けの修正方法
https://www.u-1.net/2007/09/20/939/trackback/
(ただの私的メモっス)
このブログはWordPressを利用しており、コメント投稿があるとメールでお知らせしてくれるように設定してありま…
[…] WordPress 2.2.3 のコメント通知メールの文字コードを変更する | MOMENTS Annotated […]