ざ・わーるど@はてな

気が向いた時に更新する雑記です

Wordpressにメールで投稿する

Wordpressでブログを構築しているということを以前書きましたが、
さらにもう一つ設置することになりました。


二人で何か書くようなものになるんですけど、
ケータイからポストしたいということで設定をアレコレしてみました。


wordpressにはデフォルトでメールからのポストを受け付ける仕組みがあります。
特定のメールアドレスを作成して、ホストやパスワードを設定して、
そこに送ってきたメールアドレスと、作成したユーザーに登録したメアドが一致したら、
そのユーザーの名前で投稿を登録するという仕組みです。


wordpressのメール投稿は、専用のアドレスにポストされたものがすべて反映されます。
反映されるタイミングは、「wordpressの設置ルート/wp_mail.php」を実行したときです。
このファイルをcronなどに追加して、定期的にチェックしてポストを反映させる仕組みです。
本当は、ポストしたら即座に反映にしたいんですけど、
いちいち自分でそんなの作るのはめんどうくさいのでやりません。

サブジェクトを取得

いろいろと試してみた結果、デフォルトのままだと
タイトルとサブジェクトがうまく取得できていないようです。


POP3から投稿されているメールのデータを取得して、
そこから必要なデータを抜き出すプログラムが書かれているのですが、
サブジェクトは一定のルールが指定されているので問題なく取得されているのですけど、
本文は、送ったクライアントによってデータの格納パターンが違います。

Becky!から送った場合

Array
(
[0] => Return-Path:
[1] => Received: from ms1.din.or.jp (ms1.din.or.jp [210.135.65.21])
by www1029.sakura.ne.jp (8.13.6/8.13.6) with ESMTP id l6NErYN0003062
for ; Mon, 23 Jul 2007 23:53:34 +0900 (JST)
(envelope-from yoshi■crack.jp)
[2] => Received: from [127.0.0.1] (ppm02-0335.din.or.jp [210.173.229.35])
by ms1.din.or.jp (Dolphin/Dolphin) with ESMTP id l6NErYHD000895
for ; Mon, 23 Jul 2007 23:53:34 +0900 (JST)
[3] => Date: Mon, 23 Jul 2007 23:53:30 +0900
[4] => From: Yossy
[5] => To: to■mail.address
[6] => Subject: test
[7] => X-Mailer-Plugin: BkASPil for Becky!2 Ver.2.068
[8] => Message-Id: <20070723235328.6EB0.yoshi■crack.jp>
[9] => MIME-Version: 1.0
[10] => Content-Type: text/plain; charset="ISO-2022-JP"
[11] => Content-Transfer-Encoding: 7bit
[12] => X-Mailer: Becky! ver. 2.31 [ja]
[13] => テストデス
[14] => .

)

DoCoMoのケータイから送った場合

Array
(
[0] => Return-Path:
[1] => Received: from docomo.ne.jp (mail105.docomo.ne.jp [203.138.203.5])
by www1029.sakura.ne.jp (8.13.6/8.13.6) with ESMTP id l6NEhGQS000185
for ; Mon, 23 Jul 2007 23:43:16 +0900 (JST)
(envelope-from theworld.hatena■docomo.ne.jp)
[2] => Date: Mon, 23 Jul 2007 23:43:15 +0900 (JST)
[3] => From: theworld.hatena■docomo.ne.jp
[4] => To: to■mail.address
[5] => Subject: =?iso-2022-jp?B?GyRCJUYlOSVIGyhC?=
[6] => Message-ID:
[7] => MIME-Version: 1.0
[8] => Content-Type: text/plain; charset="iso-2022-jp"
[9] => Content-Transfer-Encoding: 7bit
[10] => テストデス
[11] => .

)

本文の格納されている位置が違いますね。
どうしようもないので、ドコモだったら[10]から取得するという
強引なif文を追加して対応しました。
なんかもっといいやりかたがあるのでしょうか。


あとは、utf-8だとサブジェクトを取得できていなかったので、
下記のようなカンジで書き替えたらうまく取得できるようになりました。
wp-mail.phpの118行目あたりです。

$subject = trim(str_replace(get_option('subjectprefix'), '', $subject));
+$subject = mb_convert_encoding(mb_decode_mimeheader($subject), "utf-8");

本文中のメールアドレスは適当なものです。