Figured I'd share something I wrote that others here might use since many of you have shared or helped me out as well.

I wrote this because when I go on vacation I usually shut down the laptop that has my mail rules which sends all my spam to the spam folder. By the time I get back the shell script that I have that runs on a daily basis (courtesy of Jake Vickers) gives this error because there are too many spam files:

/root/learn-spam: /usr/bin/sa-learn: /usr/bin/perl: bad interpreter: Argument 
list too long
/root/learn-spam: line 10: /bin/rm: Argument list too long

So I just wrote this to process the files individually.  Not the fastest script 
in the world (because of SpamAssassin, not becaues of my code, obviously) ;), 
but it works.

J.






#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Std;

#~ $Id: learn-spam.pl 15 2008-07-03 17:27:09Z jernster $

my %opts = ();

getopts( 'd:u:', \%opts );

my ( $domain, $user ) = @opts{ qw( d u ) };

my $usage =<<EOF;
Usage:

   $0 -d example.com -u user

EOF

die "$usage" unless ( $domain && $user );

my $dir = "/home/vpopmail/domains/$domain/$user/Maildir/cur";
my $starttime = time;
my $count = 0;

opendir(DIR, $dir);
my @files = readdir(DIR);
close(DIR);

foreach my $file ( @files )
{
   if ( $file =~ /^\./ )
   {
      next;

   }
   else
   {
      my $fpfile = "$dir/$file";

      $count++;

      print "Learning SPAM - $file\n";
      
      system("/usr/bin/sa-learn --spam $fpfile");

      print "Deleting $file\n";

      unlink($fpfile);

   }

}

print "Syncing databases...\n";
system("/usr/bin/sa-learn --sync");

print "De-linting files...\n";
system("/usr/bin/spamassassin --lint");

system("chown vpopmail:vchkpw /home/vpopmail/.spamassassin/*");

system("/usr/bin/qmail-spam restart");

print "Done!\n";

my $duration = time - $starttime;

print "\nTotal duration: $duration seconds\n";
print "Processed $count SPAM files.\n";

---------------------------------------------------------------------
     QmailToaster hosted by: VR Hosted <http://www.vr.org>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to