2009年4月9日木曜日

sendmail の .forward で、メールの任意の行をログに出力

以前のネタ、sendmail で リレーするメールの DATA 部分をログに記録する の局地限定仕様版。
全アカウントの全メールをログに書き出しているとさすがに大変なので、ピンポイントで調査する時になど向け。
 

要点だけ言うと、 .forward にコマンドなりスクリプトなりを書いて、必要なものだけログに出力してしまおうという話。
 
 


例えば 特定のメールアドレスに送られてくるメールの Subject だけを記録したいという場合。
 

該当アカウントのホームディレクトリにある ".forward" ファイルを編集する、なければ作る。
"|grep '^Subject\:'>>/tmp/testlog.txt"
\{バックスラッシュ+元のアドレスという行}


と記述しておけば "Subject:" で始まる行だけログに記録できる、記録先はパーミッションのあるところなら何でもOK。
ちなみに2行目がないとメール消えちゃうので注意。
 
 

結局、標準出力を処理するだけなので単純だ、他の情報も grep のところで簡単な正規表現で出来るはず。
貰ったメールの内容を条件に、ログ記録以外で色々やりたいなら シェル やら perl やらでスクリプト書けばOK。
 

もし出来ない場合は smrsh などが原因ちゃうかな、ログを見たら良いと思う。
さらにSendmailに限った話でもないけど、試したのがSendmailだったからで、大体のMTAで似たようなこと出来るはず。