From 12317a0ff619d63981b41f3a0c861262e58c079e Mon Sep 17 00:00:00 2001 From: alma Date: Wed, 16 Apr 2025 17:24:49 +0200 Subject: [PATCH] Neah version mail stable 1 --- app/api/mail/route.ts | 64 ++++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/app/api/mail/route.ts b/app/api/mail/route.ts index 85ae0cf..34dcd2f 100644 --- a/app/api/mail/route.ts +++ b/app/api/mail/route.ts @@ -180,14 +180,16 @@ export async function GET(request: Request) { } // Fetch messages in the calculated range - imap.searchAsync(['ALL'], { - bodies: ['HEADER', 'TEXT'], - struct: true, - byUid: true, - start, - end - }).then((messages) => { - if (!messages || messages.length === 0) { + imap.search(['ALL'], (err, results) => { + if (err) { + console.error(`Error searching in ${folder}:`, err); + clearTimeout(timeout); + imap.end(); + resolve(NextResponse.json({ emails: [], error: `Failed to search in ${folder}` })); + return; + } + + if (!results || results.length === 0) { clearTimeout(timeout); imap.end(); resolve(NextResponse.json({ @@ -198,8 +200,16 @@ export async function GET(request: Request) { return; } - // Process messages - const emails = messages.map((msg) => { + // Take only the most recent emails up to the limit + const recentResults = results.slice(-limit); + const emails: any[] = []; + + const fetch = imap.fetch(recentResults, { + bodies: ['HEADER', 'TEXT'], + struct: true + }); + + fetch.on('message', (msg) => { let header = ''; let text = ''; let messageId: number | null = null; @@ -241,25 +251,29 @@ export async function GET(request: Request) { folder: folder, flags: messageFlags }; - return email; + emails.push(email); }); }); - // Sort emails by date (most recent first) - emails.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); + fetch.on('error', (err) => { + console.error(`Error fetching emails from ${folder}:`, err); + clearTimeout(timeout); + imap.end(); + resolve(NextResponse.json({ emails: [], error: `Failed to fetch emails from ${folder}` })); + }); - clearTimeout(timeout); - imap.end(); - resolve(NextResponse.json({ - emails, - folders: availableMailboxes, - mailUrl: process.env.NEXT_PUBLIC_IFRAME_MAIL_URL - })); - }).catch((err) => { - console.error(`Error fetching emails from ${folder}:`, err); - clearTimeout(timeout); - imap.end(); - resolve(NextResponse.json({ emails: [], error: `Failed to fetch emails from ${folder}` })); + fetch.on('end', () => { + // Sort emails by date (most recent first) + emails.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); + + clearTimeout(timeout); + imap.end(); + resolve(NextResponse.json({ + emails, + folders: availableMailboxes, + mailUrl: process.env.NEXT_PUBLIC_IFRAME_MAIL_URL + })); + }); }); }); });