Plesk-Sync: Legacy-Mailgroup-Adressen synchronisierten nicht
Prod-Bug: zusätzliche Weiterleitung eintragen → Toast meldet Erfolg, Plesk übernimmt nichts. Plesk hat zwei unabhängige Verteil-Mechanismen, Mailgroup (alte CLI-Anlagen) und Forwarding (neue). Unser Sync schrieb nur in Forwarding, die alte Adresse lief aber via Mailgroup → set:-Befehle landeten in ungenutzter Tabelle. Stage funktionierte, weil dort frisch im Forwarding- Modus angelegt. - EmailExistsResult um mailgroupActive/Members + forwardingActive/ Targets erweitert. - pleskProvider.emailExists parst alle vier Felder aus --info- stdout (Mailgroup: true|false, Group member(s): ..., Forward request: ...). - pleskProvider.updateForwardTargets setzt -mailgroup false dazu – deaktiviert den Legacy-Mechanismus. - syncForwardingForEmail holt vorm Plesk-Update die bestehenden Mailgroup-Members und Forwarding-Targets ab und importiert sie in unsere additionalForwardingEmails-Liste (canonical-Key-Dedup). Verlustfrei – kein Empfänger fällt beim Umschalten raus. Smoke-Test mit echtem Plesk-stdout (User-Log): 3 Group-Members sauber geparst, leeres "Forward request" als [] erkannt.
This commit is contained in:
@@ -558,7 +558,50 @@ export async function syncForwardingForEmail(
|
||||
|
||||
const localPart = stressfreiEmail.email.split('@')[0];
|
||||
|
||||
// 1) Forwards neu setzen.
|
||||
// 0) Auto-Migration: Plesk hat zwei Verteil-Mechanismen (Mailgroup +
|
||||
// Forwarding). Alt-Anlagen liefen oft via Mailgroup – unser Sync
|
||||
// schreibt aber nur in die Forwarding-Liste, daher landeten neue
|
||||
// Adressen nirgendwo. Hier holen wir die aktuellen Mailgroup-Members
|
||||
// ab und ziehen alle, die wir nicht schon kennen, in unsere
|
||||
// additionalForwardingEmails-Liste rein. Der nachfolgende Plesk-Call
|
||||
// deaktiviert dann die Mailgroup und schreibt die volle Liste als
|
||||
// Forwarding. Verlustfrei – kein Empfänger fällt raus.
|
||||
try {
|
||||
const pleskState = await checkEmailExists(localPart);
|
||||
const existingMembers = [
|
||||
...(pleskState.mailgroupMembers ?? []),
|
||||
...(pleskState.forwardingTargets ?? []),
|
||||
];
|
||||
const newImports: string[] = [];
|
||||
for (const member of existingMembers) {
|
||||
const key = canonicalEmailKey(member);
|
||||
if (!seenKeys.has(key)) {
|
||||
seenKeys.add(key);
|
||||
forwardTargets.push(member);
|
||||
newImports.push(member);
|
||||
}
|
||||
}
|
||||
if (newImports.length > 0) {
|
||||
const mergedAdditional = [
|
||||
...parseAdditionalForwards(stressfreiEmail.additionalForwardingEmails),
|
||||
...newImports,
|
||||
];
|
||||
await prisma.stressfreiEmail.update({
|
||||
where: { id },
|
||||
data: { additionalForwardingEmails: serializeAdditionalForwards(mergedAdditional) },
|
||||
});
|
||||
console.log(
|
||||
`[syncForwardingForEmail] Importiert aus Plesk-Mailgroup für ${stressfreiEmail.email}:`,
|
||||
newImports,
|
||||
);
|
||||
}
|
||||
} catch (importErr) {
|
||||
// Nicht hart fehlschlagen – im schlimmsten Fall fehlen ein paar
|
||||
// alte Empfänger, aber der eigentliche Sync soll trotzdem laufen.
|
||||
console.error('[syncForwardingForEmail] Mailgroup-Import fehlgeschlagen:', importErr);
|
||||
}
|
||||
|
||||
// 1) Forwards neu setzen (deaktiviert intern Mailgroup).
|
||||
const forwardResult = await setEmailForwardTargets(localPart, forwardTargets);
|
||||
if (!forwardResult.success) {
|
||||
// Wenn Plesk meldet „nicht gefunden", liefern wir eine sprechende Meldung
|
||||
|
||||
Reference in New Issue
Block a user