+"=rosbug"
[PerlMail.git] / My-Audit.pm
index 20ffb81..d6e924f 100644 (file)
@@ -4,7 +4,7 @@ sub audit_init
 {
        %audit_profile=(
                        "btw"   =>[],
-                       "silent"=>["=btw"   ,"did","syslog"],
+                       "silent"=>["=btw"   ,"did"],
                        "log"   =>["=silent","syslog"],
                        "bell"  =>["=log"   ,"bell"],
                        "sms"   =>["=bell"  ,"sms=1"],
@@ -19,15 +19,15 @@ sub audit_init
                        { "SqueezeControl"=>"max"   ,"SQZ_OPTIMIZE_LEVEL"=>0 },
                        { "SqueezeControl"=>"max"   ,"SQZ_OPTIMIZE_LEVEL"=>1 },
                        );
+       @alternates_host=(
+                       "jabberwock.ucw.cz",    # short@ucw.cz
+                       "atrey.karlin.mff.cuni.cz",     # short@atrey.karlin.mff.cuni.cz
+                       "k332.feld.cvut.cz",    # short@k332.feld.cvut.cz
+                       );
 }
 
 sub audit
 {
-       {
-               local $store_ignorenewmail=1;   # no reason now, just a paranoia
-               store "=input","btw";
-               }
-
        # TODO: <short-m@> storage?
 
        # never spawn new mail if FROM_MAILER
@@ -39,16 +39,6 @@ sub audit
                        || headerhas "From",'<Regexp:^owner->'
                        );
 
-       # spam detection
-       return if did sub {
-               local $store_profile="silent";
-               local $_;
-               store "=spam-rbl"                  .";$_"  if $_=$Audit->rblcheck();
-               store "=spam-razor".($_ eq 1 ? "" : ";$_") if $_=razor2();
-               # I don't send viruses but viruses propagate mails of mine
-               store "=spam-av"                           if headeris "X-Mailer",'ravmd/8.3.2';
-               };
-
        # spam honeypots
        return if did sub {
                local $_;
@@ -58,6 +48,7 @@ sub audit
                store "=spamo"        if headeris "From",'<ghandchi@hotmail.com>';
                store "=spamo"        if headeris "From",'<newsletter@levnapc.cz>';
                store "=spamo"        if headeris "From",'<Tomas@dtpstudio.cz>';
+               store "=spamo"        if headeris "From",'<BNcom@email.bn.com>';
                {
                        # weak detection: files with text/html w/o text/plain are usually a spam
                        my @types_linear=map({ mime_type($_); } parts_linear());
@@ -66,6 +57,18 @@ sub audit
                store "=spamo-big5" if ($_=mimehead(body_first())->mime_attr("Content-Type.charset")) && /^big5/i;
                };
 
+       # spam detection
+       return if did sub {
+               local $store_profile="silent";
+               local $_;
+               store "=spam-abuse"                .";$_","log" if $_=dnsbl '.blackholes.mail-abuse.org.' ,1;   # all hosts
+               # we don't check all hosts as they can be "dialup" category, FIXME: check for it
+               store "=spam-five"                 .";$_","log" if $_=dnsbl '.blackholes.five-ten-sg.com.',0; # just first
+               store "=spam-razor".($_ eq 1 ? "" : ";$_")      if $_=razor2();
+               # I don't send viruses but viruses propagate mails of mine
+               store "=spam-av"                                if headeris "X-Mailer",'ravmd/8.3.2';
+               };
+
        # special delivery
        store "=err","bell" and return if headerhas \&Received_for,'<short+err@>';
 
@@ -98,6 +101,7 @@ sub audit
                                <satko@quanto.nr.sanet.sk>
                                <vithous@attorney.cz> <viroman@attorney.cz>
                                <konf@klain.cz>
+                               <stein@tiscali.cz>
                                );
 
                store "=gsm"               if headeris  "Sender"   ,'<owner-gsm@sh.cvut.cz>';
@@ -114,20 +118,23 @@ sub audit
        store "=gtkd","log"          if headeris "List-Id"  ,'<gtk-devel-list.gnome.org>';
        store "=mffstatnice","bell"  if headeris "List-Post",'<statnice@atrey.karlin.mff.cuni.cz>';
        store "=hw","log"            if headeris "List-Post",'<hw-news@list.gin.cz>';
-       store "=gnokii","bell"       if headeris "List-Id"  ,'<gnokii-users.mail.freesoftware.fsf.org>';
+       store "=gnokii","log"        if headeris "List-Id"  ,'<gnokii-users.mail.freesoftware.fsf.org>';
        store "=winelic","log"       if headeris "List-Id"  ,'<wine-license.winehq.com>';
        store "=wined","log"         if headeris "List-Id"  ,'<wine-devel.winehq.com>';
-       store "=winepat","log"       if headeris "List-Id"  ,'<wine-patches.winehq.com>';
+       store "=winepat","silent"    if headeris "List-Id"  ,'<wine-patches.winehq.com>';
        store "=winecvs","silent"    if headeris "List-Id"  ,'<wine-cvs.winehq.com>';
+       store "=wineann","log"       if headeris "List-Id"  ,'<wine-announce.winehq.com>';
        store "=ros","log"           if headeris "List-Post",'<ros-general@reactos.com>';
-       store "=roskernel","bell"    if headeris "List-Post",'<ros-kernel@reactos.com>';
+       store "=roskernel","log"     if headeris "List-Post",'<ros-kernel@reactos.com>';
        store "=roscvs","silent"     if headeris "List-Post",'<ros-cvs@reactos.com>';
+       store "=rosbug","bell"       if headeris "Reply-To" ,'<scarab@reactos.wox.org>';
        store "=fsd","log"           if headeris "X-Mailing-List",'<linux-fsdevel@vger.kernel.org>';
        store "=surprise","sms"      if headeris "List-Post",'<surprise@atrey.karlin.mff.cuni.cz>';
        store "=surprisesuse","sms"  if headeris "Sender"   ,'<owner-surprise@suse.cz>';
        store "=tacacs","log"        if headeris "Sender"   ,'<tacplus-l@disaster.com>';
+       store "=tacacsd","log"       if headerhas \&Received_for,'devel@tacplus.org';   # TODO: fix when real list
        store "=pm","sms"            if headeris "Sender"   ,'<owner-prague-pm@pm.org>';
-       store "=radary","sms"        if headeris "Reply-To" ,'<pha@radary.cz>';
+       store "=radary","log"        if headeris "Reply-To" ,'<pha@radary.cz>';
        store "=dnet","log"          if headeris "Sender"   ,'<@lists.distributed.net>';
        store "=linux-input","log"   if headeris "List-Post",'<linux-input@atrey.karlin.mff.cuni.cz>';
        store "=strom","bell"        if headeris "List-Post",'<vodni-strom@atrey.karlin.mff.cuni.cz>';
@@ -138,42 +145,74 @@ sub audit
        store "=4c","sms"            if headeris "List-Post",'<4cinfo@atrey.karlin.mff.cuni.cz>';
        store "=slashdot","bell"     if headeris "From"     ,'<slashdot@slashdot.org>';
        store "=freshmeat","bell"    if headeris "From"     ,'<noreply@freshmeat.net>';
+       store "=sourceforge","bell"  if headeris "From"     ,'<noreply@sourceforge.net>';
        store "=gsmperlcvs","silent" if headeris("From"     ,'<johan@intra.tektonica.com>')
                                        && $Audit->subject()=~/^'.*' has been updated!$/;
        # own webs
        store "=energie","bell"      if headeris "From"     ,qr/^EnergieWeb/;
 
        # Petr Koutecky does not mark his Stuff
-       store "=koutecky","bell"     if headeris "From"     ,'<velkyhroch@seznam.cz>';
+       store "=koutecky","log"      if headeris "From"     ,'<velkyhroch@seznam.cz>';
 
        store "=errm","bell"         if $isFROM_MAILER && !did();
 
        store "==","sms"             if !did;
 }
 
+sub audit_sms_address
+{
+my($obj)=@_;
+
+       my $address=$obj->address();
+       if (my $alternates=muttrc_get("alternates")) {
+               return "I" if $address=~/$alternates/si;
+               }
+       my %aliases=muttrc_aliases();
+       if (my $alias=$aliases{lc $address}) {
+               local $_=$alias;
+               s/\.cz$//i;
+               return $_;
+               }
+       local $_=$address;
+       s/\b(Bus)siness$/$1/i;
+       s/\.ident$//i;
+       return $_;
+}
+
 sub audit_sms
 {
 my(%args)=@_;
 
-       my $from=(@{$args{"from"}} ? join(",",map({
-                       s/\.cz$//i;
-                       $_;
-                       } @{$args{"from"}})) : "?");
-       local $_=$args{"body"};
-
+       my $from=(@{$args{"from"}} ? join(",",map({ audit_sms_address($_); } @{$args{"from"}})) : "?");
+       local $_;
+
+       $_=$args{"subject"};
+       # headers
+       s/(?:Re|Aw|Odp|Fw|Fwd|OT)(?:\[\d+\])?://ig;
+       # former subject
+       s/\bbylo:.*$//i;
+       s/\[\s*WAS:.*\]\s*$//i;
+       # trim
+       s/^\s*//s;
+       s/\s*$//s;
+       my $subject=$_;
+
+       $_=$args{"body"};
        # max. 9 lines of .sig
        s/\n-- (?:\n[^\n]*){0,9}$//gs;
        # "Original Message"/"Puvodni zprava" etc. up to empty line
-       s/(^|\n)[\s^\n]*-----[\w\s]*-----[\s^\n]*(?:\n[^\n]+)*\n{2,}(?:\s*[^>\s].*$)?/\n/gs;
+       # "- - - Original message: - - -" is by "Lotus Notes Release 5.0.5  September 22, 2000"
+       s/(^|\n)[\s^\n]*(?:-----[\w\s]*-----|- - - Original message: - - -)[\s^\n]*(?:\n[^\n]+)*\n{2,}(?:\s*[^>\s].*$)?/\n/gs;
        # Remove "..." lines (is it used by anyone except me?)
        s/^\Q...\E$/*/gm;
        # quoting "> "
-       s/^\s*[>][>\s]*.*$/*/gm;
+       s/^(?:\s*[[:upper:]]{0,3}>)+.*$/*/gm;
        s/(?:^|\n)(?:\*\n+)+/\n*\n/gs;
        # attributions
-       s/^On.*\b(?:wrote|writes):\s*$//gm;
+       s/^.*\b(?:wrote|writes|napsal jste):\s*$//gm;
+       my $body=$_;
 
-       return [$from,"(".$args{"subject"}.")".$_];
+       return [$from,"($subject)$body"];
 }
 
 1;