courier-imap + fetchmail + maildrop + bsfilter で IMAP 環境 (2)

昨日(courier-imap + fetchmail + maildrop + bsfilter で IMAP 環境 - daily dayflower)の続きです。

昨日も書いたとおり,

  • 外部から POP3 でメールを取得するために fetchmail
  • 取得したメールをローカルサーバの Maildir に inject するために maildrop

を使います。

普通後者には procmail を使うことが多いかと思うんですが,設定の難しさに定評悪評があるようです。それで,当初 scmail を使おうかと思っていたんですが,静かな湖畔の森の香りがただよってきたので気後れしてしまいました*1。いろいろ探していたら,そもそもの Courier シリーズに maildrop という C っぽくルールを記述できるフィルタがあるらしいのでそちらを使うことにしました(参考⇒【http://www.is.titech.ac.jp/~yanagis0/text/maildrop.html】)。

まずは,fetchmail の設定。smtp ではなく mda によって配信するので,.fetchmailrc に以下のような記述をしました。

set postmaster root
set no bouncemail

defaults
protocol pop3
uidl
keep
no rewrite
no mimedecode
mda "/usr/bin/maildrop"

poll メールサーバ名
    user     "POPユーザ名"
    password "POPパスワード"

不要そうな部分があれば誰か教えてください。とりあえずテストなので「keep」と「uidl」をセットして,一般の MUA でいうところの「サーバにメールを保持する」を実現します。

次に maildrop の設定を .mailfilter に書きます。

MAILDIR="$HOME/Maildir/"
DEFAULT=$MAILDIR

logfile "$HOME/maildrop.log"

to "$MAILDIR"

細かい書式は先ほどの参考 URL にゆずりますが,最低限このように書けば標準入力からうけたメールを Maildir に配信してくれます。

いざ取得,のその前に,Maildir を作成しておきましょう。Courier-IMAP に付属の maildirmake を使います。

% maildirmake Maildir
% ls Maildir
cur  new  tmp

これで準備は終わりです。

いざいざ取得。

% fetchmail
.....
skipping message ユーザ名@サーバ名:319 not flushed
skipping message ユーザ名@サーバ名:320 not flushed
reading message ユーザ名@サーバ名:321 of 329 (3037 octets)... not flushed
reading message ユーザ名@サーバ名:322 of 329 (2416 octets).. not flushed
.....

これで自分の INBOX にメールがたまっているはずなので,Courier IMAP サーバを立ち上げて,外部から MUAIMAP 経由で接続してメールが読み取れれば OK です。

ここまではまだ SPAM フィルタリングはしていません。bsfilter ではあらかじめある程度学習させたほうがよさそうなので,上記のセッティングでメールをためてから,まずは手動で SPAM と HAM を選別してください。私は MUA で受信トレイの下に spam と ham というフォルダを作成し,その下につっこんでいきました。

以降明日に続きます。

*1:MIME エンコードされた日本語ヘッダを扱うには scmail が都合がいいのですが,今回は細かい振り分けは MUA たる Thunderbird にまかせるのでそれはいいやという割り切りです