AddOn für Thunderbird zur Anbindung an Paperless-NGX
Für Thunderbird fehlte mir eine Anbindung an Paperless-NGX. Zwar gibt es die Anbindung von E-Mail-Adressen in Paperless-NGX, jedoch war mir das nicht interaktiv genug, da ich natürlich nicht massenhaft E-Mails importieren möchte. Ich möchte das selektiv machen. Ebenfalls gewünscht war die Funktion, Anlagen direkt aus dem Archiv in eine E-Mail zu holen – wahlweise als Dateianlage oder als Sharelink. Das vereinfacht die Arbeit im Alltag erheblich. Zu diesem Zweck habe ich mit Unterstützung von KI (Anthropic Claude) ein AddOn erstellt, das die gewünschten Funktionen bereitstellt.
Situation
Rechnungen kommen per Mail. Bisher hieß das: Anhang speichern, in den Consume-Ordner schieben, in Paperless nachklassifizieren – drei Schritte für einen Vorgang. Nach der LibreOffice-Erweiterung für Paperless lag die Thunderbird-Erweiterung nahe – dieselben Erkenntnisse zur Schnittstelle, aber vollständig eigener Code. Thunderbird kennt WebExtensions, LibreOffice UNO; übertragbar war nur das Wissen.
Was sie kann
Rechtsklick auf einen Anhang → In Paperless ablegen. Bei mehreren Anhängen erscheint eine Auswahl. Kleine Bilder und Signaturen sind vorab abgewählt — sie gehören zur Darstellung der Nachricht, nicht zum Inhalt. Wer alles archiviert, hat nach einem Jahr hunderte Logos im Bestand.
Rechtsklick in der Nachrichtenliste → E-Mail ablegen.
Die vollständige Nachricht als .eml, Anhänge bleiben darin enthalten. Der Titel wird aus dem Betreff gebildet, ohne Präfixe wie AW: oder Fwd: — die tragen im Archiv nichts bei und stören beim Sortieren.
Im Verfassenfenster → Aus Paperless einfügen. Als Anhang oder als Freigabelink.
Zwei Ziele beim Ablegen
Wie in der LibreOffice-Fassung: entweder ein neues Dokument oder eine neue Version eines bestehenden. Der zweite Fall ist der, den ich immer mal wieder hatte und für den es in keinem der von mir eingesetzten Programme eine direkte Lösung gibt bzw. gab. Die Rechnung kommt als PDF, später entsteht die bearbeitbare Fassung – oder es kommt eine korrigierte Version derselben Rechnung. Beides gehört zusammen. Direkt nach dem Ablegen erscheint der Klassifizierungsdialog. Sonst trägt ein neues Dokument nur den Titel, und nachträglich macht man es erfahrungsgemäß nicht mehr.
Anhang oder Link
Beim Einfügen in einen Entwurf gibt es beide Wege.
Als Anhang für alles, was auch in fünf Jahren noch lesbar sein muss, wenn der Link längst abgelaufen ist. Geladen wird das Original, nicht die Archivfassung.
Als Freigabelink für große Dateien und für Empfänger, die ohnehin Zugriff auf das Archiv haben sollen. Eingefügt werden Name, Adresse und Gültigkeit:
**Einladung Musterveranstaltung**
https://dms.example.org/share/ZYGwdw…
Link gültig bis 11.09.2026
Die Adresse steht sichtbar, nicht nur als Verweisziel. Bei einem Link, der ohne Anmeldung Zugriff gewährt, sollte der Empfänger sehen, wohin er führt.
Auf Wunsch wird das Dokument dabei mit einem Tag gekennzeichnet, voreingestellt Sharelink. So lässt sich später prüfen, was einmal nach draußen gegeben wurde. Ein leeres Feld bedeutet: keine Kennzeichnung.
Zugriffsrecht nur für eine Adresse
Die Erweiterung verlangt kein pauschales Zugriffsrecht im Manifest. Statt host_permissions steht dort optional_host_permissions, und beim Speichern der Einstellungen wird das Recht für genau die eingetragene
Adresse erbeten.
Der Unterschied ist erheblich: Eine Erweiterung mit <all_urls> darf jede Adresse erreichen und jeden Inhalt lesen. Hier ist es genau ein Ursprung, und man sieht beim Erteilen, welcher.
Insgesamt fünf Berechtigungen — storage, menus, messagesRead, compose, notifications. Im ersten Entwurf stand auch compose.send drin, ohne je benutzt zu werden. Ein Recht, das nicht gebraucht wird, gehört nicht ins Manifest.
Bekannte Einschränkungen
Der Freigabelink landet am Ende des Textes, nicht an der Schreibmarke. Die Compose-Schnittstelle kennt kein Einfügen an der Cursorposition — der Nachrichtentext muss vollständig gelesen und zurückgeschrieben werden.
Der Zugriff über eine LAN-Adresse funktioniert nicht. Über einen Rechnernamen mit https läuft alles, eine direkte Adresse wie http://192.168.1.5:8000 scheitert mit NetworkError, auch bei erteiltem Zugriffsrecht. Die Ursache ist nicht abschließend geklärt; vermutlich schränken neuere Gecko-Versionen Anfragen aus erweiterten Kontexten in
private Adressbereiche ein.
Praktisch verschmerzbar — der Weg über einen Reverse Proxy ist ohnehin der bessere, weil verschlüsselt.
Installieren
Voraussetzung ist Paperless-ngx 3.0 oder neuer.
Zum Ausprobieren:
Extras → Entwicklerwerkzeuge → Debuggen von Add-ons
→ Temporäres Add-on laden → manifest.json wählen
Dauerhaft über die Add-ons-Verwaltung, „Add-on aus Datei installieren". Danach in den Einstellungen die Basisadresse und ein API-Token eintragen. Beim Speichern wird das Zugriffsrecht erbeten und die Verbindung sofort geprüft. Läuft der interne Zugang über einen abweichenden Port, gibt es ein zusätzliches Feld für die Adresse, unter der Freigabelinks gebaut werden — sonst trügen sie den internen Port und wären von außen wertlos. Die Oberfläche liegt in Deutsch, Englisch und Französisch vor.
Quelltext
Alles unter MIT-Lizenz:
Git-Repository: AddOn Thunderbird-Connector
Gebaut nach Manifest V3 mit den Thunderbird-Besonderheiten: Ereignisseite statt Service Worker, compose_action und message_display_action neben action.
Erprobt an einer Instanz, nicht formal getestet. Rückmeldungen sind willkommen.