Running the script it seems to feed my bayes with objects out of the folder "spam" but after that mails still resists in the spam folder and are not deleted after feeding to the byes.
Heres my script: Someone can give me an hint getting that script deleting the passed messages?
Code: Select all
#!/usr/bin/perl
use strict;
use warnings;
use Mail::IMAPClient;
my $host="10.100.1.20";
my $username="secretuser";
my $password="secret";
my @real_users=`/opt/scalix/bin/omshowu -m all -i`; # get all real user names.
foreach my $punter (@real_users) # Loop over them all.
{
chomp $punter; # Remove trailing carriage return.
print "$punter\n"; # Some output. Feel free to remove.
my $user="mboxadmin:$username:$punter"; # Set up superuser login.
my $imap = new Mail::IMAPClient( 'Server' => $host , 'User' => $user , 'Password' => $password ) or next; # connect to server.
# my $imap = new Mail::IMAPClient( 'Server' => $host , 'User' => $user , 'Password' => $password ) or die $@;
my @folders=$imap->folders; # list folders.
foreach my $folder (@folders) # Look through each of them.
{
if (lc($folder) eq "spam") # "junk email" folder.
{
print "Found a spam folder: $folder\n";
$imap->select($folder) or next; # Select the folder.
print "Folder $folder selected.\n";
my @list=$imap->messages or next; # List all messages in folder.
print scalar(@list)." messages in folder.\n";
foreach my $msg (reverse(@list)) # Loop over them all.
{
my @email=$imap->fetch($msg,'RFC822'); # Fetch message.
open (SALEARN,"|/usr/bin/spamassassin -d | /usr/bin/sa-learn --spam") or print "$!\n"; # Feed to sa-learn.
print SALEARN "$email[1]";
close SALEARN;
open (REPORT,"|/usr/bin/spamassassin -d | /usr/bin/spamassassin -r") or print "$!\n"; # Report it. (SpamCop and Pyzor).
print REPORT "$email[1]";
close REPORT;
print "$msg";
$imap->delete_message($msg) or next; # Delete it.
}
}
if(lc($folder) eq "non-spam")
{
$imap->select($folder) or next; # Select the folder.
print "Folder $folder selected.\n";
my @list=$imap->messages or next; # List all messages in folder.
print scalar(@list)." messages in folder.\n";
foreach my $msg (reverse(@list)) # Loop over them all.
{
my @email=$imap->fetch($msg,'RFC822'); # Fetch message.
open (SALEARN,"|/usr/bin/spamassassin -d | /usr/bin/sa-learn --forget") or print "$!\n";# Sa-learn forget this message if al$
print SALEARN "$email[1]";
close SALEARN or print "$!\n";
open (SALEARN,"|/usr/bin/spamassassin -d | /usr/bin/sa-learn --ham") or next; # Feed to sa-learn as ham.
print SALEARN "$email[1]";
close SALEARN;
}
}
}
}