#!/usr/bin/perl # Arary for doing grepping over multiple domains @domains = ( "ebay.com", "paypal.com" ); my %mails = (); my $users = {}; # This makes it a hash ref my $count = 0; open MAIL, "/var/log/mail"; while () { m/from/ || next; my $matched = 0; foreach my $domain (@domains) { m/$domain/ && $matched++; } $matched || next; m/connect/ && next; m/reject/ && next; m/\s+(.*?):\s+(.*?)\n?$/ || next; $mails{$1} = $2; $count++; } close MAIL; open MAIL, "/var/log/mail"; while () { m/sasl/ || next; foreach my $smtpid ( keys %mails ) { m/$smtpid/ || next; m/sasl_username=(.*)/ || next; my $from = $mails{$smtpid}; $users->{$1}{$smtpid} = $from; } } close MAIL; print "Found $count messages total\n"; foreach my $user ( keys %{$users} ) { my $user_total = scalar keys %{ $users->{$user} }; print "user $user ($user_total total)\n"; foreach my $smtpid ( sort keys %{ $users->{$user} } ) { print "\t$smtpid (from $users->{$user}{$smtpid})\n"; } }