postfixでcontent_filter=spamassassinとvirtual_aliasの絡み
MTAにPostfixを使っていて、virtual_aliasで自分自身にもコピーを受け取るエイリアスを作る。/etc/postfix/virtualというファイルを以下のようにする(なぜこのファイルに書けばよいかはmain.cfやPostfixデフォルトの設定による)。
moto@un-soft.jp moto@un-soft.jp saki@un-soft.jp
かつ、外部から受信したメールをcontent_filter=spamassassinする。
これはmain.cfではなくmaster.cfに書く。
smtp inet - n n - - smtpd -o content_filter=spamassassin spamassassin unix - n n - - pipe flags=R user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
これでばっちりだぜーとか思いつつメールを受け取ってから気づいたが、この構成だとsaki@un-soft.jp宛に2通メールが届く。
外からsmtpdで受け取ったメールはvirtual_aliasによりmotoとsakiに複写され、それぞれがコンテンツフィルターで一旦spamassassinに渡される(一度Postfixの外に出る)。
その後、spamassassinは再びsendmailコマンドにて自分自身のメールサーバーにメールを送って、pickupがPostfix内にメールを取り込む。この時にまたvirtual_aliasの展開が行われて、結果spamassassinを通る方のsakiと通らない方のsakiの2通メールが届いてしまう。localとaliasesでも起こるかも知れん。
これの回避にはvirtual_transportをprocmailにしてそちらでspamassassinを通るようにするしかないのかな。何かいい手はないだろうか。
virtual_transportをprocmailにしてしまうと今度はvirtual_mailbox_mapsが効かなくなる(=virtual_mailbox_mapsの中のリストでcatchallが出来なくなる)のでcatchallアドレスをvirtual_alias_mapsの方に入れないといけなくなるんだよな。transport_mapを使うという手もあるがそれはそれで余計わずらわしそうだし。