Neah version mail stable 1

This commit is contained in:
alma 2025-04-16 17:24:49 +02:00
parent 5fd06cad00
commit 12317a0ff6

View File

@ -180,14 +180,16 @@ export async function GET(request: Request) {
} }
// Fetch messages in the calculated range // Fetch messages in the calculated range
imap.searchAsync(['ALL'], { imap.search(['ALL'], (err, results) => {
bodies: ['HEADER', 'TEXT'], if (err) {
struct: true, console.error(`Error searching in ${folder}:`, err);
byUid: true, clearTimeout(timeout);
start, imap.end();
end resolve(NextResponse.json({ emails: [], error: `Failed to search in ${folder}` }));
}).then((messages) => { return;
if (!messages || messages.length === 0) { }
if (!results || results.length === 0) {
clearTimeout(timeout); clearTimeout(timeout);
imap.end(); imap.end();
resolve(NextResponse.json({ resolve(NextResponse.json({
@ -198,8 +200,16 @@ export async function GET(request: Request) {
return; return;
} }
// Process messages // Take only the most recent emails up to the limit
const emails = messages.map((msg) => { 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 header = '';
let text = ''; let text = '';
let messageId: number | null = null; let messageId: number | null = null;
@ -241,25 +251,29 @@ export async function GET(request: Request) {
folder: folder, folder: folder,
flags: messageFlags flags: messageFlags
}; };
return email; emails.push(email);
}); });
}); });
// Sort emails by date (most recent first) fetch.on('error', (err) => {
emails.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); 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); fetch.on('end', () => {
imap.end(); // Sort emails by date (most recent first)
resolve(NextResponse.json({ emails.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
emails,
folders: availableMailboxes, clearTimeout(timeout);
mailUrl: process.env.NEXT_PUBLIC_IFRAME_MAIL_URL imap.end();
})); resolve(NextResponse.json({
}).catch((err) => { emails,
console.error(`Error fetching emails from ${folder}:`, err); folders: availableMailboxes,
clearTimeout(timeout); mailUrl: process.env.NEXT_PUBLIC_IFRAME_MAIL_URL
imap.end(); }));
resolve(NextResponse.json({ emails: [], error: `Failed to fetch emails from ${folder}` })); });
}); });
}); });
}); });