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) <noreply@anthropic.com>
This commit is contained in:
2026-07-30 11:13:08 +02:00
co-authored by Claude Opus 4.8
parent c0bd8a9f5c
commit c39d252f5f
2 changed files with 30 additions and 1 deletions
@@ -189,7 +189,8 @@ export async function createEmail(data: CreateEmailData) {
const localPart = data.email.split('@')[0]; const localPart = data.email.split('@')[0];
if (createMailbox) { if (createMailbox) {
// Mit echter Mailbox anlegen // Mit echter Mailbox anlegen. Immer ein frisches, sicheres Passwort
// erzeugen.
const password = generateSecurePassword(); const password = generateSecurePassword();
const result = await provisionEmailWithMailbox(localPart, customer.email, password); 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'); 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 // Passwort verschlüsseln und speichern
const passwordEncrypted = encrypt(password); const passwordEncrypted = encrypt(password);
+12
View File
@@ -97,6 +97,18 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt ## ✅ 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)** - [x] **🤝 Kundenakte: Tab „Geworben / angeworben" (Kundenempfehlungen)**
- Neuer Tab vor „Datenschutz", **nur Mitarbeiter/Admin** (nicht Portal), - Neuer Tab vor „Datenschutz", **nur Mitarbeiter/Admin** (nicht Portal),
**ohne** Consent-Pflicht nutzbar. Zwei Abschnitte: **ohne** Consent-Pflicht nutzbar. Zwei Abschnitte: