Skip to content

Instantly share code, notes, and snippets.

@toshiharu
Created November 2, 2013 06:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save toshiharu/7276365 to your computer and use it in GitHub Desktop.
Save toshiharu/7276365 to your computer and use it in GitHub Desktop.
procmail から maildrop へ移行した。

procmail から maildrop へ移行した。

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"
}

参考にしたページは下。ありがとうございます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment