Mailbox-Fix R130: enableMailboxForExisting statt updateMailboxPassword

Pentester R130: der erste Fix (c39d252) setzte bei Plesk nur -passwd,
liess die Adresse aber auf -mailbox false stehen -> Mailbox wurde nie
aktiviert, IMAP/SMTP-Login scheiterte trotz korrektem Passwort.

Jetzt enableMailboxForExistingEmail (-mailbox true -passwd ...), das
sowohl den existierte-als-Forward-Fall als auch den Neu-Anlage-Fall
idempotent abdeckt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-30 11:29:34 +02:00
co-authored by Claude Opus 4.8
parent f0480ab432
commit 1018412afb
2 changed files with 20 additions and 10 deletions
+15 -10
View File
@@ -198,16 +198,21 @@ 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 // Mailbox verbindlich aktivieren UND Passwort setzen. Beim Neu-Anlegen
// createEmailWithMailbox es zwar schon gesetzt (der folgende Call ist // hat createEmailWithMailbox das schon getan (der folgende Call ist dann
// dann idempotent), ABER wenn die Adresse beim Provider bereits als // idempotent), ABER wenn die Adresse beim Provider bereits als reine
// reine Weiterleitung existierte, kehrt provisionEmailWithMailbox früh // Weiterleitung existierte, kehrt provisionEmailWithMailbox früh mit
// mit success zurück, ohne je ein Postfach-Passwort zu setzen. Ohne // success zurück, ohne je die Mailbox zu aktivieren. Ohne diesen Schritt
// diesen expliziten Schritt läge im CRM ein verschlüsseltes Passwort, // läge im CRM ein verschlüsseltes Passwort, das der Provider gar nicht
// das der Provider gar nicht kennt → IMAP/SMTP-Login schlägt fehl. // kennt → IMAP/SMTP-Login schlägt fehl.
// Deshalb: nach jedem Mailbox-Anlegen das generierte Passwort //
// garantiert am Provider setzen, damit CRM und Provider übereinstimmen. // WICHTIG (Pentest R130): hier MUSS enableMailboxForExistingEmail
const pwResult = await updateMailboxPassword(localPart, password); // verwendet werden, nicht updateMailboxPassword. Letzteres setzt bei
// Plesk nur `-passwd`, lässt die Adresse aber auf `-mailbox false`
// stehen die Mailbox wird also nie aktiviert und der Login scheitert
// trotz korrektem Passwort. enableMailboxForExisting setzt
// `-mailbox true -passwd ...` und deckt beide Fälle idempotent ab.
const pwResult = await enableMailboxForExistingEmail(localPart, password);
if (!pwResult.success) { if (!pwResult.success) {
throw new Error( throw new Error(
pwResult.error || 'Mailbox angelegt, aber Postfach-Passwort konnte nicht gesetzt werden', pwResult.error || 'Mailbox angelegt, aber Postfach-Passwort konnte nicht gesetzt werden',
+5
View File
@@ -113,6 +113,11 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
mit success zurück, ohne je ein Postfach-Passwort zu setzen im CRM lag 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- ein verschlüsseltes Passwort, das der Provider nicht kannte → IMAP/SMTP-
Login schlug fehl. Jetzt stimmen CRM und Provider garantiert überein. Login schlug fehl. Jetzt stimmen CRM und Provider garantiert überein.
- **Nachtrag Pentest R130:** Erster Versuch (`updateMailboxPassword`)
setzte bei Plesk nur `-passwd`, ließ die Adresse aber auf
`-mailbox false` → Mailbox nie aktiviert, Login scheiterte weiter.
Jetzt `enableMailboxForExistingEmail` (`-mailbox true -passwd ...`),
deckt beide Fälle idempotent ab.
- Tab-Leiste bei vielen Tabs: `flex-wrap` statt Overflow aus dem Rahmen. - Tab-Leiste bei vielen Tabs: `flex-wrap` statt Overflow aus dem Rahmen.
- Referrals: 4 neue Beziehungen + Bearbeiten-Stift pro Eintrag (s.u.). - Referrals: 4 neue Beziehungen + Bearbeiten-Stift pro Eintrag (s.u.).