[Qmhandle-devel] patch for qmHandle
Brought to you by:
cchan-freetown
From: Michele B. <mb...@it...> - 2003-11-17 13:23:00
|
Same thing... ----- Forwarded message from Arne Bernin <ar...@uc...> ----- From: Arne Bernin <ar...@uc...> To: ar...@us... Subject: patch for qmHandle Organization: Hi Michele! attached is a patch that adds a new feature to qmHandle: deleting messages based on the subject. I use this to get rid of thousands of "failure notice" messages on one of my mail servers... usage is something like: ./qmHandle -S"failure notice" and all the nasty messages will go away ;-) oh you can use regular expressions for the subject stuff, something like ./qmHandle -S"failure.*" will work... thanks for qmHandle, and best regards, arne -- ----------------------------------------------------------------------------- Arne Bernin <ar...@uc...> Jessenstrasse 22 Tel +49 40 32871381 22767 Hamburg Fax +49 40 32871382 PGP/GPG fingerprint= AEC5 6A29 8B07 6857 58AB 3057 5A75 0C12 AF17 5E04 key server: http://pgp.mit.edu/ --- qmHandle.orig Fri Jul 11 11:31:08 2003 +++ qmHandle Wed Sep 17 04:33:35 2003 @@ -67,6 +67,7 @@ $arg eq '-s' and do { push @actions, "&Stats()"; last SWITCH; }; $arg =~ /^-v(.+)/ and do { push @actions, "&ViewMsg($1)"; last SWITCH; }; $arg =~ /^-d(.+)/ and do { push @actions, "&DelMsg($1)"; last SWITCH; }; + $arg =~ /^-S(.+)/ and do { push @actions, "&DelMsgSubj(\"$1\")"; last SWITCH; }; $arg eq '-D' and do { push @actions, "&DelAll()"; last SWITCH; }; &Usage(); } @@ -120,6 +121,70 @@ } } +sub GetSubject { + my $msg = shift; + my $msgsub; + open (MSG, "${queue}mess/$msg") or die("cannot open message $msg"); + while (<MSG>) { + if ( $_ =~ /^Subject: /) { + $msgsub = $'; + chop ($msgsub); + } elsif ( $_ eq "\n") { + last; + } + + } + close (MSG); + return $msgsub; +} + + +# delete all messages with the following subject. + +sub DelMsgSubj { + my $subject = shift; + my $msgsub; + my $delnum = 0; + + # Stop qmail if needed + &stopQmail() or die "Could not kill off qmail: $!"; + + print "searching for messages with Subject:$subject\n"; + + # Search messages + my ($ok) = 0; + foreach my $msg (@msglist) { + $msgsub = GetSubject($msg); + + + if ($msgsub and $msgsub =~ /$subject/) { + + $ok = 1; + print "Deleting message $msg...\n"; + unlink "${queue}mess/$msg"; + unlink "${queue}info/$msg"; + if ($type{$msg} eq 'R') { + unlink "${queue}remote/$msg"; + } else { + unlink "${queue}local/$msg"; + } + $delnum++; + } + } + + # If no messages are found, print a notice + if ($ok == 0) { + print "No messages matching Subject \"$subject\" found in the queue!\n"; + } else { + print "$delnum messages deleted\n"; + } + + # Restart qmail if needed + &startQmail(); +} + + + # Display message list # pass parameter of queue NOT to list! i.e. if you want remote only, pass L # if you want local, pass R if you want all pass anything else eg A @@ -400,18 +465,19 @@ print "qmHandle v1.1.1\n"; print "Copyright 1998-2003 Michele Beltrame\n\n"; print "Wrong parameters entered, available ones are:\n"; - print " -a : try to send queued messages now (qmail must be running)\n"; - print " -l : list message queues\n"; - print " -L : list local message queue\n"; - print " -R : list remote message queue\n"; - print " -s : show some statistics\n"; - print " -vN : display message number N\n"; - print " -dN : delete message number N\n"; - print " -D : delete all messages in the queue (local & remote)\n"; + print " -a : try to send queued messages now (qmail must be running)\n"; + print " -l : list message queues\n"; + print " -L : list local message queue\n"; + print " -R : list remote message queue\n"; + print " -s : show some statistics\n"; + print " -vN : display message number N\n"; + print " -dN : delete message number N\n"; + print " -D : delete all messages in the queue (local & remote)\n"; + print " -S\"Text\" : delete all messages that have Text as Subject\n"; print "Additional (optional) parameters are:\n"; - print " -c : display colored output\n"; - print " -N : list message numbers only\n"; - print " (to be used either with -l, -L or -R)\n\n"; + print " -c : display colored output\n"; + print " -N : list message numbers only\n"; + print " (to be used either with -l, -L or -R)\n\n"; print "You can view/delete multiple message i.e. -d123 -v456 -d567\n\n"; exit 1; } ----- End forwarded message ----- -- Michele Beltrame http://www.italpro.net/mb/ ICQ# 76660101 - e-mail: mb...@it... |