Problem mit Spamfilterung über Maildrop (RegEX)

Mordor

Registered User
Mahlzeit allerseits
Nachdem ich heut meine ganzen E-Mailkonten von POP auf IMAP umgestellt hab, wollte ich mit dem Maildrop die spammails filtern, und alle bis zu einem Score löschen, und andere in einen .spam ordner packen.
Na so gut so schön, Maildrop läuft ja schon länger, denn ne Viruserkennen gab es schon von anfang an, und das mit dem Spam sollte ja auch kein Prob sein.
Ist es aber anscheinend.

Das System:
Debian Etch
Postfix
Courier pop/imap
maildrop
Das ganze über virtuelle Accounts über Mysql

In den Logfiles kann ich auch sehen, dass Maildrop wie immer aufgerufen wird. Jedoch gibt es dann ein Problem:
Code:
Aug 20 17:21:57 SERVER postfix/pipe[17444]: 5D532104E: to=<[email protected]>, relay=maildrop, delay=8.8, delays=0.02/0/0/8.8, dsn=4.3.0, status=deferred (temporary failure. Command output: Invalid regular expression, offset 29 of: ^X-Spam-Status: *Yes, score=![:digit:]+!\.: POSIX named classes are supported only within a class .mailfilter(29): Syntax error in /pattern/.  /usr/bin/maildrop: Unable to create a dot-lock. )
Diese Meldung bekomme ich nur, wenn ich versuche ne Mail an ein grad erstelltes Konto zu schicken, um die ordner automatisch erstellen zu lassen.

Ausserdem wird der Spam nicht gefiltert.


Die .mailfilter sieht so aus:
Code:
RECIPIENT=$1
DOMAIN=$2
SPAMDIR = $HOME/$DOMAIN/$RECIPIENT/.Lowspam/
TRASHDIR = $HOME/$DOMAIN/$RECIPIENT/.Trash/
import SENDER
DEFAULT=$HOME/$DOMAIN/$RECIPIENT
SPAM=10
LOWS=5

VIRENQUARANTINE = "home/vmail/Lvirenmails"
VSCAN = 1

if ( $VSCAN )
{
        exception {
                xfilter "/home/vmail/bin/clamscan.sh"
                }
        if ( /^X-Virus_Status:.*INFECTED/)
        {
                exception {
                        log "Viren-Mail !!!"
                to $VIRUSQUARANTINE
                }
        }
}

xfilter "/usr/bin/spamc -u $RECIPIENT@$DOMAIN"

if ( /^X-Spam-Status: *Yes, score=![:digit:]+!\./ )
{
    if ( $MATCH2 >= $SPAM )
    {
    DELTAG=1
    to $TRASHDIR
    }
   if ( $MATCH2 >= $LOWS )
    {
    'test -d $SPAMDIR'
    if ( $RETURNCODE == 1 )
    {
    '/usr/bin/maildirmake $SPAMDIR'
    }
    exception {
        to $SPAMDIR
    }
   }
}
So ungefähr kann ich den RegEX lesen, nur komm ich nicht wirklich drauf, was das Problem ist.
Der Clamscan funzt einwandfrei.

Danke schon mal

Gruß Mordor
 
Last edited by a moderator:
Zumindest bin ich schon mal nen Schritt weiter:
Das Problem, warum das Maildir eines neuen Kontos nicht eingerichtet wird ist, weil es Maildrop nicht macht.
Bevor ich Maildrop eingesetzt hab, hat das anscheinend Postfix allein gemacht. Da jetzt Maildrop die Mails ausliefert, wird es von Postfix nicht übernommen. Also muss das Maildrop machen.

ich hab da jetzt mal meine .mailfilter um folgendes erweitert:
Code:
'test -d $DEFAULT'
if($RETURNCODE == 1)
{
        'maildirmake $DEFAULT'
}
Nur irgendwie will Maildrop das neue Maildir nicht erstellen.

Zum anderen Problem:
Bei dem RegEX für Spamassassin bin ich noch nicht weiter.
 
So, jetzt hatte ich endlich mal zeit, das ganze auszuprobieren.
Leider funktioniert es immer nocht nicht.

Die .mailfilter sieht im Moment so aus:
Code:
RECIPIENT=$1
DOMAIN=$2
SPAMDIR = $HOME/$DOMAIN/$RECIPIENT/.Lowspam/
TRASHDIR = $HOME/$DOMAIN/$RECIPIENT/.Trash/
import SENDER
DEFAULT=$HOME/$DOMAIN/$RECIPIENT
'test -d $HOME/$DOMAIN'
if( $RETURNCODE == 1 )
{

        '/bin/mkdir $HOME/$DOMAIN'
        }
'test -d $DEFAULT'
if( $RETURNCODE == 1 )
{
        '/usr/bin/maildirmake $DEFAULT'
        '/usr/bin/maildirmake $DEFAULT/.Sent'
        '/usr/bin/maildirmake $DEFAULT/.Trash'
        'echo INBOX.Sent >> $DEFAULT/courierimapsubscribed'
        'echo INBOX.Trash >> $DEFAULT/courierimapsubscribed'
}
Wie schon gesagt es funktioniert nicht. Im mail.log finde ich folgende Fehlermeldung:
Code:
Sep  1 20:28:18 mainserver maildrop[16943]: Unable to create a dot-lock.
Sep  1 20:28:18 mainserver postfix/pipe[16942]: 401FA5B6: to=<[email protected]>, relay=maildrop, delay=9.9, delays=0.04/0/0/9.9, dsn=4.3.0, status=deferred (temporary failure. Command output: /usr/bin/maildrop: Unable to create a dot-lock. )
Es hat sich also noch nichts geänder! Leider lässt sich Maildrop auch nicht wirklich debuggen.

Schön langsam bin ich da mit meinem Latein am Ende. Dabei soll doch nur eine vernünftige Ordnerstruktur erstellt werden.

Vielleicht weiss ja jemand noch Rat.

Gruß Mordor
 
Beim Maildir-Format braucht man eigentlich kein explizites Locking, denn das Locking wird durch ein spezielles atomares Verfahren zum Anlegen der neuen Maildatei erreicht. Insofern wundert es mich, dass maildrop hier trozdem ein dot-lock anlegen will.
Daraus schließe ich, dass gar kein Maildir verwendet wird, sondern das normale Mailbox-Format (bei dem das dot-locking gerne verwendet wird). Versuche mal, ob es besser wird, wenn Du bei der Zuweisung der DEFAULT-Variable am Ende noch ein '/' anfügst.
 
Daraus schließe ich, dass gar kein Maildir verwendet wird, sondern das normale Mailbox-Format (bei dem das dot-locking gerne verwendet wird).
Nein, eigentlich werden die Mails in die Maildirs eingeliefert. So war das auch im Ursprünglichen Installationshowto von Postfix erklärt. Die Mails werden dann im Ordner /home/vmail/domain.tld/vordemat abgelegt.

Versuche mal, ob es besser wird, wenn Du bei der Zuweisung der DEFAULT-Variable am Ende noch ein '/' anfügst.
Auch das hab ich probiert. Es funktioniert nicht.

Ich hab jetzt mal versucht, die Maildirs per Hand zu erstellen. Das funktioniert einwandfrei. Nur Maildrop macht es eben nicht.
 
Jetzt bin ich schon mal nen Schritt weiter gekommen.

Ich hab zumindest mal Maildrop dazu gebracht, dass er in ein Log-File schreibt. Dabei ist mir aufgefallen, dass er schon bei der ersten if-Anweisung nicht in die Anweisung einsteigt. Also gehe ich mal davon aus, dass die erste test-Anweisung falsch oder garnicht beantwortet wird. Wenn ich den ersten $RETURNCODE mitloggen lasse, bekomme ich nur eine leere Zeile, und keine 1 ausgeschrieben. Also kann er ja garnicht in die if-Anweisung einleiten.

So, jetzt stellt sich die Frage, wie ich ihn dazu bringe, zu testen ob ein Ordner da is, und dann die if-Anweisung auszuführen.
 
Diese Problem wäre jetzt erst mal gelöst.

Kann es eigenltich sein, dass Maildrop ziemlich pingelig mit Anführungszeichen ist????

Alle Befehle die ich in '' aufgerufen hab funktionieren nicht. Alle die ich mit `` aufrufe, laufen dann durch. Das Problem war also, dass ich die falschen Anführungszeichen verwendet habe. Und daüfr verbringe ich hier zwei Tage oder noch länger, um das hinzubekommen. Ist ja schlimmer, als wenn man in nem riesen PHP-Skript irgendwo falsche Klammern verwendet hat ;-)

Aber danke für die Gute Hilfe.

Gruß Mordor
 
Back
Top