Postfixを使って受信メールでPHPを動かす

2008.08.01.金
PHPServer技術

今日は、Postfixを使って受信メールでPHPを動かす方法のご紹介です。

POPメールサーバは、メールを受信すると、各アカウントのメールボックスにメールを
貯めておきますが、メールボックスに入れるかわりに受信したメールを他のプログラム
に渡すこともできるんです。

この機能を使うと、どんなことができるかというと、例えば特定のメールアドレスに
メールを送ると、送信内容をBBS(掲示板)に反映したり、ブログの記事として投稿
したりと、普段、ブラウザを使って実行するのと同じようなことができます。

外出先からメールでブログ更新とか、今風でカッコイイでしょ。

と、前置きは長くなりましたが、設定方法です。 設定するファイルは、
/etc/aliases です。ここに

php: "| /usr/bin/php -f /var/www/mail-exec.php > /dev/null 2>&1"

こんな感じで、ユーザ(メールアカウントにあたる)と実行するプログラムを
|(パイプ)でつないであげます。そして、aliasesファイルを更新するために、
newaliases コマンドを実行します。

たったこれだけ。php@メールサーバ にメールを送ると、mail-exec.php が
実行されます。

さて、メールを受け取った mail-exec.php はどのようにすればいいでしょうか。
Postfixから受け取るメールデータは、標準入力として扱われます。まずは、
受け取った情報をそのまま出力するだけの簡単なものを用意してみましょう。




用意できたら、php@メールサーバ にメールを送ってみましょう。実行結果が
/tmp/mail.txt に出来上がります。ファイルの中身は、以下のような感じです。


From xxx@example.co.jp Mon Jul 30 10:32:09 2008
Return-Path:
X-Original-To: php@key-p.co.jp
Delivered-To: php@key-p.co.jp
Received: from pamps2.key-p.com (pamps2.key-p.com [127.0.0.1])
by pamps.key-p.com (Postfix) with SMTP id A7C2599D03B
for ; Mon, 30 Jul 2008 10:31:07 +0900 (JST)
To: php@key-p.co.jp
Subject: This is title
Message-Id:
Date: Mon, 30 Jul 2008 10:31:07 +0900 (JST)
From: xxx@example.co.jp

メールでPHPを実行するテストです。



注意する点としては、実行結果を返す出力先が画面ではないということです。
今回のようにファイルに書き出すとか、データベースに登録するとか、実行結果を
うまく処理してあげましょう。

また、デバッグやテストをする際には、いちいちメールを送らなくても、メールの
内容をファイルで用意しておき、以下のようにファイルを読み込ませてやると、同じ
動作をさせることもできます。


$ /usr/bin/php -f /var/www/mail-exec.php


どうですか?このメールを使ってプログラムを実行する機能を使って、何か新しい
アイディアが浮かびましたか?こんなサービスがあったら便利だなーというのが
あれば、ぜひ教えてください。