postfixでやっててqmailは余り使わないのでよく知りませんでした。作業で使う機会があって調べたのでまとめ。
qmailでプログラム起動
qmailでは、ユーザーのディレクトリにメールが届く。配送先はもちろん /home/たくや/Maildirです。
takuya@example.comのメアドでプログラム起動
takuya あてのメールは ユーザーディレクトリに配送される。その際にプログラム起動が出来る。
/home/takuya/.qmail
|/usr/bin/ruby /var/www/test/takuya.rb
これを書けば、takuya宛のメールでプログラム起動される。
qmailは複数のサブメアドが作れる
takuya-test@example.comは takuya@example.comと同様に解釈される。
- takuya-test@example.comにメールが届く
- takuya宛と解釈する。
- /home/takuya/.qmail-test の設定を適用する。
この順に配送される。なので、プログラム起動は /home/takuya/.qmail-testに起動コマンドを書く
/home/takuya/.qmail-testでサブメアドでプログラム起動する。
|/usr/bin/ruby /var/www/test/takuya-test.rb #.qmail-testの起動設定
ユーザーが居ない時。aliasを参照する。
blog@example.comのメアドを作って、メールが投稿されたらプログラム起動したい。でもblogユーザはいない(作りたくない)場合。この場合は/var/qmail/alias に配送先を記述する。
blog@example.comのプログラム起動設定
/var/qmail/alias/.qmail-blog を使う。
|/usr/bin/php /var/www/blog/mail/post_by_mail.php
blog-category@example.comのような サブメアドを使う場合。
takuya-test@example.comを takuya@example.comのサブメアドとして作ったように、Aliasのメアドもサブメアドを作ることができる。
- blog-foods@example.com の配送先
- /var/qmail/alias/.qmail-blog-foods
- blog-photos@example.com の配送先
- /var/qmail/alias/.qmail-blog-photos
以上のように配送先が決まる。これで複数メアドを作ることが出来る。
サブメアドを一括で受けたい。
blog-XXXX@example.com の配送先を一括で指定することも出来るようです。
- blog-XXXX@example.com の配送先は
- /var/qmail/alias/.qmail-blog-default
この様になるようです。起動プログラムの書き方は先例に同じです。
別メアドを指定する場合
takuya_1st@example.comを takuya@example.comに配送する場合は、設定ファイルに転送先のユーザー名を書けばいいみたい。
/var/qmail/alias/.qmail-takuya_1st-default
takuya
と書くだけでした。
起動されるプログラム
メールが届いたら起動されるプログラムの書き方はPostfixと同じです。標準入力からメールの内容を受け取ります。プログラム側で標準入力を受け取って、変数に格納してパースすればいいですね。
rubyの場合
mail_str = STDIN.read
phpの場合
<?php $mail_str = file_get_contents("php://stdin");
メールの文字列は好き勝手に処理できる。プログラム起動のテストをするときは先にダミーメールを作ったほうが楽ですね。
cat sample.eml | ruby test.rb
でテストして動いたらOKですね。メールから起動するプログラムはデバッグが面倒なので、起動する部分と、メイン処理を分けたほうがいい感じ。