Wordpress のマルチバイト文字対応メール投稿(3) を使い携帯電話から投稿すると、コメント書き込みのお知らせが Wordpress から送られてくる設定にしている場合に携帯電話にメールが送られてきます。
しかし、Wordpress から送られてくるメールの文字コードは UTF-8 で、一部のメーラーや携帯電話のメーラーでは JIS しか表示できないため、文字化けを起こします。
と、言うわけで、Wordpress からのお知らせメールが文字化けしてしまう方は、以下の修正を行うことで文字化けを防ぐことが可能です。が、しかし、ハードコーディングなので Wordpress をバージョンアップした場合などには再度同じ修正を行う必要があります。
wp-includes/class-phpmailer.php の以下の部分を修正して下さい。
//36行目付近 var $CharSet = "UTF-8"; //以下に修正 var $CharSet = "ISO-2022-JP"; //421行目付近 function MailSend($header, $body) { //次の行に以下を追加 $body = mb_convert_encoding($body, $this->CharSet, mb_internal_encoding());
解説
Wordpress でのメール送信機能は PHPMailer を利用されています。
ヘッダのエンコーディングは PHPMailer::CharSet で定義された文字コードに基づいています。
本文は内部エンコードのままなので、内部エンコードから PHPMailer::CharSet で定義しなおした ISO-2022-JP に再度エンコードし、ヘッダのエンコーディングも PHPMailer::CharSet で定義された ISO-2022-JP でエンコーディングされる仕組みとなっております。
注意
この修正を行って発生したいかなる問題、騒動、動乱、謀反などに関して僕と spais.jp は一切の責任を負いません。全ては自己責任でお願いします。
この事をご理解頂いた上で修正を行って下さい。
また、PHPMailer には PHPMailer 0day remote command execution と言う脆弱性が見つかっており、WordpressME2.2.3 の時点でもこの脆弱性に対しての修正は行われておりません。
この脆弱性では sendmail のラッパーとして PHPMailer を利用している場合に穴となりますが、Wordpress では mail 関数を使っているため大丈夫と言えば大丈夫なのですが、場合によっちゃ問題になりかねないし、そもそも穴のある状態で使うのはちょっとアレだな。と言う向きもおられるかもしれませんので、そのような場合には以下の点を修正して下さい。
//391行目付近 function SendmailSend($header, $body) { if ($this->Sender != "") $sendmail = sprintf("%s -oi -f %s -t", $this->Sendmail, $this->Sender); else $sendmail = sprintf("%s -oi -t", $this->Sendmail); //以下のように修正 function SendmailSend($header, $body) { if ($this->Sender != "") $sendmail = sprintf("%s -oi -f %s -t", $this->Sendmail, escapeshellcmd($this->Sender)); else $sendmail = sprintf("%s -oi -t", $this->Sendmail);
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://spais.jp/php/wordpress-%e3%81%8b%e3%82%89%e9%80%81%e3%82%89%e3%82%8c%e3%81%a6%e3%81%8f%e3%82%8b%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%92-iso-2022-jp-%e3%81%ab%e3%81%99%e3%82%8b/2007-10-10/trackback
- トラックバックの送信元リスト
- Wordpress から送られてくるメールを ISO-2022-JP にする - SPaiS より