メールをトリガーにWordPress投稿

2015.05.18

今はほとんど需要がないWordPressへのメール投稿。いざ設置しようとすると案外手間なので少しまとめておきます。

さくらのレンタルサーバ スタンダード」で実験。結果ほぼリアルタイムに投稿できるようになりました。

公開のトリガーがネック

動作としては、大きく二つの工程。

  1. 設定したメールアドレス宛てに記事を書いたメールを送信
  2. WordPressがそのメールサーバへメールを取りに行き公開

問題は「2」の工程。通常の動作では「サイトの閲覧」がトリガーになるので、たまたまそれにあたった閲覧者は運悪く表示が遅くなります。

これを防ぐには工程「1」のメール送信をトリガーに、そのまま裏で「2」が動くような設定が必要。当たり前の処理に思えますが、よくよく考えると行ったり来たり面倒な処理です。しかも今回の方法はサーバのサポート外の操作になります。

処理の流れ

  1. 事前に投稿用のメールアドレスを二つ作る
    A:Gmailなどに投稿先メールアドレス
    B:WordPressがあるさくら内にプログラム起動用メールアドレス
  2. 記事をAに送信
  3. Aに届いたメールをBに転送(Aにも残す)
  4. Bでメールを受信したらWordPress内のプログラムを実行
  5. WordPressがAまでメールを取りに行く
  6. メール内容を記事として投稿

これらがメール送信だけで、一括処理されるように設定します。

サーバの条件

上の処理「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」でプログラムを起動した時点では受信ボックスにメール自体が入っていない模様。何度かテストすると一つ前の投稿が実行されます。もしメアド一つで上手くいかない人は、この辺り調整してみてください。

メール投稿はプラグインに依存しすぎるので業務では使用しません。ご依頼はご遠慮ください。

お気軽にお問い合わせください。
ご依頼の方は「ご依頼方法」の
ページからご覧ください。