Bedienung des Admin-UI
Das Admin-UI liegt unter der Basis-URL der Installation (Standard
http://127.0.0.1:8080) und teilt sich den Port mit der Public API. Der
Login ist der Benutzer admin mit dem Passwort, das beim
ersten Start einmalig auf der Konsole
erschien.
Reihenfolge beim Einrichten
Abschnitt betitelt „Reihenfolge beim Einrichten“Erst die SMTP-Route, dann der Mandant. Ein Mandant ohne Route nimmt
Absendungen zwar an, kann sie aber nicht zustellen — im Admin steht dann
failed: keine smtp-route.
SMTP-Routen
Abschnitt betitelt „SMTP-Routen“Eine Route ist ein Mailausgang. Genau eine Route sollte als geteilte Default-Route markiert sein; sie bedient alle Mandanten, die keine eigene Route hinterlegt haben.

| Feld | Hinweis |
|---|---|
| Name | Frei wählbar, muss eindeutig sein. |
| SMTP-Host / Port | Default 587. |
| TLS | starttls (Port 587), implicit (Port 465) oder plain. |
| Benutzername / Passwort | Verschlüsselt gespeichert. Beim Bearbeiten heißt ein leeres Passwortfeld „unverändert”. |
| Absender-Adresse | Fester Absender aller Mails dieser Route. |
| Geteilte Default-Route | Markiert die Route als Fallback für alle Mandanten ohne eigene. |
Die Absender-Adresse ist bewusst fest und kommt nie aus dem
Formular — sie sollte auf einer Domain liegen, für die SPF und DKIM
sauber gesetzt sind (etwa forms.example.de). Die Adresse des Einsenders
reist stattdessen als Reply-To mit, Antworten gehen also trotzdem an
die richtige Person.
Nach dem Anlegen den Test-Versand nutzen: eine Zieladresse eintragen, Knopf drücken. Das prüft Verbindung und Login, bevor echte Formulare darauf laufen. Die Liste zeigt je Route den letzten erfolgreichen Versand und — falls vorhanden — den letzten Fehler.
Mandanten
Abschnitt betitelt „Mandanten“Ein Mandant ist eine Kundenseite.

| Feld | Bedeutung |
|---|---|
| Name | Nur zur Orientierung im Admin. |
| Empfänger-Adresse | Ziel der Formularmails. Kommt nie aus dem Formular. |
| Erlaubte Origins | Eine pro Zeile, mit Schema und ohne Pfad: https://www.example.de. Für lokale Tests auch http://127.0.0.1:8099. |
| Tageskontingent | Mails pro Tag; leer bzw. 0 ⇒ Default 100. Zählt wartende und gesendete. |
| PoW-Bits | Geforderte führende Null-Bits im Proof-of-Work. 0 schaltet ihn ab. |
| Spam-Schwelle | Ab diesem Score wandert eine Absendung in die Quarantäne. 0 schaltet das Scoring ab. |
| Min. Ausfüllzeit (s) | Kürzere Absendungen gelten als Bot. 0 schaltet die Prüfung ab. |
| SMTP-Route | Eigene Route oder die geteilte Default-Route. |
| Aktiv | Der Kill-Switch. |
Nach dem Speichern zeigt die Liste den Site-Key (site_…) — der
gehört ins Formular der Kundenseite
(Formular einbinden).
Die richtigen Zahlen wählen
Abschnitt betitelt „Die richtigen Zahlen wählen“PoW-Bits sind der einzige Wert, bei dem man Besucher spürbar ärgern kann: Der Browser hasht die Lösung einzeln über WebCrypto. Etwa 12 Bits entsprechen rund einer Sekunde, 18 Bits schon etwa 40 Sekunden. Sinnvoll sind 8–14; wer höher geht, sollte vorher auf einem alten Handy testen.
Origins sind die schärfste und zugleich häufigste Fehlerquelle: Der
Eintrag muss exakt dem Origin-Header des Browsers entsprechen — mit
Schema, ohne Pfad, ohne abschließenden Schrägstrich. www.example.de
und https://www.example.de sind zwei verschiedene Dinge, und wer beide
Varianten ausliefert, trägt beide ein.
Kill-Switch
Abschnitt betitelt „Kill-Switch“Der Aktiv-Schalter in der Mandantenliste lehnt sofort alles von dieser Seite ab — die passende Reaktion, wenn ein Formular unter Beschuss steht. Der Mandant bleibt erhalten, nichts wird gelöscht; ein zweiter Klick nimmt ihn wieder in Betrieb.
Submissions und Quarantäne
Abschnitt betitelt „Submissions und Quarantäne“Das Mandanten-Detail listet alle Absendungen mit Status, filterbar über das Auswahlfeld:

| Status | Bedeutung |
|---|---|
received | angenommen, noch nicht final entschieden |
sent | zugestellt |
quarantined | über der Spam-Schwelle, wartet auf Entscheidung |
released | aus der Quarantäne freigegeben und versendet |
discarded | aus der Quarantäne verworfen |
blocked | von der Prüf-Pipeline abgewiesen (z. B. Honeypot) |
failed | Versand endgültig fehlgeschlagen |
Die Bewertung selbst (Spam-Score) ist kein eigener Status — sie steckt in
der Spalte Score neben dem Status und wird bei received bereits
angezeigt, sobald die Prüf-Pipeline durchgelaufen ist.
Bei quarantined erscheinen Freigeben und Verwerfen — freigeben
schickt die Mail doch noch raus. Beides braucht die Berechtigung
quarantine:manage.
Jede Absendung trägt ihre vollständige Statushistorie: Die Ereigniskette ist das Audit-Log, nichts wird überschrieben. Beispiel für den Verlauf einer regulär zugestellten Mail: empfangen → bewertet (Score 2) → zugestellt über Route “default-smtp”. Eine, die in Quarantäne landete und wieder freigegeben wurde, zeigt zusätzlich quarantänisiert (Score 9) → freigegeben von admin.
Blocklist
Abschnitt betitelt „Blocklist“Sperrt Absender dauerhaft, unabhängig vom Mandanten. Vier Arten:
| Art | Beispiel |
|---|---|
| IP | einzelne Adresse |
| CIDR | ganzer Adressbereich |
| ASN | ganzes Netz eines Providers |
| Antwortadresse des Einsenders |
Jeder Eintrag nimmt eine Notiz auf — nutzen. In sechs Monaten weiß sonst niemand mehr, warum ein ganzes ASN gesperrt ist. Einträge wirken sofort; sie werden in den Reputationsspeicher gespiegelt.
Benutzer und Rollen
Abschnitt betitelt „Benutzer und Rollen“Benutzer bekommen Rollen, Rollen bündeln Berechtigungen. Der Katalog
steht im Code und ändert sich nur mit einem Release — die Rolle viewer
etwa darf lesen, aber nichts ändern. Rollenänderungen greifen sofort,
weil die Berechtigungen bei jedem Request frisch aus der Datenbank
kommen und nicht im Token stehen.
Der Benutzer system ist für Hintergrundprozesse da und kann sich nicht
einloggen. Details: Sicherheit.
API-Keys
Abschnitt betitelt „API-Keys“Für Prozesse ohne Browser (Monitoring, CI). Beim Anlegen erscheint der
Klartext-Key (fgw_…) genau einmal — danach liegt nur noch sein Hash
in der Datenbank. Verwendung als X-API-Key-Header.
Jeder Key erbt die Rechte des Benutzers, der ihn erstellt hat. Der Scope
read beschränkt ihn zusätzlich auf lesende Methoden; schreibende
Zugriffe lehnt der Server mit 403 ab. Keys lassen sich mit Ablaufdatum
versehen und jederzeit widerrufen.
Wenn etwas nicht ankommt
Abschnitt betitelt „Wenn etwas nicht ankommt“| Beobachtung | Ansatz |
|---|---|
| Formular meldet sofort einen Fehler | Origin nicht in der Allowlist — exakt mit Schema und ohne Pfad eintragen. |
| „Senden fehlgeschlagen” trotz passendem Origin | Mandant inaktiv, Tageskontingent erschöpft oder Rate-Limit. Der Grund steht im Log, nicht in der Antwort. |
| Absenden dauert auffällig lange | PoW-Bits zu hoch, siehe oben. |
Status failed: keine smtp-route | Es gibt keine (Default-)Route. |
| Mails landen dauerhaft in Quarantäne | Spam-Schwelle zu niedrig für die typischen Inhalte dieser Seite. |
Ausführlichere Fehlersuche auf der Seite selbst: Formular einbinden.