【 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 さんのご指摘のように、プライバシーへの配慮を忘れないでください。 |