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" }
参考にしたページは下。ありがとうございます。