Rails, Postfix: 受信メール処理の設定方法(Postfix Adminを利用している場合)

あるLinuxマシンでPostfix Adminを運用しているとします。また、同じマシンでRailsアプリケーションも動いています。パスは /var/rails/example/current とします。

ここで、reg@example.jp にメールが届いたら UserMailer.receive に渡す、という処理を行いたい場合、どうすればいいでしょうか。

ただし、example.jp はバーチャルドメインで、デフォルトドメイン名(通常は /etc/mailname に書いてある)は oiax.co.jp とします。

/etc/postfix/main.cfの修正

Postfix Admin を運用しているなら /etc/postfix/main.cf に次のような記述があるはずです。


virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

これを次のように直します。


virtual_alias_maps = hash:/etc/postfix/virtual,
mysql:/etc/postfix/mysql_virtual_alias_maps.cf

MySQLデータベースを検索する前に /etc/postfix/virtual のエントリーを見よ、という設定です。

/etc/postfix/virtualの作成または修正


reg@example.jp reg_at_example_dot_jp@localhost

/etc/aliasesの修正


reg_at_example_dot_jp: "| cd /var/rails/example/current && /usr/local/bin/bundle exec /usr/local/bin/rails runner -e production 'UserMailer.receive STDIN.read'"

bundleやrailsコマンドは絶対パスで指定するのがポイントです。

設定の反映


$ postmap /etc/postfix/virtual
$ newaliases
$ service postfix reload

参考資料:

更新:

  • local_transport に関する記述を削除。また /etc/postfix/virtualreg_at_example_dot_jp の後に @localhost を加えた(2015/06/09)。