#!/usr/bin/perl # sortmail 2.0 # Written by John Gotts . # Based upon a script written by Jonathan Sharley . # 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 () { 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_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 () { 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");