今はほとんど需要がないWordPressへのメール投稿。いざ設置しようとすると案外手間なので少しまとめておきます。
「さくらのレンタルサーバ スタンダード」で実験。結果ほぼリアルタイムに投稿できるようになりました。
公開のトリガーがネック
動作としては、大きく二つの工程。
- 設定したメールアドレス宛てに記事を書いたメールを送信
- WordPressがそのメールサーバへメールを取りに行き公開
問題は「2」の工程。通常の動作では「サイトの閲覧」がトリガーになるので、たまたまそれにあたった閲覧者は運悪く表示が遅くなります。
これを防ぐには工程「1」のメール送信をトリガーに、そのまま裏で「2」が動くような設定が必要。当たり前の処理に思えますが、よくよく考えると行ったり来たり面倒な処理です。しかも今回の方法はサーバのサポート外の操作になります。
処理の流れ
- 事前に投稿用のメールアドレスを二つ作る
A:Gmailなどに投稿先メールアドレス
B:WordPressがあるさくら内にプログラム起動用メールアドレス - 記事をAに送信
- Aに届いたメールをBに転送(Aにも残す)
- Bでメールを受信したらWordPress内のプログラムを実行
- WordPressがAまでメールを取りに行く
- メール内容を記事として投稿
これらがメール送信だけで、一括処理されるように設定します。
サーバの条件
上の処理「4」だけ特殊な操作。これはメール関連のファイルをFTP操作できることが条件になります。
さくらのレンタルサーバではメールのディレクトリが見えるのでこの条件はクリア。メールボックスのユーザーディレクトリ直下で「.mailfilter」という設定ファイルを操作します(なければ作ります)。
/MailBox/(ユーザー名)/.mailfilter
ただこのファイルはさくらの管理画面から「転送」を設定すると上書きされるようなので注意(公式サポートサイト「メールの転送設定」)。
プラグインは「Postie」
プラグインは今も更新されている「Postie」を使用。
Postieの場合、メールを取りに行くプログラムはhttpアクセスで起動します(Postie公式サイトの説明)。そこで「.mailfilter」内を下記のように書いてアップ。
to "| /usr/local/bin/wget -O /dev/null http://example.com/?postie=get-mail >/dev/null 2>&1"
「example.com」は書き換えてください。もしサイトにBASIC認証がかかっている場合はオプションを追加。
--http-user=ユーザー名 --http-passwd=パスワード
それから、もう一つ大切なこと。
Postieの設定で「メールのチェック頻度」を「手動チェック」としておきます。これをしないとページアクセスによるトリガーが発生し、ここまでの操作の意味がなくなります。
メールアドレスを二つにした理由
メールアドレスを二つ用意したのは、さくら内のメアド一つでは動作しなかったため。おそらく「.mailfilter」でプログラムを起動した時点では受信ボックスにメール自体が入っていない模様。何度かテストすると一つ前の投稿が実行されます。もしメアド一つで上手くいかない人は、この辺り調整してみてください。
メール投稿はプラグインに依存しすぎるので業務では使用しません。ご依頼はご遠慮ください。