#!/usr/bin/perl
###############################
#
# (c) Barry Hughes, July 2001
#
# Quick play with Mail::Audit
# to replace procmail and have
# a slightly less arcane 
# recipe language :)
#
###############################
umask 077;

$debug = 0;
# Blug is evil and nasty, so it's going here
$blug = "/usr/bin/mhonarc -add -quiet -umask 022 -multipg -sort -main -tsubsort -rcfile /home/bazza/www/bazza.com/blug/blug.mrc -idxprefix mail -idxfname mail.html -definevars MAIN-TITLE='BLUG' -outdir /home/bazza/www/bazza.com/blug/";
open (LOG,">>/home/bazza/test.log") if $debug;
print LOG "Starting\n" if $debug;
use Mail::Audit;
use Email::Valid;
$incoming = Mail::Audit->new ( noexit => 1 );
$maildir = "/home/bazza/mail/";
unless(Email::Valid->address(-address => $incoming->from,
                             -mxcheck => 1)) {
  $incoming->accept($maildir."spam");
  print LOG "address failed $Email::Valid::Details check.\n" if $debug;
  exit DELIVERED;
}


%lists = (
        "lartc\@mailman.ds9a.nl"        => "lartc",
        "bugtraq\@securityfocus.com"    => "bugtraq",
        "mutt"                          => "mutt",
        "tradeelectronically"           => "TEL",
        "vnl.com"                       => "VNL",
        "krap\@klub.org"                => "krap",
        "esper"                         => "esper",
        "nylug"                         => "nylug",
        "42\@yahoogroups.com"           => "42",
        "pilot-unix"                    => "pilot-unix",
        "gphoto"                        => "gphoto",
        "jokelist"                      => "humour",
        "debian-boot"                   => "debian-boot",
        "debian-laptop"                 => "debian-laptop",
        "debian-security"               => "debian-security",
        "focus-linux"                   => "focus-linux",
        "belfast-pm"                    => "belfast-pm",
        "exim-users"                    => "exim-users",
);
for $pattern (keys %lists) {
  if (($incoming->from =~ /$pattern/i) || ($incoming->to =~ /$pattern/i) || ($incoming->cc =~ /$pattern/i)) {
  $incoming->accept($maildir.$lists{$pattern});
   print LOG "writing mail matching $pattern to $maildir$lists{$pattern}\n" if $debug;
   exit DELIVERED;
 }
}


# Complicated recipes, BLUG writes to a normal mail file as well as running MHONARC on it to archive it for the web

if(($incoming->to =~ /blug\@lists.blackstar/i) || ($incoming->cc =~ /blug\@lists.blackstar/i)) {
  $incoming->accept($maildir."blug");
  $incoming->pipe($blug);
  print LOG "writing BLUG mail\n" if $debug;
  exit DELIVERED;
}

my @rejects = qw/
        stokerace
        Friend\@public.com
        SALBAZ\@webtv.net
        adultfriend
        spam\@bazza.com
        baz\@bazza.com
        tangfeng.org
        ecommercechargecards.com
        ammocity
        mail.reckeweg.de
        /;
foreach(@rejects) {
  if(($incoming->from =~ /$_/) || ($incoming->to =~ /$_/)) {
    $incoming->reject("Bugger off!");
    exit DELIVERED;
  }
}


if(($incoming->to !~ /bazza\@bazza/i) and ($incoming->cc !~ /bazza\@bazza/i)) {
  $incoming->accept($maildir."spam");
  exit DELIVERED;
}


$incoming->accept();

close(LOG);



syntax highlighted by Code2HTML, v. 0.9