postfixのaliasesでスクリプトにパイプする
まずは、postfixとdovecotでsmtp、popがちゃんと動くようにしとく。
そこまではPostfix + dovcot環境(http://kapi.jp/kapi_blog/214)を参考に。
前提条件
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
として、alieaseファイルはsendmailのものを共有し、スクリプトへの渡しはこっちを使う
(その方がpostfixをsendmailに変えてもそのまま使えるから)
virtual_alias_maps = hash:/etc/postfix/virtual
とし、アカウントのalias自体はvirtualで行う。
で、postfix、dovecotインストール後のPostfix + dovcot環境(http://kapi.jp/kapi_blog/214)の状態から修正開始。
main.cf
まず、main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = localhost
mydomain = localhost
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
mynetworks_style = host
### Virtual domain setting ###
virtual_mailbox_domains = /etc/postfix/vdomain
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual
### debug ###
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
### Sendmail Compatible ###
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
### etc ###
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
smtpd_banner = $myhostname ESMTP unknown
setgid_group = postdrop
html_directory = no
### smtp sasl setting ###
smtpd_sasl_auth_enable = yes
#smtpd_sasl_local_domain = $myhostname
smtpd_sasl_local_domain = $mydomain
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
message_size_limit = 10485760
前回と違うところは、
myhostname、mydomain等をlocalhostとした。
どうせ/etc/hostsでメインのドメイン設定くらいはしてるはずだし、バーチャルドメイン前提なら、vdomain等に書くので、これで。
vdomain
次にvdomain。
これは必要なドメインを設定する。今回は1ドメインのみなので
kapi.jp
のような感じで。
vmailbox
次にvmailbox。
info@kapi.jp kapi.jp/info/Maildir/
support@kapi.jp kapi.jp/support/Maildir/
これもpopが必要なアカウントを定義。
virtural
entry@kapi.jp entry-kapi.jp
このvirtualでドメイン毎のaliasをする。
entry@をスクリプト受け渡し用に使うわけだが、ここの書き方がキモ。
entry-kapi.jpという書き方をしているのは次に修正する/etc/aliasesに渡すユーザー名を意味してる。
つまり、シングルドメインであれば
entry@kapi.jp entry
と書けばうまくいく。でも、これじゃ、バーチャルドメイン環境でentryが被った場合、うまくいかんから、entry-kapi.jpという架空のユーザーを作って/etc/aliasesで振り分けできるようにする。
/etc/aliases
最後にaliases。
ここにさっき作ったentry-kapi.jp架空ユーザーとスクリプトを紐付ける。
entry-kapi.jp: "| /opt/scripts/entry_kapi_jp.py"
後は、それぞれ修正したファイルをDB化。そしてリロード+再起動
> cd /etc/postfix/
> postmap virtual vdomain vmailbox
> /etc/init.d/postfix reload
> /etc/init.d/postfix restart
これで、phpなりpythonなり何なりにメールデータをそのまま渡せる。
因みにPostfix + dovcot環境(http://kapi.jp/kapi_blog/214)の記事で、pop実ユーザーの設定としてvirtualにそれぞれ定義してたけど、あれ必要ないっぽい(´ー`;)
実ユーザーのバーチャルドメイン振り分けはvmailboxの時点で完結してるみたい。
後、main.cfは同じディレクトリにあるmain.cf.defaultを上書きして動いてるっぽいから(注意:振る舞いから判断してるので信用しないで・・ってたぶんそうだよね?)、前回の記事でもmain.cfはかり削ったけど、manpage_directoryとかもいらないから削った。設定ファイル使いまわす前提なら、バージョン違いのことも考えて、こういうのも省いた方がよいね。出来るだけ最小設定を目指したい。
参考URL
http://kapi.jp/kapi_blog/244
2009年06月25日
関連カテゴリ etc