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を使うという手もあるがそれはそれで余計わずらわしそうだし。