[gelöst] Imap Sieve: Userscript um Nachrichten beim Verschieben in Ordner woanders hin verschieben
[gelöst] Imap Sieve: Userscript um Nachrichten beim Verschieben in Ordner woanders hin verschieben
K9mail kann leider kein Archiv basierend auf Jahren/Moaten (https://github.com/thundernest/k-9/issues/900). Ich dachte mir, dass es eigentlich mit imap_sieve lösbar sein sollte, also k9mail die Nachricht einfach in den Archiv Ordner verschieben lassen, dann imap_sieve aufrufen und die Nachricht nach Archiv.YEAR verschieben.
Nun hab ich geschaut wie Imap sieve funktioniert und mir scheint man kann das nur systemweit einrichten und nicht in einem Userscript? Weil unter https://doc.dovecot.org/configuration_m ... figuration sehe ich, dass man diese imapsieve_mailboxN_{name,from} einrichten muss, um ein script dann zu starten wenn eine Nachricht verschoben wird. Ich finde nirgends eine Information wie man das in einem Script abfragen soll...
Hier wird angedeutet, dass es so ist und quasi nur administrative aufgaben damit gemacht werden sollen: https://dovecot.org/pipermail/dovecot/2 ... 17251.html
dH der einzige Workaround wäre es Systemweit zu konfigurieren aber dann auf meinen IMAP user filtern? Oder übersehe ich gerade etwas?
Nun hab ich geschaut wie Imap sieve funktioniert und mir scheint man kann das nur systemweit einrichten und nicht in einem Userscript? Weil unter https://doc.dovecot.org/configuration_m ... figuration sehe ich, dass man diese imapsieve_mailboxN_{name,from} einrichten muss, um ein script dann zu starten wenn eine Nachricht verschoben wird. Ich finde nirgends eine Information wie man das in einem Script abfragen soll...
Hier wird angedeutet, dass es so ist und quasi nur administrative aufgaben damit gemacht werden sollen: https://dovecot.org/pipermail/dovecot/2 ... 17251.html
dH der einzige Workaround wäre es Systemweit zu konfigurieren aber dann auf meinen IMAP user filtern? Oder übersehe ich gerade etwas?
Zuletzt geändert von reox am 28.10.2022 08:22:23, insgesamt 1-mal geändert.
Re: Imap Sieve: Userscript um Nachrichten beim Verschieben in Ordner woanders hin verschieben
Hab ein wenig im RFC6785 gelesen und ich hab den Eindruck es geht wirklich nicht.
Ich hatte mir ein script zusammengebastelt:
Aber da gibts ein paar probleme: das script wird beim verschieben von Nachrichten grundsätzlich nicht ausgeführt. Und dann noch ein paar kleinigkeiten zB das ich nicht so einfach auf den received header zugreifen kann (vermutlich müsste man das jahr per regex holen?).
Allerdings, selbst wenn ich es irgendwie so konfigurieren könnte, dass es ausgeführt wird (oder ist das wirklich eine client sache?) dann scheint mir, es würde trotzdem nicht gehen.
Denn der RFC verbietet offenbar, die Mailbox zu ändern, für die eine Nachricht gefiltert wird: https://www.rfc-editor.org/rfc/rfc6785#section-7.3.2
Ich hatte mir ein script zusammengebastelt:
Code: Alles auswählen
require ["imapsieve", "environment", "date", "fileinto", "mailbox"];
# Rule for imapsieve, move messages from Archives to Archives.YEAR
if anyof (environment :is "imap.cause" "APPEND", environment :is "imap.cause" "COPY") {
if environment :is "imap.mailbox" "Archives" {
# FIXME: currentdate is the date right now and not the date of the message received!
if currentdate :matches "year" "*" { set "year" "${1}"; }
fileinto :create "Archives.${year}";
stop;
}
}
Allerdings, selbst wenn ich es irgendwie so konfigurieren könnte, dass es ausgeführt wird (oder ist das wirklich eine client sache?) dann scheint mir, es würde trotzdem nicht gehen.
Denn der RFC verbietet offenbar, die Mailbox zu ändern, für die eine Nachricht gefiltert wird: https://www.rfc-editor.org/rfc/rfc6785#section-7.3.2
Aber das heißt ja auch, ich kann einen Filter generell vergessen der sowas macht, weil ich "imap.mailbox" nicht ändern darf?The value of this item is fixed when the script begins, and, in particular, MUST NOT change as a result of any action, such as "fileinto".
Zuletzt geändert von reox am 23.10.2022 12:49:19, insgesamt 1-mal geändert.
Re: Imap Sieve: Userscript um Nachrichten beim Verschieben in Ordner woanders hin verschieben
Die Copy Funktion wird ja bei RSPAMD für Learn Spam und Ham verwendet.
Damit müsstest du genau das erreichen können was du willst.
Beispiel findest du hier: https://www.kernel-error.de/2020/05/04/ ... imapsieve/
Damit müsstest du genau das erreichen können was du willst.
Beispiel findest du hier: https://www.kernel-error.de/2020/05/04/ ... imapsieve/
Re: Imap Sieve: Userscript um Nachrichten beim Verschieben in Ordner woanders hin verschieben
Ja, die Scripte sind ja auch in der Dovecot Doku selber verlinkt. Aber sie sind eben Serverweit eingerichtet. Ich will aber nicht, dass es bei jedem so ist, sondern lediglich bei mir.hec_tech hat geschrieben:23.10.2022 12:48:51Die Copy Funktion wird ja bei RSPAMD für Learn Spam und Ham verwendet.
Damit müsstest du genau das erreichen können was du willst.
Beispiel findest du hier: https://www.kernel-error.de/2020/05/04/ ... imapsieve/
Weiters erstellt copy eine Kopie, aber ich möchte das verschieben ja komplett umleiten - wo ich mittlerweile denke, dass es gar nicht funktioniert, weil vom RFC so nicht spezifiziert.
Re: Imap Sieve: Userscript um Nachrichten beim Verschieben in Ordner woanders hin verschieben
Sollen nur bestimmte Mails oder alle Mails im Archiv landen?
Ich arbeite generell nur mit Sieve somit habe ich das direkt im Script eingebaut.
Ich arbeite generell nur mit Sieve somit habe ich das direkt im Script eingebaut.
Re: Imap Sieve: Userscript um Nachrichten beim Verschieben in Ordner woanders hin verschieben
Ziel soll sein, dass wenn ich eine Mail von irgendeinem Ordner nach "Archives" verschiebe, die Mail stattdessen in "Archives.YEAR" landet.
Ich will die Funktionalität von Thunderbird und co ebenfalls in K9-mail abbilden können - nur halt Serverseitig.
Ich will die Funktionalität von Thunderbird und co ebenfalls in K9-mail abbilden können - nur halt Serverseitig.
Re: Imap Sieve: Userscript um Nachrichten beim Verschieben in Ordner woanders hin verschieben
Ok, ich habs hinbekommen.
Dazu musste man ein paar Dinge einstellen:
1) IMAP METADATA aktivieren https://doc.dovecot.org/configuration_m ... _metadata/
2) die imapsieve_url setzen, zB auf sieve://localhost:4190 (Ich glaube das ist nur kosmetisch und skripte würden sonst auch ausgeführt aber bin mir da nicht so sicher...)
3) imapsieve aktivieren https://doc.dovecot.org/configuration_m ... imapsieve/
Dann loggt man sich per openssl client auf dem IMAP server ein und setzt dort die metadaten für die jeweilige mailbox.
Beim login sollte man die capabilities checken ob dort METADATA und IMAPSIEVE auftaucht.
Der Scriptname muss dem Dateinamen innerhalb des sieve verzeichnisses entsprechen (siehe einstellung `sieve`, ich hab das zB auf `sieve = file:~/sieve;active=~/.dovecot.sieve`) und ohne die extension .sieve sein:
Mein script zum verschieben war sogar komplett richtig, es fehlte lediglich das modul variables. Den Check auf das Environment kann man noch rausnehmen, da es eh mailbox spezifisch ist:
Lediglich könnte man jetzt noch ändern, dass das Empfangsdatum der Nachricht verwendet wird, aber ich versteh nicht wie das gehen soll...
Dazu musste man ein paar Dinge einstellen:
1) IMAP METADATA aktivieren https://doc.dovecot.org/configuration_m ... _metadata/
2) die imapsieve_url setzen, zB auf sieve://localhost:4190 (Ich glaube das ist nur kosmetisch und skripte würden sonst auch ausgeführt aber bin mir da nicht so sicher...)
3) imapsieve aktivieren https://doc.dovecot.org/configuration_m ... imapsieve/
Dann loggt man sich per openssl client auf dem IMAP server ein und setzt dort die metadaten für die jeweilige mailbox.
Beim login sollte man die capabilities checken ob dort METADATA und IMAPSIEVE auftaucht.
Der Scriptname muss dem Dateinamen innerhalb des sieve verzeichnisses entsprechen (siehe einstellung `sieve`, ich hab das zB auf `sieve = file:~/sieve;active=~/.dovecot.sieve`) und ohne die extension .sieve sein:
Code: Alles auswählen
$ openssl s_client -crlf -connect localhost:993
[...]
a login <username> <password>
a OK [CAPABILITY ... METADATA ... IMAPSIEVE=sieve://localhost:4190] Logged in
[...]
a SETMETADATA Archives (/shared/imapsieve/script "archives")
[...]
a logout
Code: Alles auswählen
require ["imapsieve", "environment", "date", "fileinto", "mailbox", "variables"];
# Rule for imapsieve, move messages from Archives to Archives.YEAR
if anyof (environment :is "imap.cause" "APPEND", environment :is "imap.cause" "COPY") {
# FIXME: currentdate is the date right now and not the date of the message received!
if currentdate :matches "year" "*" { set "year" "${1}"; }
fileinto :create "Archives.${year}";
stop;
}
Re: [gelöst] Imap Sieve: Userscript um Nachrichten beim Verschieben in Ordner woanders hin verschieben
Noch ein Nachtrag:
So wird der header ausgelesen und die Nachricht auch dann richtig archiviert, wenn nicht zufällig das selbe jahr ist.
Code: Alles auswählen
require ["imapsieve", "environment", "date", "fileinto", "mailbox", "variables"];
if anyof (environment :is "imap.cause" "APPEND", environment :is "imap.cause" "COPY") {
if date :matches "received" "year" "*" {
fileinto :create "Archives.${1}";
stop;
}
# Keine Ahnung ob das passieren kann - aber als Fallback wird sonst das current date verwendet.
if currentdate :matches "year" "*" {
fileinto :create "Archives.${1}";
stop;
}
}