Dovecot, Spam-/Ham-Learning und MS-Outlook

harald.witt at dpfa.de harald.witt at dpfa.de
Mi Mär 1 15:18:30 CET 2023


Hallo liebe Mitstreiter,

ich habe mir mal zum Zwecke des Spam-/Ham-Learnings das Dovecot-Plugin
imapsieve konfiguriert:
plugin {

  …

  # Spam: From elsewhere to Spam folder or flag changed in Spam folder

  imapsieve_mailbox1_name = Junk-E-Mail

  imapsieve_mailbox1_causes = COPY APPEND FLAG

  imapsieve_mailbox1_before =
file:/usr/local/etc/dovecot/sieve/learn-spam.sieve

  # Ham: From Spam folder to elsewhere

  imapsieve_mailbox2_name = *

  imapsieve_mailbox2_from = Junk-E-Mail

  imapsieve_mailbox2_causes = COPY

  imapsieve_mailbox2_before =
file:/usr/local/etc/dovecot/sieve/learn-ham.sieve

  …

}

 

Das Script „learn-spam“ wird aufgerufen wie gewünscht, das andere aber
nicht. Liegt wohl daran, dass MS-Outlook APPEND statt COPY verwendet.
Ergänzt man APPEND bei der zweiten Regel kommt es zum Fehler, weil beide
Scripte pipen wollen. Das lässt sich ja irgendwie noch abfangen. Aber jetzt
wollte ich der Sache doch mal auf den Grund gehen.

Also habe ich mir ein kleines Script test.sieve gemacht:

require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment",
"variables", "vnd.dovecot.debug"];

if environment :matches "imap.mailbox" "*" { set "mailbox" "${1}"; }

if environment :matches "imap.cause" "*" { set "IMAPCAUSE" "${1}"; }

debug_log "TEST on imap.cause=${IMAPCAUSE}  imap.mailbox=${mailbox}";

 

Plugin-Konfiguration:
plugin {

  imapsieve_mailbox1_name = *

  imapsieve_mailbox1_causes = COPY APPEND FLAG

  imapsieve_mailbox1_before = file:/usr/local/etc/dovecot/sieve/test.sieve

}

 

Es zeigt sich, dass das das Script tatsächlich immer zweimal aufgerufen
wird. Beim Verschieben aus meinem „Posteingang“ in „Junk-E-Mail“ kommt:
sieve: DEBUG: TEST on imap.cause=FLAG:  mailbox=INBOX

sieve: DEBUG: TEST on imap.cause=APPEND:  mailbox=Junk-E-Mail

Und im umgekehrten Fall:

sieve: DEBUG: TEST on imap.cause=FLAG:  mailbox=Junk-E-Mail

sieve: DEBUG: TEST on imap.cause=APPEND:  mailbox=INBOX

 

Da die beiden Aufrufe völlig unabhängig voneinander erfolgen, lassen sie
sich auch nicht miteinander assoziieren. Daraus folgt, dass in den diversen
Quellen für das Ham-Lernen nicht umsonst immer nur COPY angegeben wird.
Warum das so ist:

Bei verschieben vom „Posteingang“ oder was auch immer zu „Junk-E-Mail“:

Der erste Aufruf mit dem Deleted-FLAG für die INBOX bringt uns gar nichts.
Schließlich wird das auch bei einem ganz normalen Löschvorgang ausgelöst.
Den zweiten Aufruf mit dem APPEND für die Mailbox „Junk-E-Mail“ lässt sich
für Spam-Learning sehr gut nutzen. Egal weshalb, es ist vermutlich Spam. Das
ist also OK!

Anders sieht es aus, wenn ich einen „false positive“ aus der Mailbox
„Junk-E-Mail“ in den „Posteingang“ verschiebe.
Der erste Aufruf mit dem Deleted-FLAG für „Junk-E-Mail“ bring uns auch hier
nichts.  Mails die wir aus dem Ordner einfach mal so löschen, sollen ja
nicht automatisch zu Ham werden!
Der zweite Aufruf mit dem APPEND für die INBOX bring uns hier aber auch
nichts. Das wird nämlich immer getriggert, wenn was in die INBOX gespeichert
wird, egal woher die Mail kommt. Also auch unmittelbar nach dem Empfang
JEDER E-Mail. Das können wir ja viel besser über den Rspamd-Modul Bayes und
die zugehörigen Schwellwerte lösen.

Ergo:
Ich sehe keinen vernünftigen Weg, um das Script learn-ham.sieve für einen
Verschiebevorgang in MS-Outlook sinnvoll auszuführen.
Tja wenn es einen imap.cause=MOVE gäbe und dann noch imap.mailbox.from und
imap.mailbox.to entsprechend gesetzt wären …

Hat da jemand noch eine Idee?
Oder sehe ich da etwas völlig falsch?

Viele Dank 
Harald

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://listi.jpberlin.de/pipermail/postfixbuch-users/attachments/20230301/5c1f419b/attachment.htm>


Mehr Informationen über die Mailingliste Postfixbuch-users