Jon Ernster wrote:
> Eric Shubert wrote:
>> 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,
>
> I create a user named spam and I forward everything to that
> user/directory. You're right that this wouldn't be ideal for someone to
> run this against their personal mail box. Alternatively this could
> easily be modified to learn email as HAM instead of SPAM.
>
> I just run the script as root - seems to work.
It would update root's bayes database ok (the database is created if it
doesn't exist). That's not the same database which is used on incoming mail
though.
> Location is pretty much irrelevant as long as it's some where in the
> PATH as to not have to reference it WITH the full path if necessary.
That's a little confusing to me. If the full path isn't necessary, why
specify one (especially an incorrect one)? This is typically done for
security purposes (in case $PATH is somehow modified).
> Appreciate the comments!
>
> Jon
--
-Eric 'shubes'
---------------------------------------------------------------------
QmailToaster hosted by: VR Hosted <http://www.vr.org>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]