email.squibble.ch
Ein Postfach an CI-Pipelines und Agenten delegieren, ohne das Passwort herauszugeben.
- Verfügbar
- Python, FastAPI, PostgreSQL, React 19, TypeScript, MCP, Docker Swarm
- email.squibble.ch
Das Problem
Irgendwann soll eine Pipeline eine Mail verschicken. Oder ein Agent soll nachsehen, ob die Bestätigung schon da ist. Die naheliegende Lösung ist ein IMAP-Passwort im Secret-Store der CI. Dieses Passwort kann alles: senden, lesen, löschen, Ordner umbenennen. Es lässt sich nicht einschränken, nicht zeitlich begrenzen und nicht einzeln zurückziehen. Wer es einmal weitergegeben hat, hat das Postfach weitergegeben.
Wie es das löst
email.squibble.ch legt eine Delegationsschicht vor das Postfach. Der Aufrufer bekommt kein Passwort, sondern ein Token mit einer Liste konkreter Scopes, einem Ablaufdatum und einem Widerrufs-Flag. Alles, was danach passiert, geht durch den Dienst: eine REST-API, ein MCP-Server für Agenten, eine Sendewarteschlange und ein Dashboard für den Betrieb.
Die Zugangsdaten des Postfachs liegen Fernet-verschlüsselt in der Datenbank und werden nur serverseitig entschlüsselt. Ein Aufrufer kommt nie in ihren Besitz.
Was es kann
Ein Scope statt eines Passworts. Ein Token trägt eine Auswahl aus neun Berechtigungen,
etwa messages:send oder attachments:show. Ausstellen und Widerrufen sind Kommandos für den
Betrieb. Nach dem Widerruf antwortet jeder weitere Aufruf mit 401.
Ein Postfach pro Token, über den Fremdschlüssel. Die Bindung an genau ein Postfach steht im Datenmodell, nicht in einer Prüfung pro Request. Der Sprung in ein fremdes Postfach ist damit nicht ausdrückbar. Verboten wäre schwächer.
Autorisierung vor der IMAP-Verbindung. Signatur, Scope, Ablauf und Widerruf werden geprüft, bevor überhaupt eine Verbindung zum Mailserver aufgebaut wird. Ein abgelehnter Aufruf kostet den Mailserver nichts.
Fünfzehn MCP-Tools, deckungsgleich mit der REST-API. Die Tools bilden die API ab, ohne sie zu erweitern. Welche davon funktionieren, entscheiden allein die Scopes des Tokens. Es gibt kein zweites Berechtigungssystem, das mit dem ersten aus dem Tritt geraten könnte.
Sendewarteschlange in PostgreSQL. Abgearbeitet mit SELECT FOR UPDATE SKIP LOCKED, damit
mehrere Worker nie dieselbe Nachricht greifen. Bounces laufen über VERP-Absenderadressen zurück
und machen den Zustellstatus abfragbar.
Was es nicht tut
Es ersetzt keinen Mailserver. Unter der Delegationsschicht läuft weiterhin ein gewöhnliches docker-mailserver mit Postfix, Dovecot und OpenDKIM.
Das Dashboard hängt hinter einem einzigen HTTP-Basic-Login für das ganze Deployment. Dieser Login umgeht das Scope-Modell und ist als bewusster Kompromiss für ein internes Werkzeug in einem ADR festgehalten. Rollen pro Nutzer und echte Mandantentrennung fehlen; Workspaces und Projekte gruppieren heute nur.
Ein Design-Review hat ausserdem einen Lesescope gefunden, der nebenbei destruktive
Ordneroperationen erlaubt hätte. Er wurde in folders:write und messages:move aufgeteilt.
email.squibble.ch
Auf die Warteliste
Schreiben Sie uns, was Sie damit vorhaben. Wir melden uns, sobald email.squibble.ch für Sie bereitsteht.
Auf die Warteliste