# ADR: recipientEmail in BullMQ-Jobs **Datum:** 2026-04-17 **Status:** Akzeptiert ## Kontext BullMQ-Jobs im `email-send`-Queue enthalten `recipientEmail` im Klartext. SMTP benötigt die Klartext-E-Mail-Adresse als Empfängeradresse — ohne sie kann keine E-Mail zugestellt werden. ## Entscheidung `recipientEmail` verbleibt im Klartext in den Job-Daten. Redis läuft ausschließlich intern (kein öffentlicher Port, Docker-internes Netzwerk, Hetzner DE). Risikominimierung durch bestehende Maßnahmen: - `removeOnComplete: 100` — abgeschlossene Jobs werden nach 100 Einträgen bereinigt - `removeOnFail: { count: 500 }` — fehlgeschlagene Jobs werden begrenzt - `recipientHash` (SHA256) wird für alle Analytics-Events genutzt — kein Klartext in ClickHouse ## Abgelehnete Alternativen **E-Mail-Adresse zur Laufzeit aus DB laden:** Worker enthält nur `subscriberId`, lädt E-Mail aus PostgreSQL. Nachteil: zusätzliche DB-Abfrage pro Job, komplexerer Fehlerfall bei DB-Ausfall während des Versands. **Redis Encryption-at-rest:** Technisch möglich (Redis 7 + verschlüsselte RDB-Snapshots). Infra-Aufgabe, nicht im Anwendungscode lösbar. ## Akzeptiertes Risiko Bei einem Redis-Dump-Leak wären E-Mail-Adressen sichtbar. Wahrscheinlichkeit gering (internes Netz, kein öffentlicher Zugriff). ## Offene Maßnahmen - Infra-Ticket erstellen: Redis-Encryption-at-rest auf Hetzner konfigurieren - Redis-Port darf nie in `docker-compose.yml` nach außen exponiert werden