2009年1月20日(火) 13:23

Mail-Entry & MT4 で メール送信時間を公開日時に反映させる修正

このブログでは、メールから投稿するのにmail-entryというプログラムを使用しています。
主に携帯電話からのメールでの記事投稿が想定されたツールで、私も主にケータイメールで投稿しています。

今これを書いている時点での最新版は0.6.3aですが、私の環境ではこのバージョンはなぜか500エラーが出てしまい使用できません。
エラーログがあれば簡単に原因も調べられるのですが、今借りているサーバーはエラーログが見られないのでそれが出来ません。
上記エントリーのコメント欄でもロリポップで500エラーが出ると指摘がありますし、同系列のサーバーではダメっぽいです。
そんなわけで現在は少し古い0.6.1を使用しています。

# 0.6.3で私が要望した動画投稿への対応をしていただいたのですが、こういう経緯で使用できず、残念です。
# お願いしようにも、エラーの内容が分からないのでフィードバックしようがないし・・・

ところで、先日Webサーバー移転をしたのですが、その機会にMovableTypeをそれまでの3.x系から4.x系にバージョンを上げました。
今日現在Movable Type 4.23-jaを使用しています。

引き続きmail-entryを使用しておりまして、最初は今までと同じ挙動をしていると思っていたのですが、MTに記事として取り込まれたときの公開時間が変わってしまってました。

MT 3.x ・・・ メールを送信した時間
MT 4.x ・・・ メールを受信した時間

標準入力機能を使っている方は送信時間と受信時間がほとんど変わらないでしょうから問題ないと思いますが、私のようにメールチェック用CGIをはてなアンテナに巡回させているような環境だと、投稿時間と受信時間は大幅に異なってきます。
例えばおやつにアイスの場合、記事の方はタイムスタンプが17時になってしまってますが、実際に送信したのは15時頃でした。

で、本題。
mail-entryをちょこっと修正(改造というほど大がかりではない)して、以前同様にメール送信時間が投稿時間として取り込まれるようにします。

mail-entry.cgi 0.6.3a (2006.12.02 22:37)のソースを基にします。

600行目あたり


$to_ping_url and $entry->to_ping_urls($to_ping_url); # トラックバック送信が必要ならば
$entry->title($title);
$entry->text($comment);
$entry->text_more($ex_comment);
if ($create_date) {
# ** 以下修正・追加 **
#$entry->created_on($create_date);
$entry->authored_on($create_date);

}
$entry->save or &err_output("エントリーの保存に失敗しました");
# トラックバック送信処理

要は「created_on」を「authored_on」にするということですね。

Movable Type 4のエントリーの日付の管理方法 - The blog of H.Fujimoto
ここによると、

Movable Type 4では、エントリーのテーブルに「authored_on」というフィールドが追加されました。
authored_onとcreated_onは、以下のように区別されます。
・authored_on → エントリーを新規作成した時点の日時
・created_on → エントリーをデータベースに初めて保存した時点の日時

ということだそうで、MT4で公開日のデータベースに大きな変更があったみたいです。
上記コードはそれに沿った修正です。

作者さんはmail-entryの今後の処遇自体悩まれているようですが、次バージョンが出る際にはこれも取り込んでいただけますと喜ぶ人もいるかもしれません。

とりあえずお約束なので、改造する際は自己責任でよろしくお願いします。
何年前の流行語だっけな自己責任。