qmailの拡張で、メールをアーカイブしてみる!(Qmail Tap)

枯れに枯れたものを変態使いするのもまた、カッコイイなと思う今日この頃。

こんにちは、森屋です。

当社ではqmailがまだまだ活躍しておりますが、qmailは本体の開発が止まっている半面、有志によって作成された様々な拡張機能が、ネットに沢山転がっています。

その中から、本日はQmail Tap(qmailtap/qmail-tap...正式名称はどれだ)をご紹介したいと思います。

Qmail tapとは?

タイトルにも挙げていますが、 qmailでメールをアーカイブする ことができる拡張機能です。 メールアーカイバの導入理由は色々あるかとは思いますが、コイツが実現できるのは、

送信/受信メールを意識せずどこかに転送したい

というニーズに応えることです。具体的に言うと、

あるメールアドレス(から送った/に届いた)メールをBCCで任意のアドレスに転送する

というものです。 アーカイブ用アドレスに転送してプールするほか、例えば「部下のメールを監視する」といった様なことを実現します。

Qmail Tapの導入方法

パッケージ入手

利用者が少ないのか、情報はかなり乏しいです。 公式な配布元としては以下になると思うのですが、ご覧頂ければおわかりの通り、肝心のパッチファイルがリンク切れです...。

http://www.inter7.com/qmail-tap-archiving-system/

私は広大なネットの海をさまよった末やっとの思いでパッケージを手に入れたのですが、後日判明したところによると、「qmail-taps-extended」という更なる拡張版の存在を知りましたので、こちらの配布元をご紹介します。

http://patchlog.com/patches/qmail-taps-extended/

インストール

○任意のディレクトリにパッチを設置
cd /usr/local/src/
wget http://patchlog.com/downloads/qmail-taps-extended-full.patch
※パッチの中身でパッケージ名が「qmail-1.03-ded-ip」となっているので、適宜変更
○ソースにパッチを適用
patch -p0 < qmail-taps-extended-full.patch   ←qmailtapを含めて初期インストールする場合
もしくは
patch -p0 < qmail-taps-extended-diff.patch   ←qmailtapを既にインストールしている場合
○コンパイル&インストール
cd パッケージ名/
make setup
/etc/init.d/qmail stop
./install
/etc/init.d/qmail start

設定方法

設定ファイルは、/var/qmail/control/配下に、「taps」というファイルを設置することで即時反映されます。(qmail再起動不要)

基本的な書式は、

操作種別:転送元:転送先

です。

操作種別は三種類あり、以下を参考に「F」「T」「A」から選びます。

★Fromだけでマッチさせたい
---------------------------------------
F:^AAAA@denet\.co\.jp:BBBB@gmail.com
---------------------------------------
FromにAAAA@が含まれているメール(AAAA@の送信メール)をBBBB@にBCC配送
★Toだけでマッチさせたい
---------------------------------------
T:^CCCC@example\.com:DDDD@db-force.net
---------------------------------------
ToにCCCC@が含まれているメール(CCCC@の受信メール)をDDDD@にBCC配送
★従来通り、FromもToもどちらもマッチさせたい
---------------------------------------
A:^EEEE@example\.com:FFFF@yahoo.co.jp
---------------------------------------
FromとTo(CC,BCC含む)にEEEE@が含まれているメール(EEEE@の全てのメールやりとり)をFFFF@にBCC配送

正規表現について

先ほどの例において、転送元に色々記号を付けていました。これは、正規表現が使えるために付けたものです。

これを怠ると、想定外のマッチをしてしまうことがあるため、行頭を示す「^(ハット)」を付けたり、何でも一文字補完する「.(ドット/ピリオド)」を「(バックスラッシュ)」でエスケープさせています。

例えば、とある森さん(仮名:t.mori@denet.co.jp)のケース。

F:t.mori@denet.co.jp:bcc1@denet.co.jp
F:tamori@denet.co.jp:bcc2@denet.co.jp

qmailtapはルールの上から検証し、最初にマッチした時点で検証が完了します。

この状態でタモリさんにメールが来ると、正規表現によって「t.mori@denet.co.jp」の方が先にマッチし、森さんが送るメールはbcc1@に転送され(正常)、タモリさんが送るメールまでもがbcc1@に転送されてしまいます(異常)。

t.mori@denet.co.jp → "."=何でも一文字補完による変換 → tamori@denet.co.jpと表すことができる

こういったケースを防ぐため、正規表現となりうる表記は全てエスケープさせることを推奨します。

その他の動作

  • ファイルの上から順に評価され、マッチしたらそこで評価が終了
  • マッチングの流れは、まずFromアドレスを全チェックし、次にToアドレスをチェック
  • 一行で複数の転送先指定は不可 = 転送先の複数指定は不可(ML等で補う必要有り)
  • 一つの転送先に転送元が複数ある場合は、一行ずつ書けば問題ない
  • 転送先にはリモートのメールアドレス(利用しているメールサーバ外で管理されている宛先)も指定可
  • 転送先が通常の転送設定(メールボックス配下の.qmailファイルで定義される転送)を行っていた場合、メールがループするおそれがある
    これは、通常の転送で処理されるメールが、新たにFrom/Toアドレスを付けて配送を開始するためです
    回避するには、メールエイリアス(/home/vpopmail/ドメイン名/.qmail-アカウント名)での通常転送に切り替える必要があります

留意しておくべきはこのあたりかな、という感じです。

最後に

なかなかニッチな需要かもしれませんが、私は困ったので誰かの救いになればと...!

qmail独特の動きを把握してからではないと、なかなか挙動に混乱することもあるかもしれませんが、ひとたび導入してしまえば便利なものです。

本来のqmailの軽快な動作に対しても、あまり影響は無いと思います。
(ループしたメールが、あっという間に万単位の数に膨れ上がったので...orz)

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA