Kendrick Bollens 730d32ab29 Web-Editor: Farben/Inline-Styles beim Einfügen aus E-Mails behalten
TinyMCE registriert unter Chromium (Chrome/Edge) und Safari einen
PastePreProcess-Filter, der bei der Default-Einstellung
paste_webkit_styles:'none' ALLE inline-Styles (inkl. color) aus extern
eingefügtem Inhalt entfernt. Interner Copy/Paste ist ausgenommen — daher
ging webapp->webapp, aber E-Mail->Editor verlor die Farbe.

paste_webkit_styles:'all' schaltet den Stripper ab und behält die Styles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011GkKJBbiNV421xfCbXikGV
2026-07-23 11:37:29 +02:00
2026-07-22 14:49:06 +02:00

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 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)

  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:

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.

{
  "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.jsonbrowser_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

Description
No description provided
Readme GPL-3.0 9.9 MiB
v2.6.0 Latest
2026-07-22 16:34:37 +00:00
Languages
JavaScript 73.1%
HTML 17.3%
CSS 8.5%
Shell 0.9%
Dockerfile 0.2%