2007-01-19

wp-mta はしばしお待ちくらはい

yuriko による 01:41:08 の投稿
カテゴリー: WordPressハック

位置情報プラグインは2本リリースしたのですが、ウチで使っている「push 型モブログ投稿スクリプト wp-mta」については、もうちょっと練ってからリリースします。

実は、他のプラグインで何かエラーが発生した場合、メールサーバーには deferral が返されて、再配信されてしまうため、メールがループしてしまいます。もし、wp_insert_post() 実行後にエラーが発生していると、投稿処理は終っているため、投稿が何重にも繰り返されてしまいます。プラグインの開発中はどうしてもエラーが発生するため、複数投稿が起きてしまいました。

これではマズいため、多重投稿の防止機能を付ける必要があります。本当ならば、WordPress コアが PHP スクリプトエラーで終了するときの終了コードをいじって、qmail でハードエラーを表す100とできればいい (こうすれば再配信はしない) のですが、どうやればいいかよく分かりません;-) そこで、wp-mta 側で多重投稿を検出し、その場合はハードエラーで終了 (exit(100);) すればいいわけです。こうすれば、再配信も終了するため、メールループにはなりません。

さて、問題はどうやって多重投稿を検出するか。wp-mta では、メールの Date フィールドから投稿時刻を決定しているため、投稿時刻が同じならば多重投稿と考えていいでしょうか。タイトル (Subject フィールドから抽出) が同じである、という条件も入れたいところですが、特殊記号などは DB に入るときに文字が化ける場合もあるので、多重投稿を防げない場合もありそうです。

あ、ここで、Date フィールドが欠けているメールについて考慮してないことに気がつきました……。Date をつけないようなヤクザな MUA からのメールは破棄することにしていいかも;-)

関連記事

トラックバック・コメント »

トラックバック・コメントはありません。
※スパム対策プラグインの影響により、すぐにトラックバックが反映されない場合があります。お手数ですが、半日ほど待ってみてください。

上に戻る

コメント投稿

※発言の責任を明確にするため「名無し」「通りすがり」「匿名希望」等の匿名は不可とします。捨てハンドルでもいいので必ず名乗ってください。
XHTML (使えるタグ): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> <img localsrc="" alt=""> .
※スパム対策プラグインの影響により、すぐにコメント内容が表示されない場合があります。お手数ですが、半日ほど待ってみてください。

上に戻る