[Postfixbuch-users] Cyrus Mails per cron l?schen

Marcel Hartmann mail at marcel-hartmann.com
Do Jun 2 13:22:40 CEST 2005


Hallo Achim,

>  Ich möchte mir einen cron basteln, der jede Nacht Mails, die
> fälschlicherweise als SPAM markiert sind bzw, Mails, die 
> offensichtlich Spam
> sind, mit sa-lern lernen lassen.
> 
> So habe ich mir das vorgestellt:
> 
> Der User sendet einen fälschlich als SPAM markierte Mail an 
> ham at examle.net
> bzw. eine offensichtliche SPAM Mail ohne Markierung an 
> spam at example.net
> 
> Dann läuft Nachts ein cronjob, der daraus lernen soll.
> 
> MAILTO=root at example.net
> 20 1 * * * root sa-learn --spam
> /var/spool/cyrus/mail/s/user/spam^example^net
> 35 1 * * * root sa-learn --ham 
> /var/spool/cyrus/mail/h/user/ham^example^net
> 
> Danach müßte ich die gelernten Mails aus den Foldern löschen, 
> sie sind ja
> gelernt.
> 
> Wie kann ich das cronmäßig machen?

sag hast Du Dein Problem nun lösen können?
Welche Art hast Du genommen?

Ein rm wäre fatal, da es sich ja imho zumindest bei mir,
nicht um ein mbox format handelt bei cyrus, sondern parralel noch eine
cyrus.db nabenher läuft. Das kann zu Fehlern führen wenn cyrus
denkt er hat mails, die aber gar nicht mehr existieren, wegen 
des rm Befehls. 

Ich habe ein Spam imap Konto angelegt.
In der INBOX habe ich den Ordner SPAM und HAM.

Wenn ich nun (und das kommt oft vor!) Spam an meine private Adresse
bekomme schiebe ich diese, welche nicht im Header ***SPAM*** haben
auf den Imap server (manuell in den SPAM oder HAM je nachdem). Denn diese
sind dem Spamassassin demnach ja unbekannt.

Mein Cronjob lernt auch fleissig von den SPAMs/HAMs. Und ich muss halt
auch die cyrus mails löschen. 

Gute Ansätze fande ich waren ein Script welches per imap Protokoll connected
und die mails dann löscht, oder eben die cyrusadm Befehle.

Wielands Ansatz:
# SpamAssassin auf dem Mailserver trainieren
# - die Benutzerordner für Junk-Mails auswerten
# - alte Junk-Mails loeschen

# Fuer das Protokoll
date

# Welcher Benutzer hat einen Junk-Ordner angelegt?
JUNK_DIRS=`find /var/spool/imap/user/ -name Junk`

# Fuer jeden Ordner das Lernprogramm aufrufen
for DIR in $JUNK_DIRS
do
  DIR="${DIR}/"
  sa-learn --spam $DIR
done

# Alle Junk-Mail-Beispiele, die aelter als ein Tag sind,
# werden geloescht (und die Datenbank aktualisiert)
su - cyrus -c "bin/ipurge -f -d 1 *.*.Junk"

# Schlussstrich ziehen
echo ---


oder in PHP was ja auch mit PERL zu realisieren wäre:

---------------------------------------------------------------------
define('MAX_DAYS', 2);

$mailbox = imap_open( "{localhost:143}Folder", "User", "Passwort");
$check = imap_check($mailbox);

for($loop = 1; $loop <= $check->Nmsgs; $loop++)
{
  $mail = imap_headerinfo($mailbox, $loop);

  if($mail->udate <= date('U') - (MAX_DAYS * 86400))
    imap_delete($mailbox, $loop);
}

imap_expunge($mailbox);
imap_close($mailbox);
---------------------------------------------------------------------

Wie hast Du es gelösst?

Gruß,

Marcel Hartmann





Mehr Informationen über die Mailingliste Postfixbuch-users