Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Sendmail pairs

by Limbic~Region (Chancellor)
on Sep 14, 2002 at 19:13 UTC ( #197911=sourcecode: print w/replies, xml ) Need Help??
Category: [E-Mail Programs] or [Text Processing]
Author/Contact Info Limbic~Region
Description: Builds a hash whose index is a "from" "to" pair, and then increments it every time the pair is encountered. Finally, the information is sorted displaying the highest pairs first. Tested on HPUX 11.0 running Sendmail 8.9.3.

One of my many hats I wear at work is Email administrator. One of the toughest jobs I have is identifying mail loops that are eating up system resources. I found a great program here that did way more than I wanted, but it was written in C (powers that be wouldn't go for it). I also found this on CPAN, but it didn't do what I wanted. After performing a Super Search here, I decided to write my own. It is VERY unpolished. Ideas that someone else could use to make this a much better program are:

  • Provide ability to specify location of mail log
  • Clean up output (trailing commas, <>, etc)
  • Keep track of message size between pairs
  • Parse status messages (deffered, user unknown, etc)

    If anyone finds this useful and decides to implement any of those suggestions, let me know. For now, it is functional, but it can always be better.

    #!/usr/bin/perl -w
    use strict;
    open(SENDMAIL, "/var/adm/syslog/mail.log");
    my %pairs;
    my %from;
    while (my $line = <SENDMAIL>) {
     chomp $line;
     my @fields = split(" ", $line);
     next if ( $fields[6] !~ /to=/ && $fields[6] !~ /from=/ );
     if ( $fields[6] =~ /from=/ ) {
      $from{$fields[5]} = "\L$fields[6]";
     else {
      $pairs{"$from{$fields[5]} \L$fields[6]"}++;
    foreach my $key (sort {$pairs{$b} <=> $pairs{$a}} (keys(%pairs))) {
     print "$pairs{$key} $key\n";



  • Replies are listed 'Best First'.
    Re: Sendmail pairs
    by rob_au (Abbot) on Sep 15, 2002 at 00:24 UTC
      It may be worth having a look at the SyslogScan package on CPAN - This package can be used to parse sendmail logs and return a wealth of information on mail usage. For example, using this package, your code could be reduced to:
      use SyslogScan::DeliveryIterator; use strict; my $logs = [ '/var/adm/syslog/mail.log' ]; my $iterator = new SyslogScan::DeliveryIterator( syslogList => $logs ) +; while ( my $delivery = $iterator->next() ){ print $delivery->{Sender} . " -> " . join( ",", @{$delivery->{ReceiverList}} ), "\n"; }

      This package is also discussed in the sample chapter of the excellent resource "Perl for System Administration" which can be found here.


    Log In?

    What's my password?
    Create A New User
    Node Status?
    node history
    Node Type: sourcecode [id://197911]
    [haukex]: I figure someone who wants to contribute will know how to install the missing modules ;-) Not the nicest way to go but I don't think many people are using my modules yet
    [ambrus]: Corion: some of these stupid syntax highlighters assume that too. just look at the table in http://perldoc. functions/pack. html for example.
    [haukex]: ..."yet" ;-) I haven't had to deal with Dist::Zilla yet but I've heard about how it's a big setup
    [ambrus]: I really don't like automagic stuff. I'm happy when computers do exactly what I tell them, even if that means they sometimes do the wrong thing.
    [ambrus]: And I don't much like syntax highlighters. If you need a syntax highlighter to understand your code, then your code is written unclear.
    [ambrus]: And if you need a syntax highlighter to color parenthesis green and numbers black and letters blue, then you're using the wrong font.
    [ambrus]: I have to tolerate syntax highlighters when other people use them, but I don't use them myself. And sorry for the rant.

    How do I use this? | Other CB clients
    Other Users?
    Others having an uproarious good time at the Monastery: (11)
    As of 2017-02-27 12:43 GMT
    Find Nodes?
      Voting Booth?
      Before electricity was invented, what was the Electric Eel called?

      Results (385 votes). Check out past polls.