Xcode-5.0.1 と MacPorts-2.2.1 へアップデートしたあたりで procmail が動かなくなってしまった。procmail のソースを開いてみたところでようやく procmail の更新が 12 年も前から止まっていることを知り、「procmail alternatives」でウェブ検索してみて maildrop へ移行することにした。
procmail は、/var/log/mail.log に「detected source and destination buffer overlap」というメッセージが残っているので、まあたぶん文字列関係の関数の挙動が変わったせいでエラーになるのだと思う。
ウェブ上には maildrop に関する先人たちの知識が多数あるので、ここにメモなんてせずに、手元で作った ~/.mailfilter を載せておく。
要注意なのは rcvstore のパス。bin ではなく lib にある。rcvstore 自体は nmh パッケージに含まれる。
無駄に細かいことをやっているように見えるが、実際にはエラー処理や正規表現がまだ甘い。
DEFAULT="$HOME/Maildir"
PATH=/opt/local/bin:/opt/local/sbin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin
RCVSTORE=/opt/local/lib/rcvstore
MAILDIRMAKE=/opt/local/bin/maildirmake
LOGDATE=`date +%Y-%m`
logfile "$HOME/.mailfilter-$LOGDATE.log"
### バックアップ
BACKUPDATE=`date +%Y-%m`
if (/^received: from gmail-pop\.l\.google\.com/:h)
cc "| $RCVSTORE +gmail-$BACKUPDATE"
### ~/Maildir がない場合
`test -e $DEFAULT`
if ($RETURNCODE != 0)
`$MAILDIRMAKE $DEFAULT`
### メーリングリスト
if (/x-ml-name:\s+([0-9A-Za-z_\-]+)/:h)
{
MLNAME="$MATCH1"
`test -e $DEFAULT/.$MLNAME`
if ($RETURNCODE != 0)
{
`$MAILDIRMAKE -f "$MLNAME" "$DEFAULT"`
}
to "$DEFAULT/.$MLNAME"
}
if (/list-post: <mailto:([0-9A-Za-z\-]+)@/:h)
{
LISTNAME="$MATCH1"
`test -e $DEFAULT/.$LISTNAME`
if ($RETURNCODE != 0)
{
`$MAILDIRMAKE -f "$LISTNAME" "$DEFAULT"`
}
to "$DEFAULT/.$LISTNAME"
}
参考にしたページは下。ありがとうございます。