Repository navigation
Releases: Stephan-Lefty/MailBurg
Release list
MailBurg 1.8.2
Keine vier Stunden nach der 1.8.1, und das ist Absicht: Ein Fehler, der
Anwender still trifft, geht sofort heraus. Diese Fassung kommt aus einer
einzigen Frage im Betrieb – »Kann ich beim Tagesbericht mehrere
Mailadressen mit ; angeben?«
Ein Semikolon verschluckte alle Empfänger außer dem ersten
Wer den Tagesbericht an mehr als eine Adresse schickt, sollte diese
Fassung einspielen – und danach nachsehen, ob dort wirklich alle
stehen.
Outlook zeigt das Semikolon als Trenner an; das Mailformat kennt nur das
Komma. Wer a@example.org; b@example.net eintrug, bekam beim Zerlegen
dies:
[('', 'a@example.org'), ('', '')]
Die zweite Adresse war weg. Ohne Fehlermeldung.
Bei einem Störungsbericht ist das die teuerste Sorte Fehler. Der
Bericht ist die Einrichtung, die Alarm schlagen soll, wenn etwas klemmt.
Die Vertretung wartet dann auf eine Warnung, die nie kommt – und merkt
es nicht, denn ein ausbleibender Bericht sieht aus wie ein Tag ohne
Störung.
Und die Probe im Einrichtungsfenster bestätigte den Fehler sogar. Sie
nimmt denselben Weg: Der Mailserver nimmt die Nachricht für den ersten
Empfänger an, nichts wirft eine Ausnahme – also meldete der Knopf Erfolg.
Ausgerechnet die Prüfung, die das hätte aufdecken müssen, verdeckte es.
Beides ist behoben. Das Semikolon wird jetzt angenommen und umgesetzt,
aber nur außerhalb von Anführungszeichen: "Müller; Hans" <h@example.org> ist ein einziger Empfänger, und den zu zerreißen wäre
derselbe Schaden in die andere Richtung.
Die Probe nennt die tatsächlichen Empfänger, einzeln untereinander,
statt den Wortlaut des Eingabefelds zurückzugeben. Stehen dort zwei, sind
es zwei.
Ein Komma zu viel ließ den Bericht an niemanden gehen
Beim Nachmessen gefunden, auf Python 3.14: Bei einem Syntaxfehler
verwirft die Standardbibliothek die ganze Empfängerliste, nicht nur
den kaputten Teil.
'chef@example.org,' → [('', '')]
Ein Komma am Ende, und der Bericht hätte niemanden erreicht – während das
Eingabefeld gefüllt aussah. Eine Liste, aus der keine Adresse
herauskommt, gilt jetzt als nicht eingerichtet; dann sagt die Probe
»Noch unvollständig«, statt Erfolg für eine Mail ohne Empfänger zu
melden.
Die Fassungsnummer führt zu den Änderungen
Unten in der Weboberfläche stand »MailBurg 1.8.1« als toter Text. Das
beantwortet, welche Fassung läuft – nicht, was daran anders ist als
vorher. Wer das wissen wollte, musste das Repository suchen, den
Änderungen-Teil finden und darin den richtigen Abschnitt: drei Schritte
für eine Auskunft, die an diese Stelle gehört.
Verlinkt ist die Release-Seite dieser Fassung. Nicht der Vergleich
zweier Stände – der zeigt Quelltextzeilen und beantwortet die Frage für
niemanden, der dort klickt. Und nicht die Übersicht aller Fassungen, denn
dort müsste man wieder suchen, und auf einem Server läuft selten die
neueste.
Und ein Befehl in der Anleitung, der an der eigenen Falle vorbeifilterte
In der Windows-Server-Anleitung stand zum Ereignisprotokoll:
Get-WinEvent -LogName Application -MaxEvents 50 | Where-Object { … }
Das holt erst die fünfzig jüngsten Ereignisse aller Programme und
filtert danach. Auf einem Server mit lebhaftem Anwendungsprotokoll ist
die gesuchte Zeile längst herausgefallen – man sieht nichts und schließt,
es sei nichts gelaufen.
Genau dieser Unterschied führte am 7. Oktober zu einem Fehlschluss, der
eine Stunde Suche gekostet hat. Die Lehre stand danach in den
Projektnotizen – und in der Anleitung stand weiter der Befehl, der sie
auslöst. Jetzt -FilterHashtable, also im Protokolldienst selbst
gefiltert, mit der Begründung daneben.
2412 Tests, lesbarkeit.py ohne Befund, CI grün.
MailBurg 1.8.1
Zwei Fehler, die niemandem aufgefallen wären, und ein Werkzeug, das
eine Wand weggeräumt hat. Diese Fassung kommt aus einem einzigen
Vormittag im laufenden Betrieb – angestoßen von einer Frage, nicht von
einem Fehlerbericht.
Auf einem Server blieb jeder eingescannte Anhang stumm
Wer MailBurg Server betreibt, sollte diese Fassung einspielen.
Im Programm steht seit jeher, was geschehen soll: nach jedem Abruf ein
kleines Zeitbudget Texterkennung, zwei Minuten oder dreißig Dokumente,
damit neu ankommende Scans sofort durchsuchbar sind. Das Programmfenster
tat das. Der Dienst nie – und auf einem Server gibt es kein Fenster.
Wie es aussah, ist der eigentliche Punkt. Die Mail war da, der
Anhang war da, nur ließ sich nichts darin finden. Das sieht nicht nach
einer Störung aus, sondern nach einem Dokument, in dem eben kein Text
steht. Wer eine Rechnungsnummer sucht, die ausschließlich auf dem
eingescannten Papier steht, bekommt keinen Treffer und sucht den Fehler
bei sich.
Der Dienst arbeitet jetzt dasselbe Häppchen ab wie das Fenster, im
selben geöffneten Archiv. Eine Erkennung daneben – als zweiter Dienst
oder eigener Zeitplan – stünde dem Abruf im Weg, und dann bliebe Post
liegen, um Scans lesbar zu machen. Die Rangfolge ist eindeutig:
Archivieren ist Pflicht, Durchsuchbarmachen ist Kür.
Die Zahl der gelesenen Dokumente steht in der Abrufmeldung. Ohne sie
wäre von außen wieder nicht nachprüfbar, ob es läuft – und genau daran
lag es, dass die Lücke so lange unbemerkt blieb: Ein Dienst, der etwas
nicht tut, sieht aus wie einer, der nichts zu tun hatte.
Fehlt tesseract, wird das einmal je Dienstlauf gemeldet statt
achtundvierzigmal am Tag. Verschweigen wäre falsch, denn dann bleibt
jeder Scan dauerhaft unauffindbar; eine Tapete im Ereignisprotokoll
liest aber auch niemand.
Die Trefferliste fragte ein Archiv, das längst zu war
Beim Schließen eines Fensters sortiert und blättert Qt noch einmal – und
die Trefferliste lief dabei in ein Cannot operate on a closed database.
suchen() hatte die Prüfung von Anfang an, mit der Begründung im
Kommentar daneben. fetchMore prüfte nur, ob überhaupt ein Index da ist.
Zwei Stellen, eine nachgezogen, die andere nicht. Beide fragen jetzt
dieselbe Methode, damit die dritte sie nicht vergessen kann.
Im Betrieb trifft es den, der das Archiv wechselt, während Treffer
angezeigt werden. Gemessen: 76 Meldungen in einem Testlauf, danach keine.
Alle Befehle auf einen Blick
Neu: docs/befehle.md
– die Kommandozeile vollständig, nach Aufgaben geordnet statt nach dem
Alphabet: nachsehen und prüfen, Post hereinholen, suchen und
herausholen, sichern, pflegen. Dazu die drei Befehle, die es allein für
die Server-Fassung gibt.
Obenan stehen drei Regeln, die aus Schaden stammen: vor dem Sichern den
Abruf anhalten, der Dienst hält den Suchindex, Kontonamen sind
unveränderlich. Jede hat im Betrieb schon Stunden oder Daten gekostet.
Ein Wächtertest hält die Übersicht an der Wirklichkeit. Jeder
genannte Befehl und jede genannte Option wird gegen den Parser des
Programms geprüft. Eine Übersicht veraltet sonst still – und wer dann
abtippt, was dort steht, bekommt eine Fehlermeldung statt einer Auskunft.
Für Mitwirkende: die Tests laufen über einen eigenen Läufer
python3 tests/lauf.pyDer Testlauf brach auf manchen Systemen nach dem letzten Test mit
einem Speicherzugriffsfehler ab, während unittest zuvor »OK« gemeldet
hatte. Der Absturz liegt im C++-Teil von Qt beim Herunterfahren des
Interpreters.
Es lag nicht an einem bestimmten Test, sondern an ihrer Zahl. Zehn
Methoden, die nichts tun als assertTrue(True), reichten zum Absturz:
2383 Tests gingen, 2393 nicht. Damit hätte jeder künftige Test dieselbe
Wirkung gehabt – bei einem Projekt, in dem jede Zusage einen Test
schuldet, ist das eine Wand und keine Lästigkeit.
Der Läufer führt die Tests aus, merkt sich das Ergebnis, räumt auf und
beendet den Prozess dann selbst. Das behebt das Symptom, nicht die
Ursache, und genau so steht es im Modulkopf. Der Preis gehört dazu:
Fehler, die erst beim Aufräumen aufträten, fallen nicht mehr auf; wer
danach sucht, nimmt weiterhin python3 -m unittest discover -s tests.
Acht Tests wachen über den Läufer selbst. Einer, der immer 0 liefert,
wäre schlimmer als jeder Absturz: Die CI wäre grün, und kein
gescheiterter Test fiele je wieder auf.
Vier Lücken weniger in den Anleitungen
Alle aus dem Umzug eines Geschäftsarchivs mit 827.199 Dateien:
- Die Vollständigkeitsrechnung – wie man belegt, dass jede
ausgegebene Datei erklärt ist. Das war am Umzugstag die eigentliche
Arbeit, und sie stand nirgends. - Die Codepage im Protokoll. Die Windows-Konsole schreibt
»▄bergangen« statt »Übergangen«; wer nach dem Wort sucht, findet
nichts und hält eine Meldung für nicht vorhanden, die achtzehnmal
dastand. - Die deutschen Sprachdaten für tesseract.
winget installbringt
sie nicht mit, und MailBurg liest dann mit dem englischen Modell. - Sichern neben einem laufenden Abruf erzeugt eine Sicherung, die
sich selbst widerspricht – und »Kette heil« meldet.
2403 Tests, lesbarkeit.py ohne Befund, CI grün.
MailBurg 1.8.0
Die erste Fassung, die aus dem laufenden Betrieb eines Firmenservers
stammt. Am 5. und 6. Oktober 2026 ist ein Geschäftsarchiv mit 70.133
Mails auf einen Windows Server 2025 gezogen – und was dabei fehlte,
steht hier.
Eine Ampel, bevor man liest
Ganz oben im Einrichtungsfenster, vor allem anderen:
| Rot | Es fehlt etwas Zwingendes – der Dienst läuft nicht oder liefert nichts aus. |
| Gelb | Es läuft, aber etwas gehört nachgezogen. Der häufigste Fall: ein Dienst ohne Abruf, der ein Archiv ausliefert, das nicht mehr wächst. |
| Grün | Alles in Ordnung. |
Daneben ein Knopf, der zur ersten offenen Sache führt.
Siebzehn Zeilen beantworten nicht die Frage, mit der man dieses
Fenster öffnet. Ein Verwalter will wissen, ob er handeln muss, und
zwar bevor er die Liste durchgeht. Erst danach interessiert ihn, was.
Unklares macht dabei nicht gelb: »Noch nicht nachgesehen« beim Update
ist eine offene Frage, keine Störung. Wer daraus Gelb machte, hätte
eine Ampel, die nie grün wird – und damit keine.
Und ein Fehlalarm, der die Ampel fast entwertet hätte
Beim ersten Öffnen am echten Server stand sie auf Rot: »Tresor: 7
Passwörter liegen in Ihrem Benutzerprofil.« Der Tresor war in Ordnung –
der Dienst holte seit Stunden Post.
Die Ursache stand zwei Zeilen darüber: Das Feld Gemeinsamer Ordner
war leer. gesetzte_variablen() las nur Archiv, Adresse und Port;
MAILBURG_EINSTELLUNGEN und MAILBURG_DATEN wurden geschrieben,
aber nie wieder gelesen. Die Prüfliste schloss daraus, der Dienst
finde den Tresor nicht.
Ein Fehlalarm ist teurer als eine fehlende Warnung. Wer dreimal
nachsieht und nichts findet, glaubt beim vierten Mal auch der richtigen
Meldung nicht mehr – und dann ist die ganze Ampel wertlos. Ein
Wächtertest hält jetzt fest, dass jede Variable, die das Fenster
schreibt, auch wieder gelesen wird.
Dazu zwei Kleinigkeiten aus demselben Lauf: Das Fenster hatte kein
Wappen (ein leeres Blatt in der Leiste, derselbe Befund wie am
28.08.2026 bei der gepackten Fassung) und ließ sich nicht rollen –
siebzehn Prüfzeilen plus Wartung plus Protokoll passen auf einen
entfernten Bildschirm nicht mehr.
Ein Tagesbericht per Mail
Warum ein Archivdienst eine Mail schreibt, obwohl er sonst nur
liest: Ein Dienst, der still arbeitet, ist von einem Dienst, der
still nicht arbeitet, nicht zu unterscheiden. Am 6. Oktober
scheiterte der Abruf tagelang in seiner ersten Zeile; die Meldung stand
im Ereignisprotokoll, wo man nur nachsieht, wenn man schon etwas ahnt.
Der Bericht nennt, wie viele Mails seit dem letzten Mal dazukamen, und
ob das Archiv in Ordnung ist – geprüft, nicht behauptet. Der Befund
steht im Betreff: Wer dreißig Tagesmails im Postfach hat, liest keine
davon, aber einen Betreff, der sich ändert, sieht er.
Einstellbar sind Empfänger, Uhrzeit und Takt (täglich, alle 7, 14 oder
30 Tage) sowie der Postausgangsserver – ausdrücklich ein eigenes
Postfach, nicht eines der archivierten; sonst landet jeder Bericht
beim nächsten Abruf wieder im Archiv. Das Versandpasswort liegt im
Tresor, nicht in der Registry.
Eine Störung wartet nicht auf die Uhrzeit. Sie geht sofort hinaus
und wiederholt sich nicht, solange sie dieselbe bleibt – sonst legt der
Empfänger nach dem dritten Mal eine Regel an und bekommt auch die
vierte nicht mehr, die etwas anderes sagt. Dafür kommt eine Entwarnung,
sobald es wieder läuft.
Und das Ausbleiben ist selbst eine Nachricht. Das steht in jeder
Mail.
Wartung statt nur Einrichtung
Das Fenster heißt jetzt einrichten und warten und hat einen eigenen
Kasten mit drei Werkzeugen, für die es bisher nur die Kommandozeile gab
– auf einem Server also nichts:
Archiv prüfen hält die Hash-Kette gegen die Ablage. Drei Fragen auf
einmal: Ist die Kette unversehrt, liegt zu jeder Mail noch eine Datei,
und liegt dort etwas, das im Journal nicht vorkommt? Das Letzte ist das
interessanteste – eine von Hand hineingelegte Datei ist nicht
archiviert, sondern untergeschoben.
Tresor prüfen fragt beide Richtungen ab: Postfächer ohne Anmeldung
(der Dienst holt dort nichts und meldet es nicht als Fehler) und
Einträge ohne Postfach (fremde Passwörter auf einem gemeinsamen
Rechner).
Mails einlesen übernimmt Post aus Dateien – ein Verzeichnis mit
.eml-Dateien, ein Maildir, eine MBOX oder ein Thunderbird-Profil. Der
Dienst wird dafür angehalten und bleibt es, bis Sie ihn wieder
starten: Zwei Vorgänge, die gleichzeitig ins selbe Archiv schreiben,
reißen die Hash-Kette. Lässt er sich nicht anhalten, wird gar nicht
eingelesen.
Der Text zählt dabei mehr als der Knopf. Eine beschädigte
Hash-Kette sieht ein Verwalter höchstens einmal – dann muss dastehen,
dass die Mails davon nicht betroffen sind, dass die Lückenlosigkeit
beanstandet ist, und was zu tun ist.
Zwei Befehle, die beim Umzug fehlten
mailburg tresor entfernen KENNUNG nimmt einen Eintrag heraus. Ein
Tresor vom Arbeitsplatz bringt alle dortigen Anmeldungen mit; die
Kontenliste lässt sich filtern, der Tresor nicht, denn er kennt keine
Archive. Jeder Eintrag ist einzeln verschlüsselt – herausnehmen lässt
die übrigen lesbar und braucht keinen neuen Hauptschlüssel. Stimmt eine
der genannten Kennungen nicht, wird keine entfernt.
mailburg zugaenge ARCHIV anzeigename NAME "Vor Nachname" ändert den
Klarnamen. Bisher ging das nur im Einrichtungsfenster – also an dem
Ort, den es auf einem Server gerade nicht gibt.
Alles zum Server an einer Stelle
Die Server-Dokumentation lag auf drei Seiten verteilt, und keine davon
war der Einstieg. MailBurg Server bündelt
jetzt alles: womit man anfängt, was im Betrieb zählt und die vier
Dinge, die man wissen sollte, bevor es ernst wird. Der Link steht in
der Kopfzeile aller Hauptdateien.
2291 Tests – geprüft mit und ohne Qt, denn der erste
CI-Lauf installiert absichtlich keine Oberfläche.
lesbarkeit.py ohne Befund, CI grün.
MailBurg 1.7.9
Diese Fassung kommt fast vollständig aus dem ersten echten Serverbetrieb:
Am 5. und 6. Oktober 2026 ist ein Geschäftsarchiv mit 70.133 Mails auf
einen Windows Server 2025 gezogen. Was dabei aufgelaufen ist, steht hier.
Der Fehler, der sofort herausmusste
Der Abruf im Dienst ist nie gelaufen – seit es ihn gibt. Und hinter
dem ersten Fehler steckte ein zweiter; beide sind hier behoben.
Der erste: In server/abruf.py stand for k in Kontenliste(), und
Kontenliste ist kein Behälter, sondern hat einen (.konten). Das
wirft in der ersten Zeile jedes Durchgangs:
MailBurg-Abruf: Abruf fehlgeschlagen: 'Kontenliste' object is not iterable
Der zweite kam erst zum Vorschein, als der erste behoben war – so
funktioniert das mit verdeckten Fehlern. Die Quelle wurde ohne
Passwort, ohne Höchststand und ohne Abrufzustand gebaut:
MailBurg-Abruf: Postfach »…« übersprungen:
quelle_fuer() missing 1 required positional argument: 'passwort'
Höchststand und Abrufzustand sind dabei kein Beiwerk: Ohne sie holte
jeder Lauf das ganze Postfach erneut, alle dreißig Minuten. Und ohne
Vormerken gescheiterter Mails zöge der Höchststand an ihnen vorbei –
sie fehlten dann für immer, ohne Spur.
Dazu eine Meldung, die beruhigte und nicht stimmte: »Nichts Neues
in 7 Postfächern«, während alle sieben an einem Fehler gescheitert
waren. Wer das liest, sucht die ausbleibende Post anderswo.
Übersprungene zählen jetzt getrennt und werden genannt.
Wie es aussah, ist dabei das Eigentliche. Der Fehler landet im weiten
except der Abrufschleife – das dort mit gutem Grund steht, damit ein
klemmendes Postfach den Faden nicht beendet – und von dort ins
Ereignisprotokoll. Der Dienst lief weiter, die Statusseite meldete
"abruf":"alle 30 Minuten", und das Archiv bekam nichts dazu.
Wer MailBurg als Dienst betreibt, sollte diese Fassung einspielen.
Ob es Sie betrifft, sagt ein Blick ins Ereignisprotokoll:
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='MailBurgServer'} -MaxEvents 20 |
Format-List TimeCreated, MessageSteht dort die Zeile oben, hat Ihr Dienst nie Post geholt. Das Archiv
ist unversehrt – es fehlt nur alles, was seitdem hätte dazukommen
sollen. Nach dem Update holt der erste Lauf es nach.
Dass kein Test das gefunden hat, hat einen Grund, der hierher gehört:
Es gab welche für Takt, Pause, ein klemmendes Postfach und dafür, dass
die Schleife einen Fehler überlebt – also für alles um die Funktion
herum, nie für den Weg hinein. Jetzt läuft einer mit einer echten
Kontenliste durch genau diese Zeile.
Ein Fenster für die Servereinrichtung
Bis hierher ging das nur über die Kommandozeile: zehn Schritte, acht
davon ein abgetippter PowerShell-Befehl. Startete der Dienst danach
nicht, stand der Grund in einem Ereignisprotokoll, das man mit einem
weiteren Befehl durchsucht – man musste nur wissen, dass es das gibt.
mailburg-server-einrichten zeigt stattdessen eine Prüfliste:
Betriebssystem, Python, Pakete, Rechte, Archiv, Zugänge, Dienst,
Tresor, Abruf, Weboberfläche. Wo etwas fehlt, steht der Knopf daneben,
der es behebt. Unter Windows auch als eigene Datei
MailBurg-Server-Einrichten.exe, dieselbe Liste als Text über
--pruefen.
Die Postfachspalte lässt sich zuschieben
Auf einem 5:4-Bildschirm lagen die Postfächer quer über der
Trefferliste – die Trefferzahlen standen mitten in den Betreffzeilen.
Ursache: Ein Grid-Feld wird nie schmaler als sein längstes unteilbares
Wort, und eine Mailadresse ist für den Browser ein Wort. Behoben, und
dazu gleich das, was im Betrieb gefehlt hat: Der Knopf Postfächer
neben der Trefferzahl schiebt die Spalte auf und zu, der Zustand bleibt
gespeichert. Zugeschoben ist die Vorgabe – gesucht wird ohnehin
über alle Postfächer, und wer gezielt in einem sucht, nimmt die
ausführliche Suche.
Zwei Befehle, die beim Umzug fehlten
mailburg tresor entfernen KENNUNG nimmt einen Eintrag aus dem Tresor.
Das fehlte, weil ein Tresor vom Arbeitsplatz alle dortigen
Anmeldungen mitbringt – die Kontenliste lässt sich vorher filtern, der
Tresor nicht, denn er kennt keine Archive. Jeder Eintrag ist einzeln
verschlüsselt: Herausnehmen lässt die übrigen lesbar und braucht keinen
neuen Hauptschlüssel.
mailburg zugaenge ARCHIV anzeigename NAME "Vor Nachname" ändert den
Klarnamen. Bisher ging das nur im Einrichtungsfenster – also an dem
Ort, den es auf einem Server gerade nicht gibt.
Weiteres aus dem Umzug
- Die gebündelten pypdf-Meldungen bündeln jetzt wirklich. Gezählt wurde
die fertige Meldung, und pypdf setzt in fast jede Zahlen ein – also
war jede ihr eigener Eintrag. - Fehlt
fonttools, sagt MailBurg das mit dem Befehl daneben. Ohne das
Paket kommt pypdf an die Zeichentabelle eingebetteter Schriften nicht
heran, und das trifft gewöhnliche Geschäftspost. - Unter Windows wird eine verwaiste Sperrdatei jetzt weggeräumt.
os.kill(pid, 0)ist dort kein Anklopfen; der Weg geht jetzt über
OpenProcess. - Die Anleitungen sagen, dass der erkannte Text aus Scans beim Umzug
mitkopiert werden muss – er entsteht nicht beim Indexbauen.
Gemessenes statt Geschätztes
An einem echten Geschäftsarchiv mit 70.133 Mails und vielen
PDF-Rechnungen, auf einem Windows Server 2025 ohne poppler:
| Indexlauf über pypdf | 6075 s (101 Minuten, 11,6 Mails je Sekunde) |
| Suchindex danach | 1,07 GB |
| Rohdaten im Archiv | 19,2 GB |
Mit pdftotext aus poppler ist der Indexlauf ein Bruchteil davon.
2206 Tests, CI grün.
MailBurg 1.7.8
Diese Fassung kommt fast vollständig aus dem ersten echten Serverbetrieb:
Am 5. und 6. Oktober 2026 ist ein Geschäftsarchiv mit 70.133 Mails auf
einen Windows Server 2025 gezogen. Was dabei aufgelaufen ist, steht hier.
Der Fehler, der sofort herausmusste
Der Abruf im Dienst ist nie gelaufen – seit es ihn gibt.
In server/abruf.py stand for k in Kontenliste(), und Kontenliste
ist kein Behälter, sondern hat einen (.konten). Das wirft in der
ersten Zeile jedes Durchgangs:
MailBurg-Abruf: Abruf fehlgeschlagen: 'Kontenliste' object is not iterable
Wie es aussah, ist dabei das Eigentliche. Der Fehler landet im weiten
except der Abrufschleife – das dort mit gutem Grund steht, damit ein
klemmendes Postfach den Faden nicht beendet – und von dort ins
Ereignisprotokoll. Der Dienst lief weiter, die Statusseite meldete
"abruf":"alle 30 Minuten", und das Archiv bekam nichts dazu.
Wer MailBurg als Dienst betreibt, sollte diese Fassung einspielen.
Ob es Sie betrifft, sagt ein Blick ins Ereignisprotokoll:
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='MailBurgServer'} -MaxEvents 20 |
Format-List TimeCreated, MessageSteht dort die Zeile oben, hat Ihr Dienst nie Post geholt. Das Archiv
ist unversehrt – es fehlt nur alles, was seitdem hätte dazukommen
sollen. Nach dem Update holt der erste Lauf es nach.
Dass kein Test das gefunden hat, hat einen Grund, der hierher gehört:
Es gab welche für Takt, Pause, ein klemmendes Postfach und dafür, dass
die Schleife einen Fehler überlebt – also für alles um die Funktion
herum, nie für den Weg hinein. Jetzt läuft einer mit einer echten
Kontenliste durch genau diese Zeile.
Ein Fenster für die Servereinrichtung
Bis hierher ging das nur über die Kommandozeile: zehn Schritte, acht
davon ein abgetippter PowerShell-Befehl. Startete der Dienst danach
nicht, stand der Grund in einem Ereignisprotokoll, das man mit einem
weiteren Befehl durchsucht – man musste nur wissen, dass es das gibt.
mailburg-server-einrichten zeigt stattdessen eine Prüfliste:
Betriebssystem, Python, Pakete, Rechte, Archiv, Zugänge, Dienst,
Tresor, Abruf, Weboberfläche. Wo etwas fehlt, steht der Knopf daneben,
der es behebt. Unter Windows auch als eigene Datei
MailBurg-Server-Einrichten.exe, dieselbe Liste als Text über
--pruefen.
Die Postfachspalte lässt sich zuschieben
Auf einem 5:4-Bildschirm lagen die Postfächer quer über der
Trefferliste – die Trefferzahlen standen mitten in den Betreffzeilen.
Ursache: Ein Grid-Feld wird nie schmaler als sein längstes unteilbares
Wort, und eine Mailadresse ist für den Browser ein Wort. Behoben, und
dazu gleich das, was im Betrieb gefehlt hat: Der Knopf Postfächer
neben der Trefferzahl schiebt die Spalte auf und zu, der Zustand bleibt
gespeichert. Zugeschoben ist die Vorgabe – gesucht wird ohnehin
über alle Postfächer, und wer gezielt in einem sucht, nimmt die
ausführliche Suche.
Zwei Befehle, die beim Umzug fehlten
mailburg tresor entfernen KENNUNG nimmt einen Eintrag aus dem Tresor.
Das fehlte, weil ein Tresor vom Arbeitsplatz alle dortigen
Anmeldungen mitbringt – die Kontenliste lässt sich vorher filtern, der
Tresor nicht, denn er kennt keine Archive. Jeder Eintrag ist einzeln
verschlüsselt: Herausnehmen lässt die übrigen lesbar und braucht keinen
neuen Hauptschlüssel.
mailburg zugaenge ARCHIV anzeigename NAME "Vor Nachname" ändert den
Klarnamen. Bisher ging das nur im Einrichtungsfenster – also an dem
Ort, den es auf einem Server gerade nicht gibt.
Weiteres aus dem Umzug
- Die gebündelten pypdf-Meldungen bündeln jetzt wirklich. Gezählt wurde
die fertige Meldung, und pypdf setzt in fast jede Zahlen ein – also
war jede ihr eigener Eintrag. - Fehlt
fonttools, sagt MailBurg das mit dem Befehl daneben. Ohne das
Paket kommt pypdf an die Zeichentabelle eingebetteter Schriften nicht
heran, und das trifft gewöhnliche Geschäftspost. - Unter Windows wird eine verwaiste Sperrdatei jetzt weggeräumt.
os.kill(pid, 0)ist dort kein Anklopfen; der Weg geht jetzt über
OpenProcess. - Die Anleitungen sagen, dass der erkannte Text aus Scans beim Umzug
mitkopiert werden muss – er entsteht nicht beim Indexbauen.
Gemessenes statt Geschätztes
An einem echten Geschäftsarchiv mit 70.133 Mails und vielen
PDF-Rechnungen, auf einem Windows Server 2025 ohne poppler:
| Indexlauf über pypdf | 6075 s (101 Minuten, 11,6 Mails je Sekunde) |
| Suchindex danach | 1,07 GB |
| Rohdaten im Archiv | 19,2 GB |
Mit pdftotext aus poppler ist der Indexlauf ein Bruchteil davon.
2203 Tests, CI grün.
MailBurg 1.7.7
Zwei Fehler auf Python 3.11 – der älteren der beiden unterstützten
Grundlagen. Beide traten nur dort auf; auf Python 3.12 und neuer (etwa im
Debian-Paket oder unter Windows) war nie etwas kaputt. Aufgefallen sind sie
im wöchentlichen Prüflauf, der im Gegensatz zum Alltagslauf auch die älteste
unterstützte Python-Fassung durchspielt – und der zweite kam erst zum
Vorschein, als der erste behoben war.
Behoben
Die Weboberfläche ließ sich auf Python 3.11 nicht laden. Ein
Platzhalter-Attribut in der Browser-Suchmaske war so geschrieben, dass
Python 3.11 die Datei nicht einlesen konnte – ein Sprachdetail, das erst
Python 3.12 erlaubt. mailburg/server/seiten.py lädt wieder; das erzeugte
HTML ist unverändert. Der Fehler steckte still seit der 1.0.0.
Eine Mail mit krummem Kopf blieb beim Abruf draußen. Die strenge
Auslegung der Kopfzeilen verschluckte sich auf Python 3.11 an einer
ungültigen Message-ID (oder einer kaputten References-Zeile), wie sie in
Spam und von fehlerhaften Mailprogrammen vorkommt. Die Mail wurde als
»fehlgeschlagen« gezählt und bei jedem Lauf erneut übergangen – still, denn
ihr Rumpf war tadellos. MailBurg fällt jetzt auf die nachsichtige Auslegung
zurück und nimmt die Mail auf.
Wer betroffen ist
Nur unter Python 3.11 – das ist zum Beispiel Debian 12 aus dem
Quelltext. Der erste Fehler traf allein »Das Archiv im Browser« (der Dienst
brach beim Start mit einem Syntaxfehler ab); der zweite traf den Abruf und
wiegt schwerer, weil eine betroffene Mail unbemerkt nie ins Archiv kam.
Nicht betroffen ist das normale Programmfenster, die Kommandozeile und
jede Einrichtung unter Python 3.12 oder neuer – also das Debian-Paket
(liefert 3.13) und Windows. Wer MailBurg als Fenster benutzt, muss nichts
tun.
Installieren
| Debian 13, GuideOS | sudo apt install ./mailburg_1.7.7_all.deb |
| Ubuntu 24.04, Mint 22, Fedora, Arch, openSUSE | AppImage: chmod +x, starten |
| Windows | MailBurg.exe |
Der Punkt vor dem Schrägstrich ist wichtig – ohne ihn sucht apt im
Internet nach einem Paket dieses Namens.
Das AppImage läuft nicht auf Ubuntu 22.04, Mint 21 und Debian 12 – diesen
Systemen fehlen die Bibliotheken und ein SQLite, das MailBurgs Suchindex
anlegen kann. Wer den Browser-Zugang unter Debian 12 aus dem Quelltext
betreibt, ist genau der Fall, für den diese Fassung da ist: git pull und
./install.sh. Archiv, Kontenliste, Suchindex und Schlüsselbund bleiben
dabei unangetastet.
Das vollständige Änderungsprotokoll steht in
CHANGELOG.md.
MailBurg 1.7.6
Eine Fassung aus einem Nebensatz. Eine Anwenderin schrieb, wie sie
MailBurg einrichtet: »Ich lade mir immer die .deb-Datei herunter und
installiere sie dann, indem ich darauf klicke.«
Das ist der normale Weg für jeden, der nicht am Terminal arbeitet – und
grafische Paketinstaller ziehen empfohlene Pakete oft nicht mit. Damit
erklären sich zwei ihrer Fehlerberichte auf einmal, die ich vorher einzeln
behandelt hatte.
Behoben
python3-zstandard ist jetzt erforderlich statt bloß empfohlen. Es ist
die dritte Stufe in drei Tagen: Am 22.09. stand es unter Suggests, dann
unter Recommends – beide Male kam es bei ihr nicht an.
Ohne dieses Paket lässt sich ein Archiv mit gepackten Nachrichten gar nicht
öffnen: Klick auf eine Mail, Fehlermeldung. Das ist keine Empfehlung,
sondern eine Voraussetzung. Ab Python 3.14 ist Zstandard eingebaut und das
Paket überflüssig; Debian 13 liefert aber 3.13.
Wer betroffen ist
Wenn Sie MailBurg durch Anklicken der .deb-Datei eingerichtet haben und
eine dieser Meldungen kennen, hilft ein Update auf 1.7.6:
- »… ist mit Zstandard gepackt, auf diesem Rechner fehlt die Unterstützung«
- »Für ‹Postfach› liegt kein Passwort im Schlüsselbund« bei allen Postfächern
Beide Pakete werden ab dieser Fassung zwingend mitinstalliert. Wer schon
nachgeholfen hat, muss nichts weiter tun.
Sofort, ohne auf das Update zu warten:
sudo apt install python3-keyring python3-zstandardInstallieren
| Debian 13, GuideOS | sudo apt install ./mailburg_1.7.6_all.deb |
| Ubuntu 24.04, Mint 22, Fedora, Arch, openSUSE | AppImage: chmod +x, starten |
| Windows | MailBurg.exe |
Der Punkt vor dem Schrägstrich ist wichtig – ohne ihn sucht apt im Internet
nach einem Paket dieses Namens. Und dieser Weg ist dem Anklicken vorzuziehen:
Er holt alles Nötige mit.
Das AppImage läuft nicht auf Ubuntu 22.04, Mint 21 und Debian 12 – diesen
Systemen fehlen die Bibliotheken und ein SQLite, das MailBurgs Suchindex
anlegen kann.
Wer aus dem Quelltext einrichtet: git pull und ./install.sh. Archiv,
Kontenliste, Suchindex und Schlüsselbund bleiben dabei unangetastet.
Wer von 1.7.0 oder älter kommt, sollte einmal
mailburg abrufen --alle --volllaufen lassen. Der Grund steht in den Anmerkungen zur 1.7.1: Nach
einem Wechsel der Nachrichtennummern auf dem Server konnte Post lautlos
ausbleiben.
2032 Tests, in beiden Umgebungen grün.
Das vollständige Änderungsprotokoll steht in
CHANGELOG.md.
MailBurg 1.7.5
Zwei Rückmeldungen, vier Fehler. Diese Fassung besteht fast vollständig
aus dem, was zwei Anwender gemeldet haben – und in beiden Fällen war die
mitgelieferte Beobachtung wertvoller als der Fehler selbst.
Behoben
»Kein Schlüsselbund« ist etwas anderes als »kein Passwort«. Fehlt auf
einem Rechner der Schlüsselbund – oder das Paket dafür –, meldete MailBurg für
jedes Postfach »liegt kein Passwort im Schlüsselbund«. Das nennt einen Grund,
den es nicht gibt: Es gab keinen Speicher, in dem etwas hätte liegen können.
Eine Anwenderin hätte daraufhin ihre Passwörter neu eingegeben – in einen
Speicher, den es auf ihrem Rechner nicht mehr gab. Der wahre Grund stand die
ganze Zeit im Programm, wurde aber weggeworfen.
python3-keyring ist jetzt erforderlich, nicht bloß empfohlen. Was nur
empfohlen ist, darf apt autoremove wegräumen – und tut es gelegentlich, ohne
dass jemand es merkt. Genau das war bei ihr passiert.
Ohne Schlüsselbund ist MailBurg im Alltag unbenutzbar: Jedes Passwort wird bei
jedem Abruf neu erfragt, und ein Abruf im Hintergrund läuft gar nicht – der
scheitert dann still, denn er hat kein Fenster, in dem er sich beschweren
könnte.
Die IMAP-Quelle spekuliert nicht mehr über den Grund. »Für 'X' liegt kein
Passwort vor. Es steht weder im Schlüsselbund noch wurde eines angegeben« –
diese Stelle bekommt eine leere Zeichenkette und kann nicht wissen, warum. Bei
einem Lauf ohne Schlüsselbund stand darüber richtig »das Paket keyring fehlt«,
und direkt darunter widersprach diese Meldung.
Die Meldung zum fehlenden keyring nannte nur den pip-Weg. Wer das
Debian-Paket benutzt, hat kein pip und braucht python3-keyring.
Neu
Die Maske zeigt jetzt, was im Suchordner steht. Wer im Dialog Suchordner
bearbeiten auf Ausführlich … geht, findet die Felder gefüllt. Bisher landete
davon nur ein einzelnes Wort im Begriffsfeld.
Und der Knopf erscheint nur, wo er zurückführt. Die Maske schreibt zurück:
Was sie nicht darstellen kann, wäre nach einem OK still weg. Statt das zu
erklären, gibt es den Weg dort nicht – der Knopf ist ausgegraut und sagt im
Tooltip, warum.
Das betrifft Ausdrücke, die niemals aus der Maske kamen: zwei freie Wörter
(rechnung müller sind zwei Bedingungen, die Maske hat ein Feld), dasselbe
Wort zweimal (von:a von:b), oder etwas, für das es kein Feld gibt
(ist:ungelesen). Wer so etwas von Hand schreibt, braucht die Maske ohnehin
nicht.
Beides geht auf joka63 zurück – der Fehlerbericht wie die Lösung.
Installieren
| Debian 13, GuideOS | sudo apt install ./mailburg_1.7.5_all.deb |
| Ubuntu 24.04, Mint 22, Fedora, Arch, openSUSE | AppImage: chmod +x, starten |
| Windows | MailBurg.exe |
Das AppImage läuft nicht auf Ubuntu 22.04, Mint 21 und Debian 12 – diesen
Systemen fehlen die Bibliotheken und ein SQLite, das MailBurgs Suchindex
anlegen kann.
Wer aus dem Quelltext einrichtet: git pull und ./install.sh. Archiv,
Kontenliste, Suchindex und Schlüsselbund bleiben dabei unangetastet.
Wer von 1.7.0 oder älter kommt, sollte einmal
mailburg abrufen --alle --volllaufen lassen. Der Grund steht in den Anmerkungen zur 1.7.1: Nach
einem Wechsel der Nachrichtennummern auf dem Server konnte Post lautlos
ausbleiben. Bei einem echten Lauf über drei Archive kamen dabei 176
Nachrichten nach, von denen niemand wusste, dass sie fehlten.
2032 Tests, in beiden Umgebungen grün.
Das vollständige Änderungsprotokoll steht in
CHANGELOG.md.
MailBurg 1.7.4
Aus einem Fehlerbericht. Eine Anwenderin richtete das Debian-Paket ein,
klickte in der Trefferliste eine Mail an – und bekam einen Traceback statt
der Nachricht. Kein Zugriff auf das eigene Archiv, ohne erkennbaren Grund.
⚠️ Wenn Sie das gerade auch haben
Lautet die Meldung »… ist mit Zstandard gepackt, auf diesem Rechner fehlt die
Unterstützung dafür«, hilft sofort:
sudo apt install python3-zstandardDanach MailBurg neu starten. Ihre Mails sind alle da – es fehlte nur das
Stück, das sie wieder auspackt.
Achtung: Das Paket heißt python3-zstandard, nicht zstandard (so heißt
es nur bei pip) und schon gar nicht zstd – das ist das
Kommandozeilenwerkzeug und hilft hier nicht.
Behoben
Drei Fehler wirkten zusammen, und jeder für sich wäre harmlos gewesen.
python3-zstandard stand unter Suggests – Vorschläge installiert apt
nicht mit. Begründet war das mit »packt ja nur besser«. Das stimmt beim
Schreiben; beim Lesen ist es Voraussetzung. Wer ein Archiv hat, in dem
.zst-Dateien liegen, kommt ohne dieses Paket an keine einzige Nachricht
heran. Es steht jetzt unter Recommends und wird mitinstalliert.
Die Meldung nannte den falschen Paketnamen. »zstandard« ist der Name bei
pip; unter Debian heißt dasselbe python3-zstandard. Die Anwenderin
installierte daraufhin zstd und schrieb: »Python ist aktuell und Zstandard
auch.« Beides stimmte – und trotzdem lief es nicht. Ein Rat, der ins Leere
führt, ist schlimmer als keiner. Die Meldung erkennt jetzt, woher MailBurg
stammt, und nennt den passenden Namen samt Warnung vor der Verwechslung.
Und die Prüfung beim Öffnen gab es nie. Der Modulkopf von
core/compress.py beschrieb seit jeher eine Funktion, die beim Öffnen eines
Archivs sicherstellt, dass es sich überhaupt lesen lässt. Sie war nirgends
implementiert. Deshalb kam der Fehler nicht beim Öffnen mit einer Erklärung,
sondern beim ersten Klick als Traceback. Jetzt gibt es sie.
Installieren
| Debian 13, GuideOS | sudo apt install ./mailburg_1.7.4_all.deb |
| Ubuntu 24.04, Mint 22, Fedora, Arch, openSUSE | AppImage: chmod +x, starten |
| Windows | MailBurg.exe |
Das AppImage läuft nicht auf Ubuntu 22.04, Mint 21 und Debian 12 – diesen
Systemen fehlen die Bibliotheken und ein SQLite, das MailBurgs Suchindex
anlegen kann.
Wer aus dem Quelltext einrichtet: git pull und ./install.sh. Archiv,
Kontenliste, Suchindex und Schlüsselbund bleiben dabei unangetastet.
Wer von 1.7.0 oder älter kommt, sollte einmal
mailburg abrufen --alle --volllaufen lassen. Der Grund steht in den Anmerkungen zur 1.7.1: Nach
einem Wechsel der Nachrichtennummern auf dem Server konnte Post lautlos
ausbleiben.
2015 Tests, in beiden Umgebungen grün.
Das vollständige Änderungsprotokoll steht in
CHANGELOG.md.
MailBurg 1.7.3
Ein Befehl für alle Archive.
Wer nach dem Fehler der 1.7.1 einmal vollständig abrufen soll und mehrere
Archive hat, musste bisher für jedes einen Pfad heraussuchen, den man
auswendig nicht kennt. Jetzt genügt:
mailburg abrufen --alle --vollDas läuft nacheinander durch jedes Archiv, das MailBurg auf diesem
Rechner schon einmal geöffnet hat.
Doppelt abgelegt wird dabei nichts – MailBurg erkennt jede Nachricht an
ihrem Inhalt wieder, nicht an einer laufenden Nummer. Der Lauf dauert länger
als ein gewöhnlicher Abruf, ändert aber an dem, was schon da ist, nichts.
Ein klemmendes Archiv beendet den Lauf nicht. Eine abgezogene Platte, ein
laufendes Hauptfenster mit Sperre, ein falsches Passwort: Jedes davon betrifft
ein Archiv, nicht die übrigen. Was dabei übersprungen wurde, steht am Ende
ausdrücklich da – eine abgezogene Platte sähe sonst aus wie ein Archiv, in
dem nichts Neues war.
Wollen Sie nur ein bestimmtes Archiv, schreiben Sie dessen Ordner dahinter
statt --alle. Und wer MailBurg im Fenster benutzt: Schließen Sie es vorher,
sonst schreiben zwei Vorgänge in dasselbe Archiv.
Warum das gerade jetzt kommt
Mit der 1.7.1 wurde ein Fehler behoben, durch den neue Post ausbleiben konnte,
ohne dass irgendwo etwas auffiel – betroffen war vor allem, wer die Proton
Mail Bridge neu eingerichtet hat. Was dabei übersprungen wurde, holt nur ein
vollständiger Abruf nach. Dieser Befehl macht das in einem Schritt.
Installieren
| Debian 13, GuideOS | sudo apt install ./mailburg_1.7.3_all.deb |
| Ubuntu 24.04, Mint 22, Fedora, Arch, openSUSE | AppImage: chmod +x, starten |
| Windows | MailBurg.exe |
Das AppImage läuft nicht auf Ubuntu 22.04, Mint 21 und Debian 12 – diesen
Systemen fehlen die Bibliotheken und ein SQLite, das MailBurgs Suchindex
anlegen kann.
Wer aus dem Quelltext einrichtet: git pull und ./install.sh. Archiv,
Kontenliste, Suchindex und Schlüsselbund bleiben dabei unangetastet.
2007 Tests, in beiden Umgebungen grün.
Das vollständige Änderungsprotokoll steht in
CHANGELOG.md.