Überarbeitete README (QuickMove, Schlagwörter, Web-Editor, Auto-Update, 7z-Build-Befehl) plus die neuen Features 2.4.0/2.5.0: erzwungene about:config-Einstellungen (mit Opt-out im Sync-Tab), Client-Versions- Übersicht im Web-Editor, _clients/-Ordner und experiments/prefs/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015PZHd9vRsBiH8cKYdQo1Yv
HPS Vorlagen & Signaturen
Thunderbird-MailExtension zur zentralen Verwaltung von E-Mail-Vorlagen und Signaturen für
Hotel Park Soltau. Vorlagen, Signaturen und Schlagwörter werden über ein Gitea/Forgejo-Repository
synchronisiert und stehen so allen Mitarbeitern zur Verfügung. (Aktuelle Version: siehe
manifest.json.)
Features
- E-Mail-Vorlagen erstellen, bearbeiten und per Klick ins Compose-Fenster einfügen
- 3 Sichtbarkeitsstufen pro Vorlage:
- Persönlich — nur für den eigenen Account, gesynct in
_benutzer/{email}/ - Abteilung — für alle in der Abteilung, gesynct in den Abteilungsordner
- Alle Abteilungen — firmenweit, gesynct in
_gemeinsam/
- Persönlich — nur für den eigenen Account, gesynct in
- Signaturen-Verwaltung mit persönlichem Kopfbereich + gemeinsamer Fußzeile pro Abteilung
- QuickMove — Button in der Nachrichtenansicht: markiert die E-Mail mit deinem Schlagwort und verschiebt sie in einen festgelegten Ordner. Mehrere Aktionen → Auswahlmenü.
- Schlagwörter-Sync — Benutzer-Tags werden zentral über
_config/schlagwoerter.jsonverwaltet, in Thunderbird angelegt und nie gelöscht (dauerhaft nachvollziehbar) - Git-Sync über Gitea/Forgejo API (Pull + Push, automatisch alle 15 Min.)
- Auto-Erkennung von Abteilung und Benutzer via
_config/abteilungen.json - Abteilungsverwaltung — neue Abteilungen direkt aus den Einstellungen anlegen
- WYSIWYG-Editor mit Schriftart, Farben, Listen, Bildern, Links
- Sichtbarkeit direkt änderbar per klickbarem Badge in der Vorlagenliste
- Auto-Update über Gitea (siehe unten) — installierte Clients aktualisieren sich selbst
- Toolbar-Button öffnet direkt die Einstellungen
- Erzwungene Thunderbird-Einstellungen — setzt bei jedem Start bestimmte
about:config-Prefs (z.B. Startseite aus, Kartenansicht, „nicht automatisch als gelesen", Signatur-/Antwort-Verhalten pro Konto); pro Einstellung im Sync-Tab abschaltbar - Client-Versions-Übersicht — jeder Client meldet Plugin- und Thunderbird-Version; im Web-Editor unter Verwaltung → User & Versionen einsehbar (veraltete Clients markiert)
- Web-Editor als optionales Web-Gegenstück (gleiche Gitea-Quelle)
Bedienoberfläche (Einstellungsseite)
Vier Tabs:
| Tab | Funktion |
|---|---|
| Vorlagen | Vorlagen anlegen/bearbeiten, Sichtbarkeit, manuelles Push/Pull |
| Signaturen | Persönlicher Kopfbereich + Fußzeile (gemeinsam / Abteilung) |
| QuickMove | Aktionen konfigurieren (Schlagwort + Zielordner) |
| Sync | Server-Verbindung, Benutzer & Abteilung, Sync auslösen, erzwungene Einstellungen (Opt-out) |
Repository-Struktur (Gitea)
repo/
├── _gemeinsam/ # Vorlagen für alle Abteilungen
│ └── beispiel-vorlage.html
├── _benutzer/ # Persönliche Vorlagen pro User
│ ├── max@hotel-park-soltau.de/
│ └── anna@hotel-park-soltau.de/
├── _config/
│ ├── abteilungen.json # E-Mail → Abteilung Mapping
│ └── schlagwoerter.json # Benutzer-Schlagwörter (Name + Farbe)
├── _clients/ # Status-Meldungen: Plugin-/TB-Version pro User
│ └── max@hotel-park-soltau.de.json
├── Rezeption/ # Abteilungsvorlagen
├── IT/
├── signatures/
│ ├── headers/ # Persönliche Signatur-Köpfe
│ │ └── max@hotel.de.max-mustermann.html
│ └── footers/ # Fußbereiche
│ ├── _default.html # gemeinsame Standard-Fußzeile
│ └── Rezeption.html # Abteilungs-Fußzeile
_config/abteilungen.json
Mapping von Abteilungs-E-Mail-Adressen zu Ordnernamen. Wird vom Plugin gelesen, um Abteilung und persönliche E-Mail automatisch zu erkennen:
{
"info@hotel-park-soltau.de": "Rezeption",
"veranstaltungs@hotel-park-soltau.de": "Veranstaltungsbuero",
"it@hotel-park-soltau.de": "IT",
"haustechnik@hotel-park-soltau.de": "Haustechnik"
}
_config/schlagwoerter.json
Liste der Benutzer-Schlagwörter (für QuickMove/Markierung). Wird beim Sync automatisch um neue Benutzer ergänzt und nie geleert, damit Markierungen dauerhaft nachvollziehbar bleiben:
[
{ "name": "Max Mustermann", "color": "#4a7c59" },
{ "name": "Anna Beispiel", "color": "#2874a6" }
]
Plugin-Aufbau
| Datei | Funktion |
|---|---|
manifest.json |
Extension-Manifest (Thunderbird WebExtension v2) |
background.js |
Template-Insertion + QuickMove-Aktionen (Tag setzen, Nachricht verschieben) |
popup.html / popup.js |
Compose-Popup ("Vorlagen" beim Schreiben) |
message_popup.html / message_popup.js |
QuickMove-Popup in der Nachrichtenansicht |
toolbar_popup.html |
Toolbar-Button → öffnet die Einstellungen |
templates_options/ |
Einstellungsseite (Tabs: Vorlagen, Signaturen, QuickMove, Sync) |
lib/gitea-sync.js |
Gitea-API-Client + Sync-Manager (inkl. Schlagwörter-Sync + Client-Status-Meldung) |
lib/forced-prefs-list.js |
Liste der erzwungenen about:config-Prefs (geteilt: Background + Optionsseite) |
experiments/prefs/ |
Privilegierte Experiment-API zum Setzen von about:config-Prefs |
lib/mdi/ |
Material Design Icons (Subset) für den Editor |
defaults.local.json |
Optionale vorkonfigurierte Verbindungsdaten (gitignored) |
updates.json |
Update-Manifest für Thunderbird-Auto-Update |
release.sh |
Release-Skript (Build hashen, Gitea-Release anlegen, updates.json pflegen) |
web-editor/ |
Optionaler Node/Docker-Web-Editor (eigenständig, gleiche Gitea-Quelle) |
Installation
Lokal (Entwicklung)
- Thunderbird öffnen
- Extras → Add-ons und Themes
- Zahnrad-Icon → Add-on aus Datei installieren
templates-reply-hotel.xpiauswählen
XPI bauen
zip ist nicht zwingend vorhanden, 7z reicht. Immer ohne defaults.local.json bauen —
die Datei enthält den Gitea-Token und darf nicht in eine veröffentlichte .xpi:
rm -f templates-reply-hotel.xpi
7z a -tzip templates-reply-hotel.xpi . \
-xr'!.git' -xr'!node_modules' -xr'!web-editor' -xr'!.claude' \
-xr'!defaults.local.json' -xr'!*.xpi' -xr'!release.sh' -xr'!*.md'
Eine vorkonfigurierte
.xpi(mitdefaults.local.json) ist nur für die interne Erstinstallation auf einer neuen Maschine gedacht und darf niemals als öffentliches Release hochgeladen werden — sonst wäre der Token auslesbar.
Vorkonfigurierte Verbindungsdaten (defaults.local.json)
Wenn eine defaults.local.json im Plugin-Root existiert und in die XPI eingebaut wird, werden
die Verbindungsdaten beim allerersten Start automatisch gesetzt. Updates brauchen die Datei
nicht — bestehende Installationen behalten ihre Konfiguration in storage.local.
{
"baseUrl": "https://git.example.com",
"owner": "organisation",
"repo": "email-vorlagen",
"branch": "main",
"token": "dein-api-token"
}
Die Datei ist in .gitignore — Tokens landen nicht im Repository.
Auto-Update (self-hosted über Gitea)
Installierte Add-ons aktualisieren sich automatisch über updates.json in diesem Repo
(manifest.json → browser_specific_settings.gecko.update_url).
⚠️ Dieses Repository muss public bleiben. Der Thunderbird-Auto-Updater greift anonym (ohne Token) auf
updates.jsonund die Release-.xpizu. Ist das Repo privat, liefert Gitea401— die automatischen Updates funktionieren dann nicht mehr.
Neue Version veröffentlichen:
versioninmanifest.jsonhochzählen (gleiche Version = Clients updaten nicht!)..xpiohnedefaults.local.jsonneu bauen (siehe oben).GITEA_TOKEN=… ./release.sh— hasht die.xpi, aktualisiertupdates.json, legt das Gitea-Release an und lädt die.xpials Asset hoch.updates.json+manifest.jsoncommitten & pushen.
Bestehende Installationen ziehen das Update dann automatisch (Prüfung ~1×/Tag, oder manuell über Add-ons → Zahnrad → „Auf Updates prüfen").
Einrichtung
- Verbindung konfigurieren: Sync-Tab → Server-URL, Repository, Token eingeben → Verbindung speichern (entfällt bei vorkonfigurierter XPI)
- Abteilung wählen (oder automatisch erkannt via
abteilungen.json; neue Abteilungen lassen sich per + direkt anlegen) - Vorlagen erstellen: Vorlagen-Tab → Neue Vorlage → Sichtbarkeit wählen → Speichern
- Signaturen einrichten: Signaturen-Tab → Identität wählen → Kopfbereich bearbeiten → Speichern
- QuickMove einrichten (optional): QuickMove-Tab → Aktion hinzufügen (Name + Zielordner) → Speichern. Der Button erscheint dann in der Nachrichtenansicht.
Voraussetzungen
- Mozilla Thunderbird >= 109.0
- Gitea/Forgejo-Server mit API-Zugang
- API-Token mit Repository-Schreibrechten
Lizenz
MIT License