#!/usr/bin/perl
# użycie: show-reason N
# gdzie N jest liczbą (patrz niżej punkt 2)
#
# wydruk składa się z 2 części
# 1) zawiera posortowaną listę IPków ze statystyką ilości odrzuconych przesyłek
# 2) to lista ostatnich 60 (można podać jako parametr skryptu) odrzuconych przesyłek.

$n=$ARGV[0]?$ARGV[0]:60;

$i=0;
open(plik,'/var/log/mail/info');
while (<plik>) {
        if ( /^(.{15}).+NOQUEUE.+\s([a-zA-Z0-9\.-]+)\[(\d+\.\d+\.\d+\.\d+)\].+(55[0-9]).+((Client|Helo|Sender|Recipient)[^;]+)(\[\d+\.\d+\.\d+\.\d+\])?[!;,]/ ) {
                $ipek=$3;
                $ip{$3}++;
                $reason{$3}=$5;
                $host{$3}=$2;
                $reply{$5}++;
                $x{$i}=sprintf "%s %s %s %s %s\n",$1,$2,$3,$4,$5;
		$i++;
		if ($i>=$n) {
			$i=0;
			}
                }
        if ( /^(.{15}).+reject: (body|header).+from ([a-zA-Z0-9\.-]+)\[(\d+\.\d+\.\d+\.\d+)\]?[!;,]/ ) {
                $ipek=$4;
                $ip{$ipek}++;
                $reason{$ipek}=$2;
                $host{$ipek}=$3;
                $x{$i}=sprintf "%s %s %s %s\n",$1,$2,$3,$4;
		$i++;
		if ($i>=$n) {
			$i=0;
			}
                }
        }

foreach $key (sort keys %reason) { 
        $x=sprintf "%47s %3s %-85.85s\n",substr($host{$key}." ".$key,-47),$ip{$key},$reason{$key};
        print $x;
	}
printf "\n\n";

for ($j=0;$j<$n;$j++) {
	print $x{$i};
	$i++;
	if ($i>=$n) {
		$i=0;
		}
	}
