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
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
}));
});
});
});
});