メールでの投稿の文字化け修正 WPME2.2.1

9月 3rd, 2007 admin Posted in PHP, wordpress |

本ブログでは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から内部エンコードに変えているだけです。
よくわかんない人は、下記ダウンロードしてファイルごと上書きしてください。(バージョンを確認してね!)

付録

wp-mail.zip

本文が投稿されない。

上の作業でタイトルは文字化けしなくなりましたが、本文がありません。
本家をあたってみると、バグ報告がされていました。

#4337 (Blog by Email: No content is assumed) - WordPress Trac - Trac

すでに誰か偉い人がパッチを作ってくれていたのでclass-pop3.php.patchというのをあてたら修正されました。

付録

class-pop3.zip

自動で更新してくれない

あたりまえかもしれませんが、せっかくメールを送っても、wp-mail.phpにアクセスするまでメールをチェックしてブログを更新してくれません。
普通はcronという仕組みを使ってwgetしたりするのですが、今回は指定したURLに定期的にアクセスしてくれるWebcron
というサービスを使いました。ここでユーザ登録して/wp-mail.phpに1時間ごとにアクセスしてもらうように設定しました。
これでメールを送れば遅くても1時間後には更新されるようになったというわけです。

以上

2 Responses to “メールでの投稿の文字化け修正 WPME2.2.1”

  1. 壱ユーザー Says:

    おかげ様で「タイトルの文字化け」と「本文が投稿されない」は上記作業で改善され問題無くなりました。
    ただし、本文は投稿されるのですが、今度は本文が文字化けしております。
    タイトルと同じやり方で文字化け解消しようと試みたんですが、当方のスキルが足りず、直す事が出来ませんでした。
    直す方法を考えて頂ければ非常に助かります、どうぞ宜しくお願い致します。

  2. こんばんは
    ・本文のエンコードはなにになっているでしょうか?
    ・wp-mail.php内で、最後の$contentの文字エンコードは何になってるでしょうか?
    とりあえずこの辺を調べてみてはどうでしょうか?

Leave a Reply