メールでの投稿の文字化け修正 WPME2.2.1
本ブログではWordPressME2.2.1を使っています。
ふとしたことからメールでの投稿を使ってみたくなったのですが、どうもうまくいかない・・・
デフォルトの仕様確認
- メールを/wp-mail.phpがPOPで取得する
- メールのサブジェクトがエントリーのタイトル、本文が本文に対応する
タイトルが文字化けする
ソースをみてみると、そもそもマルチバイト関係のことは考えてくれていないみたいなので文字化けして当然です。
タイトルと本文をPHPの内部エンコーディング(wp-config.phpで設定)に変換してやることにしました。
/wp-mail.php 132行目あたり
$content = trim($content);
$content = mb_convert_encoding(trim($content) , mb_internal_encoding(), "JIS");
/wp-mail.php 138行目あたり
if ($post_title == '') $post_title = $subject;
if ($post_title == ''){
$post_title = $subject;
$post_title = str_replace(array('=?ISO-2022-JP?B?','=?iso-2022-jp?B?','?='), '', $post_title);
$post_title = explode(" ", $post_title);
$decoded_title = '';
foreach($post_title as $k=>$v){
$decoded_title .= mb_convert_encoding(base64_decode($v) , mb_internal_encoding(), "JIS");
}
タイトルはやりかたを知らないので力技でデコード。要するにbase64デコードをして、JISから内部エンコードに変えているだけです。
よくわかんない人は、下記ダウンロードしてファイルごと上書きしてください。(バージョンを確認してね!)
付録
本文が投稿されない。
上の作業でタイトルは文字化けしなくなりましたが、本文がありません。
本家をあたってみると、バグ報告がされていました。
#4337 (Blog by Email: No content is assumed) – WordPress Trac – Trac
すでに誰か偉い人がパッチを作ってくれていたのでclass-pop3.php.patchというのをあてたら修正されました。
付録
自動で更新してくれない
あたりまえかもしれませんが、せっかくメールを送っても、wp-mail.phpにアクセスするまでメールをチェックしてブログを更新してくれません。
普通はcronという仕組みを使ってwgetしたりするのですが、今回は指定したURLに定期的にアクセスしてくれるWebcron
というサービスを使いました。ここでユーザ登録して/wp-mail.phpに1時間ごとにアクセスしてもらうように設定しました。
これでメールを送れば遅くても1時間後には更新されるようになったというわけです。
以上
