• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

mail aus SPAM ordner löschen per cron

Status
Für weitere Antworten geschlossen.

komaii

Member
hallo zusammen,

ich habe im cyrus 2 ordner (SPAM,HAM) ind die jeder user einsortieren kann. aulesen lass ich die täglich per cron mit dem befehl: "sa-learn --spam /var/spool/imap/user/SPAM"

gibt es ein möglichkeit diese mails dann automatisch per cron(script) anschliessend löschen zu lassen?
wenn ja wäre dankbar um eine lösung.

lg,
komaii
 

TeXpert

Guru
OK, einen Seitenhieb auf die Cyrus nutzer :) ich mach das mit Courier und kann einfach auf die Maildirs zugreifen :p

jetzt zu Dir. entweder hat cyrus ein entsprechendes cmd-line-tool oder aber du könntest mit fetchmail die Mails dieses Ordners lokal abrufen und nach /dev/null leiten
 

oc2pus

Ultimate Guru
*fg* ich setze mir mal einen marker auf diesen Thread.....

ich kann dir dann später die scripte/tools dazu posten.
 

oc2pus

Ultimate Guru
So hier die versprochenen Scripte von mir. No warranty at all ... it works for me ;)

diese Datei als /etc/cron.daily/learnSpam abspeichern.
chmod +x /etc/cron.daily/learnSpam nicht vergessen !
Code:
#!/bin/sh

#umask 022
PROGNAME=`basename $0`

logger -p mail.info -t $PROGNAME "learning SPAM/NOSPAM ..."

# stop fetchmail
/sbin/rcfetchmail stop

# IMAPClient-Variante (user: vscan)
su - vscan -s "/bin/bash" -c "/usr/local/sbin/myIMAPSpamClient.pl | logger -p mail.info -t $PROGNAME"

logger -p mail.info -t $PROGNAME "finished"

# start fetchmail
/sbin/rcfetchmail start

exit 0

diese Datei als /usr/local/sbin/myIMAPSpamClient.pl abspeichern.
chmod +x /usr/local/sbin/myIMAPSpamClient.pl nicht vergessen!
Code:
#!/usr/bin/perl
#
# Process mail from imap server shared folder 'SPAM' & 'NOSPAM' through
# spamassassin sa-learn
#
# Things to try if it doesn't work
# 1) Turn debug onto 1 and see if you connect to imap server ad get messages
# 2) Check your /etc/mail/spamassassin/local.cf for spamassassin bayes_path settings.
#
# changelog:
#
# 02.11.2004 deleteMsg flag inserted
# 28.10.2004 debug-total flag inserted
# 27.10.2004 --no-rebuild ==> --no-sync
# 27.10.2004 --rebuild    ==> --sync

use Mail::IMAPClient;

print "========================\nmyIMAPClient.pl started\n";

my $debug=0;
my $debug_total=0;
my $deleteMsg=1;
my $salearn;

#####################
# login as user vscan
#####################
my $imap = Mail::IMAPClient->new( Server=>         'dein.server.xxx:143',
                                  User =>          'vscan',
                                  Password =>      'GEHEIMESPW-VON-VSCAN',
                                  Authmechanism => 'CRAM-MD5',
                                  Debug =>         $debug);
if (!defined($imap)) {
        die "IMAP Login Failed";
}

#############################################
# print out the total counts for each mailbox
#############################################
my $spamcount = $imap->message_count('user.SPAM');
print "-------\n", $spamcount, " SPAM to process\n";

my $nonspamcount = $imap->message_count('user.NOSPAM');
print $nonspamcount, " HAM to process\n-------\n";

##########################
# Process the spam mailbox
##########################
$imap->select('user.SPAM');
my @msgs = $imap->search("ALL");
for (my $i=0;$i <= $#msgs; $i++) {
        $imap->message_to_file("/tmp/salearn",$msgs[$i]);

        # execute sa-learn w/data
        if ($debug) {
                $salearn = `/usr/bin/sa-learn -D --no-sync --showdots --spam /tmp/salearn`;
        }
        else {
                $salearn = `/usr/bin/sa-learn --no-sync --spam /tmp/salearn`;
        }
        print "-------\nSPAM: ", $salearn, "\n-------\n" if $debug;

        # delete processed message
        if ($deleteMsg) {
                $imap->delete_message($msgs[$i]);
        }
        unlink("/tmp/salearn");
}
$imap->expunge();
$imap->close();

##############################
# Process the not-spam mailbox
##############################
$imap->select('user.NOSPAM');
my @msgs = $imap->search("ALL");
for (my $i=0;$i <= $#msgs; $i++) {
        $imap->message_to_file("/tmp/salearn",$msgs[$i]);

        # execute sa-learn w/data
        if ($debug) {
                $salearn = `/usr/bin/sa-learn -D --no-sync --showdots --ham /tmp/salearn`;
        }
        else {
                $salearn = `/usr/bin/sa-learn --no-sync --ham /tmp/salearn`;
        }
        print "-------\nNOSPAM: ",$salearn,"\n-------\n" if $debug;

        # delete processed message
        $imap->delete_message($msgs[$i]);
        unlink("/tmp/salearn");
}
$imap->expunge();
$imap->close();

###############
# close session
###############
$imap->logout();

#########################
# integrate learned stuff
#########################
if ($debug_total) {
        my $sarebuild = `/usr/bin/sa-learn -D --sync`;
}
else {
        my $sarebuild = `/usr/bin/sa-learn --sync`;
}
print "-------\nRebuild: ", $sarebuild, "\n-------\nmyIMAPClient.pl finished\n========================\n";

Dann brauchst du noch dieses Perl-Modul:
http://search.cpan.org/CPAN/authors/id/D/DJ/DJKERNEN/Mail-IMAPClient-2.2.9.tar.gz

Downloaden und installieren oder mit cpan2rpm in ein RPM umwandeln.
cpan2rpm bekommst du hier:
http://ftp.gwdg.de/pub/linux/suse/apt/SuSE/9.1-i386/RPMS.suser-oc2pus/perl-cpan2rpm-2.027-0.oc2pus.1.noarch.rpm
http://ftp.gwdg.de/pub/linux/suse/apt/SuSE/9.2-i386/RPMS.suser-oc2pus/perl-cpan2rpm-2.027-0.oc2pus.1.noarch.rpm

Damit werden dann jede Nacht wenn der cron-daily läuft, alle SPAMs gelernt und gelöscht. Die false-positives (HAM) werden ebenfalls gelernt und gelöscht.

Vielleicht schaut TeXpert oder notoxp mal über den perl-code und das script und hat einige Verbesserungen ;)
 

TeXpert

Guru
oc2pus schrieb:
Vielleicht schaut TeXpert [...] mal über den perl-code und das script und hat einige Verbesserungen ;)

lol, ich der kein perl spricht ;) aber ich muss Dich loben, Du schaffst es ja sogar perl-code lesbar aussehen zu lassen :)
 
OP
K

komaii

Member
vielen danke "oc2pus" für die scripte.

ich habe das mal ausprobier leider bekomme ich kein login zum server, hier das debug output:
========================
myIMAPClient.pl started
Using Mail::IMAPClient version 2.2.9 and perl version 5.8.3 (5.008003)
Read: * OK lin0101004 Cyrus IMAP4 v2.2.3 server ready

Connect: Received this from readline: 0/OUTPUT/* OK lin0101004 Cyrus IMAP4 v2.2.3 server ready

Sending: 1 AUTHENTICATE CRAM-MD5

Sent 25 bytes
Read: 1 NO no mechanism available
========================

das selbe kommt auch wenn ich auf "PAM" umstelle.
idee was das sein könnte?

lg,
komaii
 

oc2pus

Ultimate Guru
Wie ist dein cyrus konfiguriert ?
Probiere mal PLAIN-Authorisierung ...

ansonsten fehlt dir evtl noch eines dieser AUTH Module ...
apt search cyrus
cyrus-sasl - Implementation of Cyrus SASL API
cyrus-sasl-crammd5 - cyrus-sasl plugin for the CRAMMD5 mechanism
cyrus-sasl-digestmd5 - cyrus-sasl plugin for the DIGESTMD5 mechanism
cyrus-sasl-gssapi - cyrus-sasl plugin for the GSSAPI mechanism
cyrus-sasl-otp - cyrus-sasl plugin for the OTP mechanism
cyrus-sasl-plain - cyrus-sasl plugin for the PLAIN mechanism
cyrus-sasl-saslauthd - The SASL Authentication Server

und eine weitere Fehlerquelle: ist der user vscan als cyrus user angelegt ?
 
OP
K

komaii

Member
ups, ja da fehlte doch noch eins, danke.

jetzt geht auch der login, was jetzt noch nicht funktioniert ist laut log file dies hier:
------------------------
Sent 54 bytes
Read: 1 OK Success (no protection)

Sending: 2 STATUS user.SPAM (MESSAGES)

Sent 31 bytes
Read: 2 NO Mailbox does not exist

Sending: 3 STATUS user.HAM (MESSAGES)

Sent 30 bytes
Read: 3 NO Mailbox does not exist

Sending: 4 SELECT user.SPAM

Sent 20 bytes
Read: 4 NO Mailbox does not exist

Sending: 5 UID SEARCH ALL

Sent 18 bytes
Read: 5 BAD Please select a mailbox first

Sending: 6 CAPABILITY
------------------------

versteh ich nicht ganz weil geben tut es diese user ja wenn ich mich mit "cyradm" einlogge:
localhost> lm
user.HAM (\HasNoChildren)
user.SPAM (\HasNoChildren)

den ganzen debug output mag ich hier nicht pasten aber ich kann ihn gerne zur verfügung stellen.

lg,
komaii
 
OP
K

komaii

Member
ähm ja jetzt schon, hatte "setacl" ganz vergessen.

jetzt funktionierts wunderbar.

danke nomml für die hilfe,

lg,
komaii
 

oc2pus

Ultimate Guru
kleine Anmerkung noch:
1.) wenn du viel SPAM/HAM hast solltest du dieses script zu einem Zeitpunkt wo nix los ist laufen lassen. Es ist nicht gerade das schnellste ...

d.h. aus cron.daily rausnehmen und in /etc/crontab eintragen zu einer Zeit wo nix los ist.

ansonsten fein das es funzt ;)
 
OP
K

komaii

Member
vielen dank,
das hatte ich sowieso vor.
jetzt ist es das erste mal gelaufen und es funktioniert wunderbar auf allen servern :)

schönes weekend noch,

lg,
komaii
 
Status
Für weitere Antworten geschlossen.
Oben