mail page fix

This commit is contained in:
alma 2025-04-21 17:27:04 +02:00
parent dbe55757be
commit 6444f67555

View File

@ -64,28 +64,36 @@ export async function GET(request: Request) {
// Open the requested mailbox
const mailbox = await client.mailboxOpen(folder);
// Fetch messages from the current folder
const messages = await client.fetch(`${start}:${end}`, {
envelope: true,
flags: true,
bodyStructure: true
});
const result = [];
for await (const message of messages) {
result.push({
id: message.uid,
from: message.envelope.from?.[0]?.address || '',
fromName: message.envelope.from?.[0]?.name || message.envelope.from?.[0]?.address?.split('@')[0] || '',
to: message.envelope.to?.map(addr => addr.address).join(', ') || '',
subject: message.envelope.subject || '(No subject)',
date: message.envelope.date?.toISOString() || new Date().toISOString(),
read: message.flags.has('\\Seen'),
starred: message.flags.has('\\Flagged'),
folder: mailbox.path,
hasAttachments: message.bodyStructure?.type === 'multipart',
flags: Array.from(message.flags)
// Only try to fetch if the mailbox has messages
if (mailbox.exists > 0) {
// Adjust start and end to be within bounds
const adjustedStart = Math.min(start, mailbox.exists);
const adjustedEnd = Math.min(end, mailbox.exists);
// Fetch messages from the current folder
const messages = await client.fetch(`${adjustedStart}:${adjustedEnd}`, {
envelope: true,
flags: true,
bodyStructure: true
});
for await (const message of messages) {
result.push({
id: message.uid,
from: message.envelope.from?.[0]?.address || '',
fromName: message.envelope.from?.[0]?.name || message.envelope.from?.[0]?.address?.split('@')[0] || '',
to: message.envelope.to?.map(addr => addr.address).join(', ') || '',
subject: message.envelope.subject || '(No subject)',
date: message.envelope.date?.toISOString() || new Date().toISOString(),
read: message.flags.has('\\Seen'),
starred: message.flags.has('\\Flagged'),
folder: mailbox.path,
hasAttachments: message.bodyStructure?.type === 'multipart',
flags: Array.from(message.flags)
});
}
}
return NextResponse.json({