staging.inyokaproject.org

Evolution: Trash-Folder

Status: Gelöst | Ubuntu-Version: Ubuntu 25.04 (Plucky Puffin)
Antworten |

jms3000

Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 880

Ich benutze Evolution als Mail-Programm. Und ich hätte gerne, das Mails, die ich lösche, im Trash landen und dann nach 4 Wochen ganz verschwinden. Bei Evolution scheint der Trash-Folder aber kein echter Ordner zu sein, sondern nur ein virtueller Ordner für gelöschte Mails. Alles, was da drin ist, kann man nicht mehr löschen, man kann nur alles weg machen mit dem Menüpunkt "Empty Trash". Gibt es einen Workaround mit dem ich einen 2-stufigen Trash bekomme? Ich habe auch schon mit Archive rumprobiert, aber das hat auch nicht geklappt.

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1303

Bei Evolution scheint der Trash-Folder aber kein echter Ordner zu sein, sondern nur ein virtueller Ordner für gelöschte Mails.

Leider gibst du keine Informationen über deine Evolution Installation (Installations-Art, Version usw) und die verwendeten Konto-Typen (imapx, ews, microsoft365, maildir, vfolder usw).

Die Art des Trash-Folders hängt stark von dem von dir konfigurierten Kontotyp und den Fähigkeiten deines Mail-Providers ab. Welcher reale Trash-Ordner bei deinem Mail-Provider zu welchem cached Ordner mapped, hat du ja beim Konteneditor unter "Vorgaben" festgelegt.

Bei "maildir" Kontotypen könnte man vermuten, was du eventuell meinen könntest, da hier die Mail-Objekte im Ursprungs-Order verbleiben und einen "Löschvermerk" erhalten. Diese gelöschten Objekte werden dann in einem virtuellen Order (ähnlich wie bei Suchordnern) angezeigt und könne über die "Säuberung" (Strg-E) bereinigt werden.

Gibt es einen Workaround mit dem ich einen 2-stufigen Trash bekomme?

Eine 2-stufige Trash Struktur kannst du relativ leicht serverseitig (z.B. bei IMAP) oder lokal (bei z.B. maildir) einrichten.

Um diesen Eintrag nicht ausufern zu lassen, beschreibe ich hier kurz diese Vorgehensweise bei einem IMAP Konto.

  1. Du legst auf dem IMAP Server (Mail-Provider) einen Ordner an (z.B. "Gelöscht").

  2. Nach rechts-Klick auf den "Gelöscht" Ordner wählst du "Eigenschaften" und den Reiter "Archivieren".

  3. Hier setzt du einen Haken bei "Nachrichten automatisch aufräumen, die alter sind als" z.B. "4 Wochen".

  4. Darunter klickst du auf den Radio-Button "Nachrichten verschieben nach:" z.B. "deinKonto@domäne.de/Gelöschte Elemente". Hierbei ist "Gelöschte Elemente" der "Reale Ordner für den Papierkorb", den du im Kontoeditor (Menue → Bearbeiten → Einstellungen → E-Mail-Konten → deinKonto@domäne.de → Bearbeiten → Vorgaben ausgewählt und angehakt hast.

  5. Eine ähnliche Konfiguration machst du mit den Ordnereigenschaften von "Gelöschte Elemente" nur dass du hier den Radiobutton "Nachrichten löschen" auswählst.

Hierbei verschiebst du die zu löschenden Objekt in den Ordner "Gelöscht". Nach 4 Wochen wandern die Objekte in den Ordner "Gelöschte Elemente". Nach der für diesen Ordner festgelegten Zeit werden dann die Objekte tatsächlich gelöscht.

Ich hoffe, diese Erläuterungen waren für dich verständlich. Da ich gemäß deiner Angaben allerdings nur Vermutungen angestellt habe, bitte ich dich bei deiner Antwort präziser zu sein (Konten-Art, Installations-Art, Version usw).

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 880

Wow, danke für die tolle Antwort. Ich habe mehrer IMAP-Konten und ein POP-Konto, bei dem die Mails nicht auf dem Server bleiben. Mir geht es hauptsächlich um dieses POP-Konto. Hier habe ich das so ähnliche probiert wie von dir beschrieben. Aber leider lassen sich bereits gelöschte Mails nicht noch mal löschen. Sie verschwinden nicht wenn man sie löscht oder automatisch löscht über die Archiv-Regel. Ich glaube sogar sie verdoppeln sich.

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1303

Mir geht es hauptsächlich um dieses POP-Konto.

So etwas habe ich fast vermutet. POP Kontos werden zwar seit Jahrzehnten nicht mehr benötigt, da man ihre Funktionalität auch mit IMAP vollständig abbilden kann aber sie laufen halt immer noch.

Um die Zusammenhänge detaillierter zu beschreiben, müsstest du allerdings die von mir erbetenen Information (Installationsart z.B. deb, flatpak und Version) noch liefern. So kann ich nur oberflächliche Informationen geben.

Ein POP Konto hat normalerweise keinen "Trash" Folder, da POP Server keine Ordnerstrukturen abbilden können. Mit Evolution kann man aber auch POP Anbindungen "fast" wie IMAP Konten über die "maildir" Strukturen betreiben. Dies machst du offenbar.

Beim Abrufen der Mail-Objekte von einem POP Konto werden diese normalerweise in die lokale Ordnerstruktur von Evolution abgelegt (z.B. "Auf diesem Rechner/Eingang"). Von dort kann man sie in weitere selbst definierte Ordner verschieben. Und nun hat man sogar einen Trash-Ordner (Papierkorb), obwohl dieses alles bei POP nicht vorgesehen/möglich war.

Wenn du nun ein Mail-Objekt in einem Ordner löschst (Klick auf Papierkorb-Icon oder Strg-D oder die Entf-Taste), wird der Eintrag scheinbar in den Papierkorb verschoben. Wenn du allerdings im Menue (Ansicht → Gelöschte Nachrichten anzeigen) einen Haken gesetzt hast, wirst du feststellen, das das gelöschte Objekt (nun durchgestrichen) sich immer noch im Ordner befindet. Der Ordner Papierkorb ist hier nämlich kein realer sondern ein "virtueller" Ordner (ähnlich wie Suchordner).

Der Versuch, gelöschte Objekte z.B. mittels Strg-D noch einmal zu löschen (z.B. im Papierkorb) hat aber, wie du festgestellt hast, nicht das Ergebnis, was du erwartet hast. Ein gelöschtes Objekt bleibt halt gelöscht, auch wenn man es noch mal löscht.

Die einfachste Vorgehensweise diese gelöschten Objekte zu entfernen ist die Funktion "Säubern" (Strg-E), die sich für alle gelöschten Objekte in einem Order anwenden lässt. Will man nur Objekte eines Ordners "säubern", geht man in diesen Ordner und tippt Strg-E, will man alle gelöschten Objekte in der maildir Struktur "Auf diesem Rechner" säubern, geht man in den Ordner "Papierkorb" und drückt dort Strg-E.

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 880

POP macht das was ich brauche. IMAP würde es auch nicht besser machen.

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1303

POP macht das was ich brauche. IMAP würde es auch nicht besser machen.

Auf dieses Statement zu antworten würde bedeuten, dein Thema zu entführen und eine unfruchtbare Diskussion zu starten, was ich nicht machen werde.

Hast du mit den Informationen, die ich gegeben habe etwas anfangen können?

Du hast die von mir erbetenen Informationen noch nicht geliefert, was aber sinnvoll ist, um dein gewünschtes 2-stufiges Löschverfahren auch für lokale Ordner umsetzen zu können.

Wenn das Thema für dich gelöst ist, bitte ich dies beim Status zu markieren.

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 880

apt list evolution
-> evolution/noble-updates,now 3.52.3-0ubuntu1 amd64 [installed]

Ich habe deiner Beschreibung entnommen, dass mein Vorhaben mit einem POP-Konto nicht machbar ist.

Bearbeitet von schwarzheit:

Bitte verwende in Zukunft Codeblöcke, um die Übersicht im Forum zu verbessern! Und benutze bitte den Vorschaubutton. Danke.

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1303

evolution/noble-updates,now 3.52.3-0ubuntu1 amd64 [installed]

Ok, eine deb Installation vom 28.06.2024. Das ist zwar schon recht alt (aktuell ist 3.56.2) aber ich denke, deine Anforderungen lassen sich damit auch abdecken.

Ich habe deiner Beschreibung entnommen, dass mein Vorhaben mit einem POP-Konto nicht machbar ist.

Gemäß Radio Eriwan: Im Prinzip ja, aber mit Evolution kann man da doch etwas machen.

Bei einer POP Anbindung gehen deine Mails nicht in den cache sondern in den local Zweig. Somit ist dein Trash (Papierkorb) ein virtueller. Die gelöschten Objekte (Mails) bleiben im Ordner und erhalten ein "Lösch-Flag". Den Papierkorb kannst du dir wie einen Suchordner vorstellen, der die Mails mit dem Löschvermerk auflistet. Diese Aussage gilt nur für den Mail-Type "maildir" deiner lokalen Ablage, nicht für andere Kontentypen (es sei denn du möchtest dies dort speziell auch konfigurieren).

Zum besseren Verständnis hatte ich dir empfohlen im Menue (Ansicht → Gelöschte Nachrichten anzeigen) einen Haken zu setzen, damit du dies nachvollziehen kannst.

Das Entfernen der gelöschten Objekte erfolgt, wie ich geschrieben hatte über die "Expunge" (Säubern) Funktion. Dies kann man je ausgewähltem Ordner (Strg-E) oder für ALLE Trash-Ordner aller Konten über Menue ("Datei" → "Papierkorb leeren") durchführen (VORSICHT!).

Dein 2-stufiges Löschen kannst du wie folgt implementieren:

  1. Du erzeugst einen lokalen Ordner (z.B. Archiv) unter dem Zweig "Auf diesem Rechner".

  2. Du definierst diesen Ordner als zu verwendendes Archiv in der lokalen Ablage mittels Menue ("Bearbeiten" → "Einstellungen" → "E-Mail-Einstellungen" → "Allgemein" → "E-Mail archivieren") und wählst in der Drop-Down-Liste "Archiv-Ordner unter »Auf diesem Rechner«" den soeben erzeugten Ordner "Auf diesem Rechner/Archiv" aus. Selektierte Mails werden nach Drücken auf das "Kasten-Icon" (Strg-Alt-A) nun in den "Archiv"-Ordner verschoben. Solltest du KeePassXC verwenden und somit diese Taste dort belegt haben, kannst du diese Tastenbelegung in Evolution auch leicht ändern.

  3. Nach rechtem Mausklick auf den "Archiv" Ordner kannst du in den Eigenschaften → Archivieren festlegen, wann die Mails gelöscht werden sollen (Haken bei "Nachrichten automatisch aufräumen, die älter sind als"... und Radiobutton "Nachrichten löschen").

  4. Die derart gelöschten Objekte siehst du nun als durchgestrichenen Text im "Archiv" Ordner (wenn du den Haken bei "Gelöschte Nachrichten anzeigen" gesetzt hast) und im Trash Ordner (Papierkorb).

  5. Ganz wie du willst, kannst du nur die gelöschten Objekte aus dem "Archiv" mittels Strg-E oder alle Objekte, die im Papierkorb angezeigt werden mittels Strg-E entfernen.

Mails, die gleich in den Papierkorb wandern sollen, kannst du wie bisher mit "Entf", Strg-D oder das Mülleimer-Ikon löschen.

Ich empfehle dir diese Lösch-Aktion über die "Expunge" (Säubern) Taste Strg-E manuell durchzuführen. Es besteht aber auch die Möglichkeit, dies automatisiert zu machen. Hierfür ist aber von dir ein kleines Skript zu schreiben, das über cron oder eine systemd.timer Unit gesteuert wird.

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 880

Ok alles klar. Das Vorgehen ist also Inbox → Archivieren → auto-Löschen → Trash Ich werde es probieren, danke!

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1303

Ich werde es probieren ...

und ich freue mich auf deine Ergebnismeldung.

Bezüglich der Tastenkombination für das Archivieren (das "Kasten-Icon" (Strg-Alt-A)) hatte ich ja meine Probleme, weil diese Taste global beim Programm "keepassxc" verwendet wird. Aus diesem Grund habe ich die Kurzwahl für das Archivieren wie folgt abgeändert:

  • Im Menue ("Ansicht" → "Anordnung" → "Customize...") auswählen.

  • Im linken Scroll-Bereich (Available Actions) die Zeile "Archivieren" durch Scrollen suchen und selektieren.

  • Im rechts Scroll-Bereich der Reiter "Shortcuts" auswählen.

  • Es wird die Vorgabe "Strg+Alt+A" angezeigt. Auf den Butto "Hinzufügen" klicken.

  • Im PopUp Fenster "Press the keys to be used as a shortcut" haabe ich die Taste "Umschalt+Strg+Entf" gleichzeitig gedrückt und mit "Speichern" übernommen.

  • Nach einem Neustart von Evolution kann man nun selektierte Mails durch Drücken der Tastenkombination "Shift+Ctrl+Del" (oder auf Deutsch: Umschalt+Strg+Entf) in den Ordner "Archiv" verschieben (Löschen der 1. Stufe).

Da du eine sehr alte Version von Evolution nutzt, kann es sein, dass du die relevante "accels" Datei anpassen musst. Wenn ich mich recht erinnere, müsste das an der Stelle sein, wo "<Actions>/mail/mail-archive" "<Primary><Alt>a" zu finden ist. Wenn das für dich relevant sein sollte, melde dich, damit ich diese alte Version auf einer VM noch mal aktivieren kann.

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 880

Ich habe mir jetzt ein kleines Python geschrieben, das monatlich die zu alten gelöschten Mails aus dem Ordner entfernt. Das wird in /ect/cron-monthly regelmässig gestartet. Die folders.db ändere ich nicht, die wird von evolution automatisch auf den neuesten Stand gebracht.

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1303

Ja, die folders.db sollte man nicht modifizieren, wenn man nicht genau weis, was man macht.

Kannst du das kleine python Script mal zeigen?

Je nachdem, wie du es realisiert hast, sollte es eventuell nicht während einer laufen evolution Session agieren. Ich hatte mal vorgeschlagen, die "*,*T" Files im relevanten Ordner per cron oder systemd.timer zu löschen. Es gibt auch einen Ansatz über die libcamel API. Ich bin gespannt auf deinen Lösungsansatz.

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 880

shiro schrieb:

Je nachdem, wie du es realisiert hast, sollte es eventuell nicht während einer laufen evolution Session agieren.

Das habe ich nicht beachtet. Was kann passieren?

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 880

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Maildir++ Bereinigungsskript für GNOME Evolution

Dieses Skript durchsucht ein Maildir++-Verzeichnis (z.B. ~/.local/share/evolution/mail/local/.../cur)
nach E-Mails, die als "gelöscht" markiert wurden (Flag "T" im Dateinamen) und löscht sie
endgültig vom Dateisystem, wenn sie ein bestimmtes Mindestalter überschreiten.

Voraussetzungen:
- Die Dateinamen der Mails folgen dem Maildir++-Format:
  <unix_timestamp>.<pid>_<inkrement>.hostname:2,<Flags>
- Das Skript prüft nur Dateien mit gültigem Format
- Es wird nur gelöscht, wenn:
  - das Flag "T" (für gelöscht) gesetzt ist UND
  - die Mail älter als X Tage ist

WARNUNG:
Das Löschen erfolgt unwiderruflich auf Dateisystemebene.


maildir filenamen
-----------------

beispiel: 1754327086.2293224_12066.JMS-lnx:2,RST

1754327086  unix timestamp, 4.8.25 19:04
2293224_12066   PID_inkrement
JMS-lnx     host 
:2,         maildir protocol
R: replied
S: seen
T: trashed
P: passed
D: draft
F: flagged

in der folders.db stehen alle mails noch mal drin. wird benutzt für suche und die GUI listen der mails.
"""

import os
import time

# Verzeichnis, in dem die Maildateien liegen
MAILDIR_CUR = '/home/jms/.local/share/evolution/mail/local/cur'

# Wie alt müssen die Dateien mindestens sein? (z. B. 30 Tage)
MIN_ALTER_TAGE = 30
MIN_ALTER_SEK = MIN_ALTER_TAGE * 24 * 60 * 60

# Aktuelle Zeit
jetzt = time.time()

# Durchlaufe alle Dateien in cur/
for dateiname in os.listdir(MAILDIR_CUR):
    if ':2,' not in dateiname:
        continue  # Kein gültiger Maildir-Dateiname

    pfad = os.path.join(MAILDIR_CUR, dateiname)

    # Prüfe, ob das 'T' (für trashed) im Flagteil enthalten ist
    flags = dateiname.split(':2,')[-1]
    if 'T' not in flags:
        continue  # Nicht gelöscht

    # Extrahiere den Unix-Timestamp
    try:
        timestamp_str = dateiname.split('.')[0]
        timestamp = int(timestamp_str)
    except ValueError:
        continue  # Kein gültiger Timestamp

    # Prüfe Alter
    # (es gibt einige, die sind älter, haben aber einen neueren timestamp)
    if (jetzt - timestamp) < MIN_ALTER_SEK:
        #print(f'zu neu: {dateiname} alter in tagen: {(jetzt - timestamp)/24/60/60}')
        continue  # Noch zu frisch

    # Datei löschen
    try:
        os.remove(pfad)
        print(f'Gelöscht: {dateiname}')
    except Exception as e:
        print(f'Fehler beim Löschen von {dateiname}: {e}')

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1303

Das habe ich nicht beachtet. Was kann passieren?

Wenn evolution aktiv ist, sind viele Objekte im Cache. Wenn man dann dem laufenden Programm einige Dateien "unter dem Hintern" weg löscht, kann es zu Inkonsistenzen führen, die sich dann ärgerlich bemerkbar machen.

Aus diesem Grund ist es stets sinnvoll derartige Aktionen bei einem sicher herunter gefahrenen evolution durchzuführen:

$ # bei einer deb Installation:
$ evolution --force-shutdown
$ 
$ # bei einer flatpak Installation:
$ flatpak kill org.gnome.Evolution 
$ 

Hierdurch werden auch die parallel laufenden Hintergrundprozesse sauber herunter gefahren.

Nachdem dann dein Script gelaufen ist, wird von irgendeinem Benutzer (dir) evolution wieder gestartet. Bei dem Startvorgang wird ein Abgleich der relevanten Dateien und Strukturen mit den Datenbank Inhalten durchgeführt und die neuen Realität (fehlende Dateien) auch in den Datenbanken berücksichtigt.

Danke für dein python Script. Mir ist hier noch folgendes aufgefallen:

Du hast als zu betrachtendes Verzeichnis MAILDIR_CUR definiert. Deine Logik geht dann davon aus, dass es unter diesem Verzeichnis keine Unterverzeichnisse gibt. Prinzipiell entspricht das meinem alten Vorschlag, der auch in den Unterverzeichnissen aufräumt:

$ # bei einer deb Installation:
$ find ~/.local/share/evolution/mail/local/ -ctime +30 -name "*,*T*" -print -delete 
$ 
$ # bei einer flatpak Installation:
$ find ~/.var/app/org.gnome.Evolution/data/evolution/mail/local/ -ctime +30 -name "*,*T*" -print -delete 
$ 	

Auch hierbei werden die vor mehr als 30 Tagen (ctime) gelöschten Mails (T) gelistet und gelöscht. Aber wenn du vor der Ausführung des Scripts noch evolution herunter fährst, sollte dies mit dem python Script sauber funktionieren.

Antworten |