#!/usr/bin/perl
################################################################################
#    Copyright  XM Solutions  2000
#    Original file by: Ed Pascoe <ed@pascoe.co.za>
#
#    $Id: bouncewipe,v 1.1 2003/05/28 13:37:42 elp Exp $
################################################################################

#Defaults
$days=30;
$ENV{PATH}="/bin:/usr/bin:/usr/sbin:/sbin";

#-------------------------------------------------------------------------------
sub showUsage(){
  print <<_EOM;
Usage:
  $0  [options]
  Options:
    --verbose or -v     Show more information
    --days  or -D       Specify age to delete default is $days
    --silent            Even quieter
    --force		Force delivery instead of deleteing (may be slow!)    
_EOM
exit;
}
#-------------------------------------------------------------------------------
sub expandtime($){ #Returns number of days frozen in queue
   my ($raw)=@_;
   if($raw =~ /(\d+)(\D+)/){
      my ($count,$type) = ($1,$2);
      return 0 if ($type eq 'm');
      return int($count/24) if ($type eq 'h');
      return int($count) if ($type eq 'd');
   } else {
      print "Fail on $raw\n";
      return 0;
   }
}

#-------------------------------------------------------------------------------
#MAIN
#-------------------------------------------------------------------------------
use Getopt::Long;

GetOptions (
   'verbose' => \$verbose,
   'v'       => \$verbose,
   'days=i'  => \$days,
   'D=i'     => \$days,
   'silent'  => \$silent,
   'force'  =>  \$force,
   'help'    => \$showusage,
   'h'       => \$showusage,
  );

showUsage() if ($showusage);
open(PIPE,"mailq | grep '<>'|") || die("Error: $!");
while(<PIPE>){
   chop;
   s/^\s*//;
   my ($time,$size,$mid,$from,$rest) = split(/\s+/);
   $time=expandtime($time); 
   if ($time >= $days){ #Message old
      $silent = "> /dev/null 2> /dev/null" if ($silent);
      if ($force){
         print "Forcing delivery of message $mid\n" unless($silent);
	 system("exim -M $mid $silent");
      } else {
	 system("exim -Mrm $mid $silent");
      }
   } else {
      print "$mid is less than $days days old...not deleting\n" if ($verbose);
   }
 
   
}

close PIPE;

