From c39d252f5f3d2bac6bef4c891e2e16e1c926057a Mon Sep 17 00:00:00 2001 From: duffyduck Date: Thu, 30 Jul 2026 11:13:08 +0200 Subject: [PATCH] Stressfrei-Mailbox: Postfach-Passwort beim Anlegen verbindlich setzen Beim Anlegen einer Adresse mit echter Mailbox (IMAP/SMTP) wird das frisch generierte Passwort jetzt immer explizit am Provider gesetzt (updateMailboxPassword direkt nach dem Provisioning). Behebt den Fall, dass die Adresse beim Provider bereits als reine Weiterleitung existierte: dann kehrte provisionEmailWithMailbox frueh mit success zurueck, ohne je ein Postfach-Passwort zu setzen. Im CRM lag dann ein verschluesseltes Passwort, das der Provider nicht kannte -> IMAP/SMTP-Login schlug fehl. Jetzt stimmen CRM und Provider ueberein. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../src/services/stressfreiEmail.service.ts | 19 ++++++++++++++++++- docs/todo.md | 12 ++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/backend/src/services/stressfreiEmail.service.ts b/backend/src/services/stressfreiEmail.service.ts index 5678fbe5..abb0d57e 100644 --- a/backend/src/services/stressfreiEmail.service.ts +++ b/backend/src/services/stressfreiEmail.service.ts @@ -189,7 +189,8 @@ export async function createEmail(data: CreateEmailData) { const localPart = data.email.split('@')[0]; if (createMailbox) { - // Mit echter Mailbox anlegen + // Mit echter Mailbox anlegen. Immer ein frisches, sicheres Passwort + // erzeugen. const password = generateSecurePassword(); const result = await provisionEmailWithMailbox(localPart, customer.email, password); @@ -197,6 +198,22 @@ export async function createEmail(data: CreateEmailData) { throw new Error(result.error || 'Fehler beim Anlegen der Mailbox'); } + // Passwort verbindlich am Postfach setzen. Beim Neu-Anlegen hat + // createEmailWithMailbox es zwar schon gesetzt (der folgende Call ist + // dann idempotent), ABER wenn die Adresse beim Provider bereits als + // reine Weiterleitung existierte, kehrt provisionEmailWithMailbox früh + // mit success zurück, ohne je ein Postfach-Passwort zu setzen. Ohne + // diesen expliziten Schritt läge im CRM ein verschlüsseltes Passwort, + // das der Provider gar nicht kennt → IMAP/SMTP-Login schlägt fehl. + // Deshalb: nach jedem Mailbox-Anlegen das generierte Passwort + // garantiert am Provider setzen, damit CRM und Provider übereinstimmen. + const pwResult = await updateMailboxPassword(localPart, password); + if (!pwResult.success) { + throw new Error( + pwResult.error || 'Mailbox angelegt, aber Postfach-Passwort konnte nicht gesetzt werden', + ); + } + // Passwort verschlüsseln und speichern const passwordEncrypted = encrypt(password); diff --git a/docs/todo.md b/docs/todo.md index c8259565..d34b91b0 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -97,6 +97,18 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung ## ✅ Erledigt +- [x] **📧 Stressfrei-Mailbox: Passwort beim Anlegen verbindlich setzen** (2026-07-30) + - Beim Anlegen einer Adresse mit „Echte Mailbox erstellen (IMAP/SMTP)" + wird jetzt immer ein frisch generiertes Passwort **explizit am Provider + gesetzt** (`updateMailboxPassword` direkt nach dem Provisioning). + - Behebt den Fall, dass die Adresse beim Provider bereits als reine + Weiterleitung existierte: dann kehrte `provisionEmailWithMailbox` früh + mit success zurück, ohne je ein Postfach-Passwort zu setzen – im CRM lag + ein verschlüsseltes Passwort, das der Provider nicht kannte → IMAP/SMTP- + Login schlug fehl. Jetzt stimmen CRM und Provider garantiert überein. + - Tab-Leiste bei vielen Tabs: `flex-wrap` statt Overflow aus dem Rahmen. + - Referrals: 4 neue Beziehungen + Bearbeiten-Stift pro Eintrag (s.u.). + - [x] **🤝 Kundenakte: Tab „Geworben / angeworben" (Kundenempfehlungen)** - Neuer Tab vor „Datenschutz", **nur Mitarbeiter/Admin** (nicht Portal), **ohne** Consent-Pflicht nutzbar. Zwei Abschnitte: