トップ «前の日記(2004-02-07 (土)) 最新 次の日記(2004-02-09 (月))»  

まちゅダイアリー


2004-02-08 (日)

メール振り分け

fetchmailで取得したメールを、受信時に自動的にフォルダへ振り分けたいと思う。 procmailがメジャーなようだけど、設定ファイルの記述が少し難解だな・・・と思っていたら、bg66's Weblogにてscmailというのが紹介されていた。

通常の振り分け規則は簡単な S式で書ける

S式って何?と思いつつも、簡単というところに惹かれてこれを使うことにしてみた。 おっ、ベイジアンフィルタも同梱されているみたい。 まぁ、こっちはbsfilterを使うかもしれないけど。

scmailは、ちょうど2日前の2月5日に1.0が出たばかり(約1年ぶりの更新)らしい。 タイミングいいなぁ。

Tags: Gentoo

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
ベイジアンメールフィルタ
Tags: Gentoo

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
Tags: Gentoo

emerge -u system

久しぶりに実行。 昼からずっとコンパイルしてるよ・・・。

Tags: Gentoo