枯れに枯れたものを変態使いするのもまた、カッコイイなと思う今日この頃。
こんにちは、森屋です。
当社では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)