#!/usr/bin/perl

# sortmail 2.0

# Written by John Gotts <jgotts@engin.umich.edu>.

# Based upon a script written by Jonathan Sharley <jd@matchlogic.com>.

# Sample .sortmail configuration file:

# linux-kernel@vger.rutgers.edu,kernel
# geeks@monkey.org,geeks

$home_directory = $ENV{"HOME"};

# Make sure that two sortmail processes don't run concurrently.

if (-e "$home_directory/sortmail-lock") {
        print "Another copy of sortmail is already running.\n";
	exit;
}
system ("/bin/touch $home_directory/sortmail-lock");

open (INC, "inc |") || die "inc not found!";
while (<INC>) {
   if ($lines == 2) {
      chop($_);
      $first_number = $_;
      $first_number =~ s/^\s*(\d+)\+\s+.*/\1/;
      $last_number = $first_number;
   } elsif ($lines < 2) {
      print $_;
   } else {
      chop($_);
      $last_number = $_;
      $last_number =~ s/^\s*(\d+)\s+.*/\1/;
   }
   $lines++;
}
close INC;
if ($lines == 0) {
   system ("/bin/rm -f $home_directory/sortmail-lock");
   exit;
}

$messages = $lines - 2;
print "$messages messages incorporated.\n\n";

# Scanning mail and storing info
print "Filtering mail...\n\n";

# Read in the configuration file
$config_file = "$home_directory/.sortmail";
open (CONFIG_FILE, $config_file);
while (<CONFIG_FILE>) {
   $config_lines[$#config_lines + 1] = $_;
}
close CONFIG_FILE;

while($line = pop(@config_lines)) {
   @parsed_line=split(',', $line);
   $directory = pop(parsed_line);
   chop($directory);
   $name = pop(parsed_line);
   # According to the man page we don't need this, but I'm not so sure about
   # that...
   mkdir ("$home_directory/mail/$directory", MODE) unless -e "$home_directory/mail/$directory";
   chmod 0700, "$home_directory/mail/$directory";
   $count = 0;
   for ($i = $first_number; $i <= $last_number; $i++) {
      if (-e "$home_directory/mail/inbox/${i}") {
         open (MESSAGE, "$home_directory/mail/inbox/$i");
         while (<MESSAGE>) {
            if ($_ =~ /^$/) {
               seek MESSAGE, 0, 2;
               break;
            }
            if ($_ =~ /$name/i) { 
              `refile $i +$directory`;
               $count++;
               $messages--;
               seek MESSAGE, 0, 2;
               break;
            }
         }
         close MESSAGE;
      }
   }
   if ($count == 1) {
      print "1 message from $name refiled in $directory.\n";
   } elsif ($count > 1) {
      print "$count messages from $name refiled in $directory.\n";
   }
}
if ($messages == 1) {
   print "1 message left in inbox.\n";
} elsif ($messages > 1) {
   print "$messages messages left in inbox.\n";
}
system ("/bin/rm -f $home_directory/sortmail-lock");
