Postfixadminな環境でパイプ渡し

色々調べた結果、とりあえずvirtualはそのままではパイプ渡しが出来ないらしい。
下記ページにvirtual_alias_mapsとalias_mapsの違いがまとめられており非常に分かりやすかったです。
http://d.hatena.ne.jp/NetPenguin/20090101

パイプ渡しのやり方ですが、以下のやり方で出来ました。
ただ、もっとスマートなやり方などがあると思います。

例えば、hoge@example.comでメールを受け取った時にプログラムをキックしたい場合

・/etc/postfix/main.cf
#ローカル配送にする。
local_transport = local

#特定のアドレスだけローカル配送にする(コマンドを渡すため)
transport_maps = hash:/etc/postfix/transport
                            • -
・/etc/postfix/transport #無理やりローカル配送にする hoge@example.com local
                            • -
・/etc/aliases hoge: "|test.php" ユーザー名: 特定のプログラム
                            • -
postmap /etc/postfix/transport postalias /etc/aliases /etc/init.d/postfix reload で完了。 hoge@example.comにメールを送るとtest.phpが起動されます。 ちなみに、postfixadminでhoge@example.comを作っておかないとUser unknownエラーが出ます。

ここで問題になってくるのが複数のドメインで同じユーザー名で別々のプログラムを動かしたい場合、
/etc/aliasesで1ユーザーしか定義できないのが問題になってきます。
対策としては、hash:virtualマップを使うという手があります。
例えば、hoge@example.comはtest.phphoge@hoge.comはtest2.phpを起動したい場合を記載します。

・/etc/postfix/main.cf
#mysqlでのマップ読み込みの前に、hashでvirtual.dbを読みにいく。
virtual_alias_maps = hash:/etc/postfix/virtual,
                     mysql:/etc/postfix/mysql_virtual_alias_maps.cf
                            • -
・/etc/postfix/virtual hoge@example.com hoge+example.com hoge@hoge.com hoge+hoge.com
                            • -
・/etc/postfix/transport hoge+example.com local hoge+hoge.com local
                            • -
・/etc/aliases hoge+example.com: "|test.php" hoge+hoge.com: "|test2.php"
                            • -
postmap /etc/postfix/virtual postmap /etc/postfix/transport postalias /etc/aliases /etc/init.d/postfix reload こんな感じですが、動かなかったら/var/log/maillogを見つつエラーを回避しながらカスタマイズすれば通るようにはなると思います。