at posts/single.html

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

関連する日記