[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

filtering with Mail::Audit



On Mon, Sep 25, 2000 at 02:59:46PM -0500, will trillich wrote:

> cool -- that'd be great! (i finally learned the CPAN module... hopefully
> it won't conflict with an apt-get install ...) this sounds wonderful!

    Here you go. 

    Mike

-- 
Michael P. Soulier <msoulier@storm.ca>
"...the word HACK is used as a verb to indicate a massive amount
of nerd-like effort."  -Harley Hahn, A Student's Guide to UNIX
#!/usr/bin/perl

############################################################
# CVS Data:
#
# $Header: /usr/cvsroot/personal/mike/bin/mailfilter,v 1.6 2000/09/25 23:00:03 msoulier Exp $
# $Date: 2000/09/25 23:00:03 $
# $Author: msoulier $
# $Revision: 1.6 $
############################################################

use strict;

use Mail::Audit;

my $mailroot    = "/home/msoulier/Mail";
my $logfile = $mailroot . "/filter.log";
my $rootbox = $mailroot . "/rootbox";
my $spampattern = '\bxxx.*\.com|sex|\$\$|Now!';
my $version = '$Revision: 1.6 $';
$version =~ s/\$|Revision://g;
$version =~ s/^\s+|\s+$//g;

chomp ( my $date = `date` );

my $message = Mail::Audit->new(
    reject => sub { exit 67; }
    );

open (LOGFILE, ">>$logfile")
    or die "Can't open $logfile: $!";

# Select the logfile for all print statements are put
# into the logfile. Less typing.
select LOGFILE;

my $from    = $message->from;
my $to      = $message->to;
my $subject = $message->subject;
my $cc      = $message->cc;
chomp ( $from, $to, $subject, $cc );

my %route = (
    "mutt"          =>      "mutt",
    "nlug"          =>      "nlug",
    "pm-ottawa"     =>      "pm-ottawa",
    "debian"        =>      "debian",
    "gnome"         =>      "gnome",
    "tetex"         =>      "latex",
    "oclug"         =>      "oclug",
    "$spampattern"  =>      "spambox",
);

my @losers = qw();
my $losermessage = "Your message was automatically rejected. Have a nice day.";

print "Mailfilter version $version\n";
print "Date: $date\n";
print "Received message from $from\n";
print "Subject: $subject\n";

for my $what (keys %route) {
    next unless $from =~ /$what/i
        or $to =~ /$what/i
        or $cc =~ /$what/i;
    my $where = $mailroot . '/' . $route{$what};
    print "Accepting to folder $where\n\n";
    $message->accept($where);
}

for my $loser (@losers) {
    next unless $from =~ /$loser/i;
    print "From loser $loser...rejecting...\n\n";
    $message->reject($losermessage);
}

# Hard-coded entry for root messages on this machine.
if ($to eq 'root') {
    print "Sysadmin message. Accepting to $rootbox.\n\n";
    $message->accept($rootbox);
}

# Temporary hard-coded fix to block those stupid
# errors every time I post to the debian list.
if (($from eq 'webmaster@my.netvigator.com')
    and ($subject =~ /undelivered email/))
{
    print "Rejecting stupid Debian error message.\n\n";
    my $reason = "I'm sick of looking at these in my inbox.";
    $message->reject($reason);
}

print "Accepting to inbox.\n\n";
$message->accept;

############################################################
# CVS Log:
############################################################
# $Log: mailfilter,v $
# Revision 1.6  2000/09/25 23:00:03  msoulier
# Added oclug.
#
# Revision 1.5  2000/09/24 20:00:56  msoulier
# Fixed remaining whitespace around version number.
#
# Revision 1.4  2000/09/24 19:56:06  msoulier
# Using keyword expansion to pick up version.
#
# Revision 1.3  2000/09/24 19:50:32  msoulier
# Added hardcoded fix to block those stupid debian-list error messages.
# Added handling for local root messages.
#
# Revision 1.2  2000/09/24 16:28:44  msoulier
# Fixed reject code. Added select for less typing, and added
# a spam pattern.
#
# Revision 1.1.1.1  2000/09/24 16:13:30  msoulier
# Email Filter
#
############################################################

Reply to: