< 質 問 >
ドメイン/ユーザごとのロギング

みなさんのおかげでXMail Serverを
立ち上げることができました。
会社一同喜んでおります。

さて質問があります。
ドメインごとに、またはユーザごとに
全メッセージのログを取るにはどしたら
いいのでしょうか。
そんなことはできないのでしょうか。

matsu (05.31/01)


【 senshu (06.01/01) 】

matsu さん、こんにちは。

XMail のサイトに、

http://xmail.eye-catcher.com/products/XMailStats/

が紹介されています。

希望の処理をする場合の参考にはなると思います。



【 matsu (06.01/01) 】

senshuさん、ありがとうございます。
行ってみましたが、これはアクセスログを
見るためのツールですね。
質問内容があいまいになってしまいましたが、
メッセージそのものをそっくり残すためには
使えないのではないかと思いました。

PERLスクリプトはなんとか書けるのですが、
そもそもそれをどう実行したらいいのか
具体的な手順が分かりません。



【 senshu (06.01/01) 】

全てのメールの内容のログですか、、、。
プライバシー上の問題も起きそうですが、こういう要求もあるのですね。

Firewall で通過するパケットを捕らえる方法もあるでしょうが、XMail で実現するなら、全てのメールの配送にフィルタを入れ、それでメッセージを保存するくらいしか思いつきません。

識者の意見を待ちたいと思います。



【 cop (06.03/01) 】

matsu さん

senshu さんのアドバイスのように、フィルタを作ることになります。

環境が Windows だとすると、matsu@domain.com さんあてのメールをフィルタ C:\folder\log.pl を使って C:\folder\matsu@domain.com.log に記録するとすれば、具体的には以下のようになります。

1. MailRoot\filters に以下の内容のテキストファイルを matsu@domain.com.tab という名前で置く(項目間はタブ)。

"perl" "C:\folder\log.pl" "@@FILE"

2. フィルタ(Perl スクリプト)log.pl を適切に書く。

3. それだけ。

-----
@@FILE というのは到着メッセージのファイルで、システムフォルダ内に XMail Server が一時的に作成するものです。これは Perl スクリプト log.pl の引数になるので、スクリプト内では @ARGV[0] でそのファイルを扱うことができます。よって、スクリプトの概要は以下のようになるでしょうか。

#!C:/usr/local/bin/perl.exe

$logfile = 'C:\folder\matsu@domain.com.log';
$msgfile = "@ARGV]0]";

open(LOG,">>$logfile");
    flock(LOG,2);
    open(MAIL,"$msgfile");
        while (<MAIL>){
            print LOG "$_";
        }
    close(MAIL);
close(LOG);
exit;

-----
スクリプトは自由に書けます(言わずもがな?)。メッセージを加工することも可能です。加工した場合、同名($ARGV[0])で保存します。そのメッセージをそこで行き止まり(受信拒否)にするにはスクリプトの終了部分で exit 99; とします。

また、フィルタの定義を

"perl" "C:\folder\log.pl" "@@FILE" "@@FROM" "@@RCPT"

とすれば、Perl スクリプト内ではメッセージの送信者アドレスとして $ARGV[1] を、あて先アドレスとして $ARGV[2] を使うことができるので、送信者が特定のアドレスである場合だけ何かの処理を行うというようなことが可能です。

なお、個人あてではなく、ドメイン domain.com に対する全メッセージを記録するにはフィルタ名を domain.com.tab にします。また、全ドメインを記録するのであれば、フィルタ名を .tab にします(ドットファイル)。

#senshu さんのご指摘のように、プライバシーへの配慮を忘れないでください。



【 matsu (06.04/01) 】

copさん、ご指導ありがとうございます。
フィルタというものがどういうものか
やっとイメージが沸くようになりました。
具体的にご教示いただき、本当にありがとう
ございます。
すぐに実現できそうです。


記事の先頭へ▲ 
SUPER LABORATORY