PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sa-learn von anderen Server



prophet`
30.08.06, 17:20
Hallo,

ich habe eine kleine Frage bezüglich eines perl-skriptes. Ich habe ein Skript gefunden was aus einem Scalix-IMAP-Postfach alle Nachrichten aus einen bestimmten Ordner fischt und dann mit sa-learn verarbeitet.

Hier das Skript (quelle (http://www.scalix.com/wiki/index.php?title=HowTos/SpamAssassin))


#!/usr/local/bin/perl
use strict;
use warnings;
use Mail::IMAPClient;
my $host="your_mail_server_ip";
my $username="mboxadmin_user_name";
my $password="mboxadmin_password";
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 @folders=$imap->folders; # list folders.
foreach my $folder (@folders) # Look through each of them.
{
if (lc($folder) eq "junk e-mail") # "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;
$imap->delete_message($msg) or next; # Delete it.
}
$imap->expunge($folder) or next; #Expunge folder.
}
}
}


Nur habe ich den Scalix-Server und den Spamassissan (mit dem Skript) auf unterschiedlichen Servern. Jetzt ist die Frage gibt es ne möglichkeit, dass das Skript sich die Daten holt und lokal verarbeitet?
Soweit ich das verstanden habe geht die Datei nur wenn beide Dienste auf einem Server sind. :(

Gruß proph

prophet`
08.09.06, 14:07
Hmmm jemand eventuell eine Alternative? =/

prophet`
26.09.06, 12:25
So hab es doch selber hinbekommen!

Nur erhalte ich eine Fehlermeldung beim Aufrufen der Methode "folders"



Can't call method "folders" on an undefined value at ./catch_spam line 15.

-- schnipp --
my $imap = new Mail::IMAPClient( 'Server' => $host , 'User' => $user , 'Password' => $password );
my @folders=$imap->folders;
-- schnapp --