Signaturmonster ist ein selbst-gehosteter SMTP-Proxy, der zwischen deinem
Mailprogramm (z.B. Thunderbird) und dem ausgehenden Mailserver sitzt.
Er fängt jede ausgehende E-Mail ab und reichert sie automatisch mit
HTML-Signaturen, Corporate-Identity-Branding und animierten GIF-Bannern an —
ohne jede Änderung am Mailprogramm oder am Mailserver.
Architektur
Signaturmonster besteht aus fünf Docker-Containern, die als Compose-Stack betrieben werden:
Architektur
# Eingehend vom Mailprogramm
Thunderbird / Outlook
│
▼ Port 587
SMTP Proxy# Python / aiosmtpd — fängt Mails ab, injiziert Signatur
│
▼ intern
Backend API# FastAPI + SQLite — Signaturen, Regeln, CI-Profile
│
├─ Frontend# React + nginx — Web-UI auf Port 8080
│
└─ Updater# Prüft ghcr.io auf neue Versionen
│
▼ Weitergeleitet
Echte Mailserver (SMTP, Port 465/587)
💡
Kein Eingriff nötig: Am Mailprogramm wird nur der SMTP-Server auf die IP des Geräts umgestellt, auf dem Docker läuft
192.168.x.x:587. Authentifizierung, Passwörter und
Mailserver-Konfiguration bleiben unverändert — Signaturmonster reicht die
Credentials transparent weiter.
Voraussetzungen
Voraussetzungen
Für den Betrieb von Signaturmonster brauchst du:
Docker ≥ 24 und Docker Compose ≥ 2.20
Ein Gerät im lokalen Netz mit mindestens 512 MB RAM und Docker-Unterstützung
Port 8080 für das Web-UI erreichbar im lokalen Netz (kann geändert werden)
✨
Ideal für den Heimserver oder Büronetz: Signaturmonster ist für den
Betrieb im lokalen Netzwerk konzipiert. Perfekt geeignet sind z.B. ein
Proxmox-LXC-Container, ein Raspberry Pi (ab Pi 4),
eine NAS mit Docker-Unterstützung (Synology, QNAP, TrueNAS SCALE)
oder jede andere Hardware, auf der Docker läuft.
Docker-Version prüfen
bash
docker --version
docker compose version
Installation
Installation
Signaturmonster wird über einen Installer eingerichtet — kein manuelles Klonen,
kein Editieren von Konfigurationsdateien. Der Installer prüft Docker,
fragt deine SMTP-Zugangsdaten ab, lädt alle nötigen Dateien herunter und startet
die Container automatisch.
Linux & macOS
Öffne ein Terminal und führe folgenden Befehl aus:
Der Installer läuft interaktiv und führt dich Schritt für Schritt durch die Einrichtung.
Er funktioniert auf allen gängigen Linux-Distributionen sowie auf macOS.
Für Proxmox-LXC, Raspberry Pi oder NAS-Systeme reicht ein einfaches
SSH-Terminal.
Windows
Öffne PowerShell als Administrator und führe folgenden Befehl aus:
Danach lädt der Installer docker-compose.yml und nginx.conf
direkt von GitHub, schreibt die .env-Datei und startet den Stack mit
docker compose pull && docker compose up -d.
Ein zufälliger SECRET_KEY wird automatisch generiert.
Beim ersten Start erstellt der Backend-Container automatisch die SQLite-Datenbank
im data/-Verzeichnis unterhalb des Installationsordners. Dieses
Verzeichnis regelmäßig sichern — es enthält alle Signaturen, Regeln und
Benutzerdaten. Standard-Login: monster / monster.
Installation
Proxmox LXC-Container einrichten
Proxmox VE ist eine beliebte Heimserver-Plattform, auf der Signaturmonster
besonders gut läuft. Ein LXC-Container ist leichtgewichtiger als eine vollständige VM
und teilt sich den Kernel des Hosts — ideal für dauerhaft laufende Dienste.
Diese Anleitung führt dich Schritt für Schritt von der Container-Erstellung bis zum
laufenden Signaturmonster.
⚠️
Nesting erforderlich: Docker innerhalb von LXC benötigt die
Option Nesting (und ggf. FUSE). Ohne diese Einstellung schlägt
der Docker-Start fehl. Die entsprechenden Schritte sind unten beschrieben.
Schritt 1 — LXC-Container erstellen
Melde dich im Proxmox-Webinterface an und wähle den gewünschten Node aus
Klicke oben rechts auf CT erstellen
Allgemein: Vergib eine CT-ID (z.B. 200) und einen
aussagekräftigen Hostnamen (z.B. signaturmonster)
Template: Wähle ein aktuelles Template — empfohlen ist
Debian 12 oder Ubuntu 22.04 LTS.
Templates können im Proxmox-Webinterface unter
Datacenter → Storage → CT Templates heruntergeladen werden.
Festplatte: Mindestens 8 GB — für Docker-Images
und die Signaturmonster-Daten reichen 8 GB problemlos aus, 16 GB geben mehr Reserve
CPU: Mindestens 1 Core, empfohlen 2 Cores
Arbeitsspeicher: Mindestens 512 MB,
empfohlen 1024 MB (1 GB) — das gibt dem Docker-Stack
komfortabel Luft
Netzwerk: Wähle vmbr0 (oder deine LAN-Bridge),
stelle DHCP ein oder vergib eine feste IP aus deinem Subnetz.
Eine feste IP ist empfohlen, da Thunderbird und andere Clients die Adresse fix
eingetragen haben müssen.
Klicke auf Fertigstellen — starte den Container noch nicht
Parameter
Minimum
Empfohlen
CPU Cores
1
2
RAM
512 MB
1024 MB
Festplatte
8 GB
16 GB
OS-Template
Debian 12 oder Ubuntu 22.04 LTS
Netzwerk
Feste IP empfohlen (z.B. 192.168.1.50)
Schritt 2 — Nesting aktivieren (für Docker)
Bevor der Container gestartet wird, muss die Nesting-Option aktiviert werden.
Ohne sie kann Docker keinen eigenen Netzwerk-Namespace anlegen.
Wähle den soeben erstellten Container im Proxmox-Webinterface aus
Gehe zu Optionen
Doppelklicke auf Funktionen (Features)
Aktiviere das Häkchen bei Nesting
Optional, aber empfohlen: aktiviere auch FUSE
Klicke auf OK
💡
Alternativ lässt sich Nesting auch direkt in der LXC-Konfigurationsdatei setzen.
Öffne auf dem Proxmox-Host die Datei /etc/pve/lxc/<CT-ID>.conf
und füge folgende Zeile ein:
Schritt 3 — Container starten und Docker installieren
Starte den Container und öffne die Konsole über das Proxmox-Webinterface oder per SSH.
💡
Betriebssystem wählen: Klappe das passende Script für dein
Template auf — Debian 12 oder Ubuntu 22.04 LTS.
Beide Varianten installieren Docker CE inklusive Compose-Plugin.
Der Installer fragt interaktiv nach deinen SMTP-Zugangsdaten und richtet alles ein.
Am Ende werden die Adressen angezeigt, unter denen du das Dashboard erreichst
und die du in Thunderbird einträgst. Trage dort die feste IP-Adresse
des LXC-Containers ein (nicht localhost), damit alle Geräte im Netzwerk
den Proxy erreichen können.
💡
Tipp: Damit Signaturmonster nach einem Neustart des Proxmox-Hosts
automatisch wieder läuft, stelle in den Container-Optionen
Startauftrag → Start beim Booten auf Ja.
Docker selbst startet bereits automatisch (systemd-Unit), und
docker compose up -d im Installationsverzeichnis wird beim
Docker-Start automatisch nicht erneut benötigt — die Container haben
die Restart-Policy unless-stopped.
Konfiguration
Konfiguration
SMTP-Zugänge anlegen
Bevor Thunderbird oder ein anderes Mailprogramm den Proxy nutzen kann, muss
mindestens ein SMTP-Zugang angelegt werden. Diese Zugangsdaten sind
unabhängig von den Web-UI-Benutzern und dienen ausschließlich
zur Authentifizierung am Proxy.
Öffne das Web-UI und navigiere zu Konfiguration → SMTP-Zugänge
Klicke auf Zugang anlegen
Vergib einen Benutzernamen (z.B. den Vornamen oder die E-Mail-Adresse des Mitarbeiters) und ein Passwort
Speichern — der Zugang ist sofort aktiv
Du kannst beliebig viele Zugänge anlegen — z.B. einen pro Mitarbeiter oder
einen gemeinsamen für das ganze Team.
💡
Unter Konfiguration → SMTP-Zugänge findest du auch das
TLS-Zertifikat zum Herunterladen. Da der Proxy ein
selbstsigniertes Zertifikat verwendet, muss es einmalig in Thunderbird
importiert werden (oder Thunderbird fragt beim ersten Verbindungsaufbau
automatisch nach).
Thunderbird einrichten
Ändere in Thunderbird den Postausgangsserver auf den Signaturmonster-Proxy.
Die Einstellung findest du unter
Konten-Einstellungen → Postausgangs-Server (SMTP).
Einstellung
Wert
Server-Adresse
IP des Geräts, auf dem Signaturmonster läuft
Port
2587 (Standard, kann beim Installer geändert werden)
Verbindungssicherheit
STARTTLS
Authentifizierungsmethode
Passwort, normal
Benutzername
Der in Konfiguration → SMTP-Zugänge angelegte Benutzername
⚠️
Der Proxy erzwingt STARTTLS und Authentifizierung.
Als Zugangsdaten trägst du den in Konfiguration → SMTP-Zugänge
angelegten Benutzernamen und das dort gesetzte Passwort ein —
nicht die Zugangsdaten deines eigentlichen Mailservers.
Erste Signatur erstellen
Öffne das Web-UI unter http://localhost:8080 und navigiere zu
Signaturen → Neue Signatur.
Gib der Signatur einen Namen (z.B. "Standard-Signatur")
Füge Blöcke per Drag & Drop aus der linken Palette hinzu:
Text-Block — Freitext, Name, Titel, Abteilung
Bild-Block — Logo, Profilbild
Link-Block — Website, LinkedIn, etc.
Social-Block — vorgefertigte Social-Media-Icons
Trennlinie — horizontale Linie
Banner-Block — GIF-Banner (aus dem Banner-Editor)
Konfiguriere jeden Block in der rechten Seitenleiste
Nutze die Live-Vorschau, um das Ergebnis zu sehen
Klicke auf Speichern
Variablen nutzen
In Text-Blöcken kannst du Variablen verwenden, die beim Senden automatisch
aus der Absender-Datenbank befüllt werden. Variablen werden in doppelte
geschweifte Klammern gesetzt:
Die Werte werden pro Absender in Einstellungen → Absender
hinterlegt und beim Senden automatisch eingesetzt.
CI-Profil anlegen
CI-Profile definieren das visuelle Erscheinungsbild einer Marke:
Primärfarbe, Schriftart, Logo, Hintergrundfarbe für den Mail-Body.
Über den Mail Beautifier wird der eingehende Mail-Body gesäubert
(Fremd-Signaturen entfernt) und in dein CI-Template eingebettet.
Navigiere zu Corporate Identity → Neues CI-Profil
Lade das Firmenlogo hoch (PNG/SVG, max. 2 MB)
Wähle Primärfarbe, Akzentfarbe und Hintergrundfarbe
Wähle die Schriftart (Google Fonts werden unterstützt)
Aktiviere den Mail Beautifier für dieses Profil
Speichern — das Profil steht nun in den Signatur-Regeln zur Verfügung
Regeln konfigurieren
Regeln steuern, welche Signatur (und welches CI-Profil) für welchen Absender
verwendet wird. Ohne passende Regel wird eine Mail unverändert weitergeleitet.
Navigiere zu Regeln → Neue Regel
Gib eine Absender-E-Mail-Adresse ein (oder ein Wildcard-Muster, z.B. *@example.com)
Wähle die Signatur, die angewendet werden soll
Optional: CI-Profil auswählen
Optional: Disclaimer aktivieren
Priorität festlegen (niedrigere Zahl = höhere Priorität)
Speichern und aktivieren
💡
Mehrere Regeln können für denselben Absender existieren. Es gilt immer die Regel
mit der höchsten Priorität (niedrigste Prioritätszahl). So kannst du z.B. eine
allgemeine Domain-Regel und eine spezifische Absender-Regel kombinieren.
Disclaimer hinzufügen
Disclaimer werden am Ende jeder E-Mail eingefügt. Sie können als HTML
(mit Formatierung) und als Plaintext-Variante hinterlegt werden.
Signaturmonster fügt automatisch die richtige Variante je nach Mail-Format ein.
Navigiere zu Disclaimer → Neuer Disclaimer
Gib den HTML-Text ein (Formatierungen wie <b>, <a> sind erlaubt)
Gib die Plaintext-Variante ein
Weise den Disclaimer einer oder mehreren Regeln zu
html — Disclaimer-Beispiel
<!-- HTML-Disclaimer -->
<p style="font-size:11px;color:#888">
Diese E-Mail und ihre Anhänge sind vertraulich und ausschließlich
für den Empfänger bestimmt. Wenn Sie diese E-Mail irrtümlich
erhalten haben, informieren Sie bitte den Absender.
<a href="https://example.com/impressum">Impressum</a>
</p>
Banner & Animationen
Banner & Animationen
Banner erstellen
Der integrierte GIF-Generator erzeugt direkt im Browser animierte GIF-Banner,
die als Block in einer Signatur eingebettet werden.
Navigiere zu Banner → Neuer Banner
Gib dem Banner einen Namen und lege die Dimensionen fest (empfohlen: 600×120 px)
Füge Szenen hinzu (mindestens eine Szene ist Pflicht)
Konfiguriere jede Szene im Szenen-Editor
Klicke auf Vorschau generieren, um das GIF zu rendern
Speichern — der Banner steht nun im Signatur-Designer als Banner-Block zur Verfügung
Szenen-Editor
Jede Szene ist ein Frame im GIF. Die Szenen werden der Reihe nach abgespielt
und können per Drag & Drop umsortiert werden.
Hintergrund-Typen
Typ
Beschreibung
Vollton
Einfarbiger Hintergrund, Farbe frei wählbar
Verlauf
Linearer Farbverlauf mit zwei Farben und Richtung
Bild
Hintergrundbild hochladen (JPG/PNG)
Muster
Geometrisches Muster (Punkte, Linien, Gitter)
Text-Animationen
Animation
Beschreibung
Statisch
Text erscheint sofort, bleibt die ganze Szene sichtbar
Fade-in
Text blendet von transparent zu sichtbar ein
Slide-in links
Text gleitet von links ins Bild
Slide-in rechts
Text gleitet von rechts ins Bild
Slide-in oben
Text fällt von oben ein
Szenen-Einstellungen
Dauer: Wie lange die Szene angezeigt wird (in Sekunden, z.B. 2.0)
Übergangseffekt: Fade, Cut (scharf) oder Slide zwischen Szenen
Übergangszeit: Dauer des Übergangs in Sekunden
Texte: Mehrere Textelemente pro Szene, jedes mit eigenem Rich-Text-Editor
✨
Best Practice: Halte Szene 1 klar und informativ —
sie wird als statisches PNG für Outlook-Clients verwendet.
Alle weiteren Szenen dürfen animierter und aufmerksamkeitsstärker sein.
Outlook-Kompatibilität
Outlook unterstützt keine animierten GIFs in E-Mails. Signaturmonster löst das
automatisch mit MSO Conditional Comments und CID-Inline-Embedding:
Beide Bilder — das animierte GIF und das statische PNG-Fallback aus Szene 1 —
werden als CID-Inline-Anhänge in die Mail eingebettet.
Das bedeutet:
Keine externen URLs — kein Tracking, keine Firewall-Probleme
Bilder werden immer angezeigt, auch ohne Internetverbindung
Kein Bild-Laden beim Öffnen der Mail notwendig
💡
CID-Embedding: Das cid:-Protokoll verweist auf
Anhänge innerhalb derselben E-Mail. Gängige Mail-Clients (Thunderbird, Apple Mail,
Gmail, Outlook) unterstützen CID-Referenzen vollständig.
Erweitert
Erweitert
Benutzer & Rechte
Signaturmonster unterstützt mehrere Benutzer mit unterschiedlichen Rollen.
Benutzer werden im Web-UI unter Einstellungen → Benutzer verwaltet.
Rollen
Rolle
Berechtigungen
Admin
Vollzugriff: Benutzer anlegen, alle Einstellungen, Updates auslösen
Editor
Signaturen, Banner, CI-Profile und Regeln bearbeiten; keine Benutzerverwaltung
Viewer
Nur Ansicht — keine Änderungen möglich; nützlich für Audits
SMTP-Benutzer
Jeder Absender (SMTP-Benutzer) hat eine eigene Eintragung unter
Einstellungen → Absender. Dort werden die Profildaten
(für Variablen) und die SMTP-Zugangsdaten für den echten Mailserver hinterlegt.
Updates
Der Updater-Service prüft regelmäßig die GitHub Container Registry
(ghcr.io/choldermann) auf neue Image-Versionen.
Werden neue Versionen gefunden, erscheint im Web-UI eine Benachrichtigung.
Manuelles Update
bash
# Neue Images holen
docker compose pull
# Stack mit neuen Images neu starten
docker compose up -d
# Alte (nicht mehr genutzte) Images aufräumen
docker image prune -f
Automatisches Update
Der integrierte Updater-Service kann so konfiguriert werden, dass er
Updates automatisch einspielt. Dies wird über eine Umgebungsvariable gesteuert:
.env
# Automatische Updates aktivieren (true/false)AUTO_UPDATE=true# Prüfintervall in Minuten (Standard: 60)UPDATE_INTERVAL=60
⚠️
Achtung: Automatische Updates erfordern, dass der Updater-Container
Zugriff auf den Docker-Socket hat (/var/run/docker.sock).
Achte auf die Sicherheitsimplikationen in Produktivumgebungen.
Sicherheit & Kryptografie
S/MIME und PGP — Architekturelle Klarstellung
Signaturmonster ist ein SMTP-Proxy, der Mailinhalte modifiziert (Signatur, Branding, Disclaimer).
Das ist strukturell unvereinbar mit Ende-zu-Ende-Kryptografie (S/MIME, PGP),
deren Kernaussage lautet: „Ich, der Absender, habe genau diesen Inhalt signiert."
Ein Proxy, der Inhalte verändert und anschließend kryptografisch signiert, könnte diese Aussage nicht treffen —
er hat den Inhalt ja verändert. Das ist kein Bug, sondern ein grundlegender Widerspruch, den
alle inhaltsmodifizierenden Mailsysteme haben — einschließlich kommerzieller Cloud-Anbieter wie Exclaimer oder CodeTwo.
💡
Self-hosted-Vorteil: Bei Cloud-Diensten modifiziert ein Dritter deine Mails —
das ist ein echtes Vertrauensproblem. Signaturmonster läuft auf deiner eigenen Infrastruktur.
Die Modifikation findet innerhalb deines kontrollierten Netzwerks statt, bevor die Mail dein System verlässt —
vergleichbar mit einem Exchange-Server, der serverseitig Signaturen anhängt.
Workaround für E2E-Signierpflicht
Wer persönliche E2E-Signierung benötigt (z. B. Anwaltskanzleien, Behörden mit QES-Pflicht nach eIDAS):
Kryptografische Signatur im Mailclient setzen, bevor die Mail an den Proxy gesendet wird
Alle Proxy-Funktionen für diese Mail per #sm:off deaktivieren
Der Befehl #sm:off wird auf einer eigenen Zeile in die Mail geschrieben —
der Proxy leitet die Mail dann unverändert weiter. Der Befehl selbst wird vor dem Versand entfernt.
✨
Geplant: Gateway-Signing auf Organisationsebene (Organisationssignatur nach dem Proxy-Durchlauf)
ist für eine zukünftige Version vorgesehen. Das beweist „Diese Mail hat die Organisation X in diesem Zustand versandt"
— kein persönliches E2E, aber für viele Compliance-Anforderungen ausreichend.
Mail-Queue & Zwischenspeicherung
Eingehende Mails werden beim SMTP-Proxy empfangen und zunächst in einer lokalen SQLite-Queue
auf deinem Server zwischengespeichert, bevor Verarbeitung und Weiterleitung starten.
Die Mails verbleiben dabei vollständig in deiner Infrastruktur — es besteht zu keinem Zeitpunkt
eine Verbindung zu externen Diensten für den Mailversand.
Queue-Übersicht im Web-UI
Unter System → Mail-Queue sind alle Einträge mit Status, Absender, Empfänger
und Betreff einsehbar:
Status
Bedeutung
pending
Wartet auf Verarbeitung oder Retry
sent
Erfolgreich zugestellt
failed
Alle Retry-Versuche erschöpft
Mails herunterladen
Einzelne Mails können direkt aus der Queue-Übersicht heruntergeladen werden —
nützlich für Debugging, Audit-Zwecke oder die Prüfung fehlgeschlagener Zustellversuche.
Fehlgeschlagene Einträge lassen sich außerdem manuell neu einreihen.
Retry-Strategie
Bei Zustellfehlern wiederholt der Proxy automatisch mit exponentiellem Backoff:
Versuch
Wartezeit
1. Fehler
1 Minute
2. Fehler
5 Minuten
3. Fehler
30 Minuten
4. Fehler
2 Stunden
5. Fehler (final)
Status failed + Bounce-Mail an Absender
💡
Datenschutz-Hinweis: Die Queue-Speicherung sollte im Datenschutzkonzept berücksichtigt werden,
da Mailinhalte für die Dauer der Verarbeitung auf dem Server vorgehalten werden.
Erfolgreich zugestellte Mails können unter System → Mail-Queue → Alle gesendeten bereinigen
manuell gelöscht werden.
Troubleshooting
Hier sind die häufigsten Probleme und ihre Lösungen:
SMTP-Verbindung schlägt fehl
Überprüfe die Logs des SMTP-Proxy-Containers:
bash
docker compose logs smtp-proxy
Häufige Ursachen:
Port 587 ist auf dem Host bereits belegt — ändere PROXY_PORT in .env