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[];
|
let allMessages: any[];
|
||||||
|
|
||||||
if (lastUid > 0) {
|
if (lastUid > 0) {
|
||||||
// Inkrementell: nur UIDs > lastUid suchen
|
// Inkrementell: nur UIDs > lastUid suchen.
|
||||||
const newUids = await (imap as any).search({ uid: `${lastUid + 1}:*` });
|
// 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) {
|
if (!newUids || newUids.length === 0) {
|
||||||
// Keine neuen Nachrichten → Ordner skippen, kein fetchAll nötig
|
// Keine neuen Nachrichten → Ordner skippen, kein fetchAll nötig
|
||||||
continue;
|
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);
|
allMessages = await imap.fetchAll(newUids.join(","), { envelope: true }, { uid: true } as any);
|
||||||
} else {
|
} else {
|
||||||
// Full-Sweep (erster Scan, UIDVALIDITY-Reset, oder Quality-Full-Sweep):
|
// Full-Sweep (erster Scan, UIDVALIDITY-Reset, oder Quality-Full-Sweep):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user