#!/usr/bin/perl -w # # Rough shot at how much spam I'm getting # # Note the input, from.old, is just a procmail log file. # use Getopt::Long; use strict; my ( $mails, $mailbytes ) = ( 0, 0 ); my ( $spams, $spambytes ) = ( 0, 0 ); my %folders; my $logfile; my $mode = "mailshot"; GetOptions( "mode=s" => \$mode, "logfile=s" => \$logfile ) or die $!; $logfile ||= "$ENV{'HOME'}/Mail/from.1"; if ( open( LOG, $logfile )) { while () { next unless /^\s*Folder:\s*(.*) (\d+)$/; my ( $folder, $bytes ) = ( $1, $2 ); $folder =~ s/\s*$//; $mails++; $mailbytes += $bytes; if ( $folder =~ m{^caughtspam|^/dev/null$} ) { $spams++; $spambytes += $bytes; } my ( $folderbytes, $foldermails ) = ( 0, 0 ); if ( defined( $folders{$folder})) { ( $folderbytes, $foldermails ) = @{$folders{$folder}}; } $foldermails ++; $folderbytes += $bytes; $folders{$folder} = [ $folderbytes, $foldermails ]; } if ( $mode eq "mailshot" ) { print "Total mail processed:\n $mails mail(s) ($mailbytes bytes)\n"; printf " %3d spam(s) ($spambytes bytes)\n\n", $spams; if ( $mails and $mailbytes ) { for my $folder ( sort keys %folders ) { my ( $spambytes, $spams ) = @{$folders{$folder}}; printf( "$folder:\n %d mail(s) (%.2g%%), %.2g%% by size\n", $spams, $spams/$mails * 100, $spambytes/$mailbytes * 100 ); } } } elsif ( $mode eq "mrtg" ) { print "$mails\n"; print "$spams\n"; print "quite some time\n"; print "Waider's Mail Counter\n"; } }