# 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/` - **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.json` verwaltet, 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](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: ```json { "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: ```json [ { "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) 1. Thunderbird öffnen 2. Extras → Add-ons und Themes 3. Zahnrad-Icon → Add-on aus Datei installieren 4. `templates-reply-hotel.xpi` auswä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`: ```bash 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` (mit `defaults.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`. ```json { "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.json` und die > Release-`.xpi` zu. Ist das Repo privat, liefert Gitea `401` — die automatischen Updates > funktionieren dann nicht mehr. Neue Version veröffentlichen: 1. **`version` in `manifest.json` hochzählen** (gleiche Version = Clients updaten nicht!). 2. `.xpi` **ohne** `defaults.local.json` neu bauen (siehe oben). 3. `GITEA_TOKEN=… ./release.sh` — hasht die `.xpi`, aktualisiert `updates.json`, legt das Gitea-Release an und lädt die `.xpi` als Asset hoch. 4. `updates.json` + `manifest.json` committen & pushen. Bestehende Installationen ziehen das Update dann automatisch (Prüfung ~1×/Tag, oder manuell über Add-ons → Zahnrad → „Auf Updates prüfen"). ## Einrichtung 1. **Verbindung konfigurieren**: Sync-Tab → Server-URL, Repository, Token eingeben → Verbindung speichern (entfällt bei vorkonfigurierter XPI) 2. **Abteilung wählen** (oder automatisch erkannt via `abteilungen.json`; neue Abteilungen lassen sich per **+** direkt anlegen) 3. **Vorlagen erstellen**: Vorlagen-Tab → Neue Vorlage → Sichtbarkeit wählen → Speichern 4. **Signaturen einrichten**: Signaturen-Tab → Identität wählen → Kopfbereich bearbeiten → Speichern 5. **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