受信メールを条件を指定で転送したりCGIを呼び出す

以前に「空メール送信してPHPを動作させる」で".forward"という受信したメールを転送する技術を応用してスクリプトを呼び出す方法を紹介したが、さらに応用して条件を満たした場合にのみスクリプトを動作させるようにする。

".forward"はテキストファイルで、そこにメールアドレスを記載しておけばメール受信時に転送されるようになる。
その転送先をメールアドレスではなく、PHPやPerlなどCGIを呼び出すことで「空メールで仮登録」や「メール送信で自動応答」などが行える。
->空メールを送信してPHPを動作させる設定 -.forward

CGIを呼び出すには下記のような記述をする


"|exec /usr/local/bin/php /var/www/○○.php"



今回は「特定のメールタイトルがあればスクリプトを呼び出す」と条件を満たした場合にだけ指定する。

上記の".forward"にプログラムで言うif文で分岐できればよいのだが、".forward"にはそのようなプログラム的に動作する機能は備わっていない。

そこで、"procmail"というこちらも転送機能をもつアプリケーションを利用することで条件指定することができる。
"procmail"は"Postfix"などOSインストール時に自動で入ることもあれば、別途インストールする必要がある場合もある。

動作の流れとしては、メールを受信するとまず".forward"で"procmail"にアクションをかけ、"proxmail"が受信メールを判断して指定処理を実行する。


".forward"にはダブルクォーテーションを含めた下記の記載を行う。


"|exec /usr/bin/procmail -f- || exit 75"



次に"procmail"には下記のような記載を行う。


LOCKFILE=$HOME/.lockfile
:0
* ^Subject: .*メールタイトル*
|/usr/local/bin/php /var/www/○○.php



メールタイトルが指定したものなら指定のPHPを実行するといったものだ。

メールログを見ると"procmail"に渡したあとにメールボックスに溜まらないように"removed"しているのがわかる。


Jun 03 11:27:01 localhost postfix/smtpd[2772]: **********: client=localhost.localdomain[127.0.0.1]
Jun 03 11:27:01 localhost postfix/cleanup[2775]: **********: message-id=<20110222022701.***********@localhost>
Jun 03 11:27:01 localhost postfix/qmgr[29929]: **********: from=<***@localhost>, size=571, nrcpt=1 (queue active)
Jun 03 11:27:01 localhost postfix/local[2776]: **********: to=<***@localhost>, relay=local, delay=0.15, delays=0.02/0.11/0/0.03, dsn=2.0.0, status=sent (delivered to command: exec /usr/bin/procmail -f- || exit 75)
Jun 03 11:27:01 localhost postfix/qmgr[29929]: **********: removed



"procmail"に渡ったあとのログは"procmail"内の記述でログ出力を指定することで閲覧することができる。


社員だけのメールを振り分けたいや、"お問い合わせ"とメールタイトルにあるものだけをデータベースに入れるなど、細かな対応が取ることができそうだ。


ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック