diff --git a/app/api/courrier/route.ts b/app/api/courrier/route.ts index 47ae4474..d77d2185 100644 --- a/app/api/courrier/route.ts +++ b/app/api/courrier/route.ts @@ -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({