Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

distribute(1) の前段に SpamAssassin を噛ませる方法 (1)

SpamAssassin は STDIN からメールの内容を読んで、 spam か ham かマークをして STDOUT へ流す、という動作をする。

また、 /etc/aliases の manpage を見てみると "|command" とか書いてあって、いかにも「newaliases が先頭のパイプをパースして以下のコマンドに渡すようにしてそう、"| a2ps | lpr -Plp0" *1 みたいなことは書けないんじゃ」と思ってしまうのだが、さにあらず。

hoge: "| a2ps | lpr -Plp0"

どうやら書けるようです。怪しいなら cat(1) か何かでテスト。

ということで、「spam には SpamAssassin にマークをつけさせる」というだけなら、 /etc/aliases には例えば次のように書けばよい *2

foobar-ml: "| /usr/local/bin/spamassassin -p /usr/local/share/spamassassin/user_prefs | /usr/local/sbin/distribute -l foobar-ml -R -I /var/spool/distribute/foobar-ml.seq -a foobar-ml -r foobar-ml@example.com -L /var/spool/distribute/foobar-ml.rec"

spam だと判定されたメールを自動的に破棄する、とかいう場合にどうしたらいいかは、まだ調査中。 distribute(1) って STDIN から何も入ってこなかったらどうなるの?

*1:これ以外にパイプを 2 つ使う例が思いつかないので……

*2:長いんで通常の引用文としてマークアップ。 /etc/aliases の行が長くなるのがイヤなら、他のファイル、例えば /var/spool/distribute/foobar-ml.run に書いておいて foobar-ml: :include:/var/spool/distribute/foobar-ml.run としてもいい