メール受信をトリガに複数の処理を実行する方法
/etc/aliases や、~/.forward を使うことで、メールサーバ(ここではsendmail互換のPostfixなど)がメールを受信したことをトリガにして、プログラムを実行することができる。メールの転送設定や、空メールを受信したら登録用URLを送信する場合は、よくこの方法が取られる。
メール受信をトリガにメールのヘッダ情報をDBに取り込むプログラムを書いたのだが、メールボックスにメールを取りこむ前にプログラムが実行されてしまうため、結果、DBに格納できない状態で小二時間ほど詰まってしまった。
解決策がググってもなかなか出てこないので、同じ様なことをしたい人用にメモしておく。
結論から言うと、メールを複数人に転送する場合の応用と考えれば良いらしい。
複数人にメールの転送をするためには、各ユーザ(あるいはメールアドレス)をカンマで区切って、羅列すれば良い。
/etc/aliases ならこんな感じ。
myusername : user1, user2, user3@hogefuga.com, …
メールボックスへの格納とDBへ格納するプログラムも、これと同じように考える。
つまり、メールを受信したら、再帰的に、自身のアドレスにメールを配送し、次にプログラムが事項されるようにすれば良い。
/etc/aliases なら、
myusername : myusername, "| myprogram"
~/.forward なら、
myusername, "| myprogram"
でOK。
※ /etc/aliases の場合は、newaliasesコマンドをを忘れずに。
ここで順次実行なのか、並列実行なのかについて触れてるけど、上の様な処理ができることから、多分、順次実行で処理が行われているものと思われる。
また、カンマで区切る方法以外に
半角スペースで区切る方法や、
myusername : myusername "| myprogram"
&&でもいけた。
myusername : myusername && "| myprogram"
この辺の仕様はかなりアバウトなようです。
(ウラを取ろうとしたけど仕様について詳しく書かれたソースは見つからなかった)