From 5430f5188504fad947976d75dd19827edabd7ef6 Mon Sep 17 00:00:00 2001 From: gitadmin Date: Fri, 10 Jul 2026 13:33:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20IMAP=20=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E5=86=85=E5=AE=B9=E8=8E=B7=E5=8F=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用 body: '.' 获取邮件完整内容,替代 source(某些 IMAP 服务器不支持) - 添加详细的 fetch 结果日志,记录返回的字段名 - 改进邮件获取失败时的日志输出 --- src/app/api/monitor/scan-emails/route.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/app/api/monitor/scan-emails/route.ts b/src/app/api/monitor/scan-emails/route.ts index 3a8d51e..1e4ede9 100644 --- a/src/app/api/monitor/scan-emails/route.ts +++ b/src/app/api/monitor/scan-emails/route.ts @@ -208,13 +208,21 @@ async function scanEmails( } try { - const msg = await client.fetchOne(uid, { source: true, uid: true }, { uid: true }) - if (!msg || !('source' in msg) || !(msg as any).source) { - console.log(`[Scan] 邮件 ${uid} 无内容,跳过`) + // 使用 body 获取邮件内容,source 在某些 IMAP 服务器上可能不返回内容 + const msg = await client.fetchOne(uid, { uid: true, bodyStructure: true, body: '.' }, { uid: true }) + if (!msg) { + console.log(`[Scan] 邮件 ${uid} 获取失败,跳过`) continue } - const parsed = await simpleParser((msg as any).source as Buffer) + // 优先使用 source,其次使用 body + const rawSource = (msg as any).source || (msg as any).body + if (!rawSource) { + console.log(`[Scan] 邮件 ${uid} 无内容,跳过 (keys: ${Object.keys(msg).join(',')})`) + continue + } + + const parsed = await simpleParser(rawSource as Buffer) const subject = parsed.subject || '' const date = parsed.date ? formatBeijingTime(parsed.date) : formatBeijingTime() const msgId = parsed.messageId || String(uid)