- blogs:
- cles::blog

サーバーサイドのメール振り分けを maildrop から Pigeonhole Sieve に




自前サーバで IMAP を使う利点はサーバサイドでメールのフォルダ振り分けができることにあります。
これまではメールの振り分けに Courier maildrop を使っていたのですが、MTA を qmail から Postfix に乗り換えたところ、Postfix の仕様でバーチャルドメインの配送( virtual_transport = virtual )では .forward が使えないということで、思い切って配送に Dovecot LMTP (virtual_transport = lmtp:unix:private/dovecot-lmtp) を使うようにしてみました。
Dovecot LMTP を配送に使ったとしても、依然として maildrop や procmail 等の外部プログラムの呼び出しはできません。しかしながら、Dovecot には Sieve*1 と呼ばれているメール向けのフィルタリング言語を実装した Pigeonhole という処理系がプラグインとして含まれています。今回はこれを有効化してやることで、maildrop や procmail 等の外部プログラムを起動できなくても Dovecot だけでフィルタリング処理を完結させるように構築してみました。
† フィルタリングの定義はメーラーから変更できる
これまでサーバサイドにあるフィルタリングの定義のメンテナンスは ssh でログインしてターミナルから行っていました。Pigeonhole には ManageSieve Server というフィルタリングの定義を管理するためのサーバ機能が用意されており、これを使うと ssh 等を使わずにフィルタ定義のメンテナンスが可能です。このプロトコル自体は RFC 5804 - A Protocol for Remotely Managing Sieve Scripts で定義されているようです。
このプロトコルに対応したクライアントは何種類もあるようですが、僕は普段、メーラとして Thunderbird を使っているので、Thunderbird Sieve Extension を使うことにしました。
注意点としてはプロジェクトのサイト thsmi/sieve にも書いてあるように SASL Plain と Login にしか対応していないことと、現状の Thunderbird 最新版 ( 45.6.0 ) で動作させるためには Development Builds に置いてある最新版 ( sieve-0.2.3h.xpi ) を使う必要があることでしょうか。
例えば X-ML-Name が foo か bar か baz の場合には INBOX.foobarbaz フォルダに振り分け、それ以外はデフォルトのフォルダに保存する場合には以下のようなスクリプトになります。全般的に事例が少ないので苦労しましたが、メーラーに向かってプログラミングするというのは新鮮ですね。リアルタイムで構文チェックしてくれるところも便利です。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/9054
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110648)
3 . 年次の人間ドックへ(110279)
4 . 2023 年分の確定申告完了!(1つめ)(109815)
5 . 三菱鉛筆がラミーを買収(109718)