Jon Ernster wrote:
> 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";
>
>
Thanks, Jon. I wish we had a little more of this.
Observations:
.) I like the way you've handled parameters
.) Is this learning everything in the user's cur directory as spam? Doesn't
seem appropriate to me
.) all sa-learn and spamassassin commands need to be run as user vpopmail.
How is that happening?
.) qmail-spam is usually in /usr/sbin, not /usr/bin
--
-Eric 'shubes'
---------------------------------------------------------------------
QmailToaster hosted by: VR Hosted <http://www.vr.org>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]