fix(mail): incremental scan UID search returned seq-nums not UIDs
Der inkrementelle Scan-Pfad rief imap.search({ uid: 'X:*' }) ohne das
zweite { uid: true }-Argument auf → ImapFlow sendet "SEARCH UID X:*"
statt "UID SEARCH UID X:*" → Server antwortet mit Sequence-Numbers.
Die nachfolgende fetchAll(..., { uid: true }) interpretiert diese als
UIDs → fetcht die falschen (alten) Mails → neu eingegangene Gambling-
Mail (höchste echte UID) wird nie klassifiziert/gelöscht (>15min Lag).
Auch Ursache des "Command Error. 10" Log-Spams (Mega-UID-Liste).
Fix: { uid: true } als zweites search()-Argument.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
1f73bd8d8d
commit
084f821bc5
@ -197,13 +197,18 @@ export default defineEventHandler(async (event) => {
|
||||
let allMessages: any[];
|
||||
|
||||
if (lastUid > 0) {
|
||||
// Inkrementell: nur UIDs > lastUid suchen
|
||||
const newUids = await (imap as any).search({ uid: `${lastUid + 1}:*` });
|
||||
// Inkrementell: nur UIDs > lastUid suchen.
|
||||
// WICHTIG: { uid: true } als zweites Argument ist Pflicht!
|
||||
// Ohne es sendet ImapFlow "SEARCH UID X:*" statt "UID SEARCH UID X:*"
|
||||
// → Server antwortet mit Sequence Numbers statt UIDs.
|
||||
// fetchAll(..., { uid: true }) würde die Seq-Nums als UIDs interpretieren
|
||||
// → fetcht falsche (alte) Mails → neue Mail wird übersehen.
|
||||
const newUids = await (imap as any).search({ uid: `${lastUid + 1}:*` }, { uid: true });
|
||||
if (!newUids || newUids.length === 0) {
|
||||
// Keine neuen Nachrichten → Ordner skippen, kein fetchAll nötig
|
||||
continue;
|
||||
}
|
||||
// Fetch nur die neuen UIDs
|
||||
// Fetch nur die neuen UIDs — newUids enthält jetzt echte UIDs
|
||||
allMessages = await imap.fetchAll(newUids.join(","), { envelope: true }, { uid: true } as any);
|
||||
} else {
|
||||
// Full-Sweep (erster Scan, UIDVALIDITY-Reset, oder Quality-Full-Sweep):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user