Sieve - RegEx

  • Hallo Zusammen,


    ich bin wahrscheinlich nur zu blöd, aber ich versuche es mal:


    Ich erstelle in Managesieve eine Regel für einen "Regulären Ausdruck" und gehe mal davon aus, dass Regular Expressions (RegEx) damit gemeint sind ;)


    Wenn ich aber z.B. den folgende Ausdruck eingebe:

    Code
    (?i)\.(de|com|eu|nl)>

    nimmt das System nichts an.

    Also habe ich mal den Ausdruck (?i), also den "case-insensitive mode" weggelassen.


    Das System nimmt das zwar an, aber liefert nicht die richtigen Resultate.


    Warum?


    Ich habe mal weiter geforscht......


    Code
    \.(de|com|eu|nl)>

    Der erst "\" bedeutet ja, dass der folgende "." als reguläres Zeichen gilt, sonst wäre der Punkt ja als beliebiges Zeichen interpretiert worden.


    Als ich die Regel exportiert hatte, konnte ich im Text folgendes nachlesen:

    Code
    if not header :regex "from" "\\.(de|com|eu|nl)>"

    DAS bedeutet aber, dass das "\" als reguläres Zeichen aufgefasst wird, weil ein weiteres "\" vorangeht.

    Was soll das denn?? =O



    Also habe ich mal das "falsche" überflüssige "\" entfernt und über Roundcube einlesen lassen.

    Tja, dass geht auch nicht, weil er dann das zweite \ auch entfernt.


    Irgendetwas stimmt bei dem System nicht bei der Verabeitung von Regular Expressions, ist das System noch buggy??



    Wie sind Eure Erfahrungen mit dem System??


    Nette Grüße

    JohnBoy



  • Das doppelte Escapen hat schon seine Richtigkeit. Der Backslash muss im String für die Sieve-Regel während der Ausführung erhalten bleiben. Da ein Backslash aber auch bei der Regel selbst innerhalb von "" zum Escapen verwendet wird, muss er dort ebenfalls maskiert werden. Das Resultat sind zwei Backslashes hintereiander. Das ist bei diversen Programmiersprachen genauso, wenn man ein \ in regulären Ausdrücken nutzen möchte.


    Um zu Deinem eigentlichen Problem zurückzukommen: Kannst Du einmal ein paar (anonymisierte) Headerauszüge aus den Mails zeigen, die damit erwischt werden sollen? Wie sieht die ganze Sieve-Datei aus, welche Aktion soll ausgelöst werden?

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Das doppelte Escapen hat schon seine Richtigkeit. Der Backslash muss im String für die Sieve-Regel während der Ausführung erhalten bleiben. Da ein Backslash aber auch bei der Regel selbst innerhalb von "" zum Escapen verwendet wird, muss er dort ebenfalls maskiert werden. Das Resultat sind zwei Backslashes hintereiander. Das ist bei diversen Programmiersprachen genauso, wenn man ein \ in regulären Ausdrücken nutzen möchte.

    Hallo killerbees19,


    vielen Dank für Deine Antwort.


    Ja, ich glaube Du hast Recht, Escapen war das Stichwort.

    Ich habe weitere Versuche gleich abgebrochen, als ich sah, dass das System für mich eigenmächtig ein "\" einfach hinzugefügt hatte.

    Ich hätte es gerne etwas transparenter gehabt;)


    Bei der Sieve-Datei experementiere ich noch etwas, der folgende Teil soll Absenderdomains auf bestimmte Postfächer verteilen.

    Also z.B.:

    Code
    # rule:[LAENDER]
    if not header :regex "from" "\\.(de|.com|.eu|.nl)>"
    {
        set :lower "ldr" "andere";
        redirect "yyyyyyy@xxxxxx.de";
        stop;
    }

    Mit netten Grüßen


    JohnBoy

  • Das funktioniert anscheinend soweit.


    Aber noch eine Frage:


    Ist es möglich, eine Markierung im Header der Email zu setzen.


    Also z.B.:


    EigenerFilter: Versicherungsspam


    Ich würde gerne überprüfen, welche der Regeln angeschlagen hat.


    Nette Grüße

    JohnBoy