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]