まちゅダイアリー
2004-02-08 (日)
■ メール振り分け
fetchmailで取得したメールを、受信時に自動的にフォルダへ振り分けたいと思う。 procmailがメジャーなようだけど、設定ファイルの記述が少し難解だな・・・と思っていたら、bg66's Weblogにてscmailというのが紹介されていた。
通常の振り分け規則は簡単な S式で書ける
S式って何?と思いつつも、簡単というところに惹かれてこれを使うことにしてみた。 おっ、ベイジアンフィルタも同梱されているみたい。 まぁ、こっちはbsfilterを使うかもしれないけど。
scmailは、ちょうど2日前の2月5日に1.0が出たばかり(約1年ぶりの更新)らしい。 タイミングいいなぁ。
■ scmailのインストール
scmailはebuild化されていないので、手動でインストールすることにした。 ドキュメントによると、「Gauche 0.7.4.1以上」が必要とのこと。Gauche (ごーしゅと読むらしい) は、「Scheme というプログラミング言語の処理系」だそうだ。
Gaucheのインストール
Gaucheをインストールするためにemergeすると、0.7.2がでてきた。
$ emerge -p gauche These are the packages that I would merge, in order: Calculating dependencies ...done! [ebuild N ] dev-lisp/gauche-0.7.2
そこで昨日と同じく直接ファイルを指定すると、0.7.4.1が見える。
$ emerge -p /usr/portage/dev-lisp/gauche-0.7.4.1.ebuild These are the packages that I would merge, in order: Calculating dependencies ...done! [ebuild N ] dev-lisp/gauche-0.7.4.1
やっぱり最新版が自動で出てこないのは、何か理由があるんだろう。 後でちゃんと調べないとな。
とりあえず、ebuildファイルを指定して、gaucheをインストールした。
# emerge /usr/portage/dev-lisp/gauche-0.7.4.1.ebuild
scmailのインストール
/usr/local/src に展開して、make; make installでOK。簡単。
# cd /usr/local/src # wget http://namazu.org/~satoru/scmail/scmail-1.1.tar.gz # tar zxvf scmail-1.1.tar.gz # cd scmail-1.1 # make # make install
/usr/local/bin に以下のツールがインストールされた。 中身はGaucheのスクリプトのようだ。
- scmail-deliver
- 受信時にメールを振り分け
- scmail-refile
- フォルダ内のメールを振り分け
- scbayes
- ベイジアンメールフィルタ
■ scmailでのメール振り分け設定
まず、.scmailrcに基本的な設定を記述する。
$ cat .scmailrc ;; -*- scheme -*- ( :smtp-host "localhost" :log-file "~/.scmail/log" :umask #o077 ;; for usual mail filtering :refile-rules "~/.scmail/refile-rules" :deliver-rules "~/.scmail/deliver-rules" ;; for spam filtering :token-table "~/.scmail/token-table.dbm" :digest "~/.scmail/digest.dbm" ;; for Maildir :mailbox "~/.maildir" :inbox "" :spam ".spam" ; a folder for spam mails :mailbox-type maildir )
次に.scmailフォルダを作成し、メールの振り分けルールをrefile-rules(フォルダ内のメール)、deliver-rules(受信時のメール)に記述する。 ここでは、どちらも同じルールにしたかったので、「scmail-deliver と scmail-refile の設定を共通化」を参考にいずれも同じファイルを読み込むようにしている。
(load "~machu/.scmail/common-rules")
肝心のcommon-rulesには、とりあえずメーリングリストの汎用的な振り分けルールを記述している。
(add-filter-rule! '(list-id (#/<([-\w]+)/ ".ml.\\1")) '(x-ml-name (#/([-\w]+)/ ".ml.\\1")) )
メールヘッダのList-IdとX-ML-Nameをみて、「ml\メーリングリスト名」のフォルダに振り分けるシンプルなルールだけど、これだけでもかなり役に立つ。 振り分け先のフォルダが存在しなかった場合には自動的に作成してくれるので、新しいメーリングリストに入ったときも追加の設定がいらないのである。
ルールの記述が終わると、fetchmailでの受信時にscmailが起動するよう、~/.fetchmailrcを書き換える。 具体的には、mdaにscmail-deliverを指定する。
mda "/usr/local/bin/scmail-deliver"
これで、これまでは受信したメールをPostfixに渡していたのが、scmail-deliverへ渡すようになる。 つまり、受信時に限っていうと、Postfixは不要になったようだ。
補足
ちなみにBincIMAPが使用するMaildir++形式は、ピリオド区切りでフォルダを指定する。 たとえば.maildirフォルダに「.ml.tdiary-devel」「.ml.tdiary-theme」があるとすると、IMAPからはこう見える。
+ ml +- tdiary-devel +- tdiary-theme
■ emerge -u system
久しぶりに実行。 昼からずっとコンパイルしてるよ・・・。