diff --git a/app/api/emails/route.ts b/app/api/emails/route.ts index d0edb194..634eeb60 100644 --- a/app/api/emails/route.ts +++ b/app/api/emails/route.ts @@ -7,6 +7,7 @@ export async function GET(req: NextRequest) { const session = await getServerSession(authOptions); if (!session?.user?.email) { + console.error('No session or email found'); return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } @@ -22,7 +23,7 @@ export async function GET(req: NextRequest) { // Get the access token from the session const accessToken = session.accessToken; if (!accessToken) { - console.error('Missing access token'); + console.error('Missing access token in session'); return NextResponse.json( { error: 'Authentication token is missing' }, { status: 401 } @@ -31,17 +32,24 @@ export async function GET(req: NextRequest) { // First, try the unified inbox endpoint for unread messages const unifiedResponse = await fetch( - `${nextcloudUrl}/apps/mail/api/messages?filter=is:unread`, + `${nextcloudUrl}/index.php/apps/mail/api/messages?filter=is:unread`, { headers: { 'Authorization': `Bearer ${accessToken}`, - 'Accept': 'application/json' + 'Accept': 'application/json', + 'OCS-APIRequest': 'true', + 'X-Requested-With': 'XMLHttpRequest' } } ); + // Log the response status and headers for debugging + console.log('Unified inbox response status:', unifiedResponse.status); + console.log('Unified inbox response headers:', Object.fromEntries(unifiedResponse.headers.entries())); + if (unifiedResponse.ok) { const unifiedData = await unifiedResponse.json(); + console.log('Unified inbox data:', unifiedData); const messages = unifiedData.data || []; const unreadEmails = messages.map((msg: any) => ({ @@ -63,17 +71,24 @@ export async function GET(req: NextRequest) { // If unified inbox fails, fall back to the account-based approach const accountsResponse = await fetch( - `${nextcloudUrl}/apps/mail/api/accounts`, + `${nextcloudUrl}/index.php/apps/mail/api/accounts`, { headers: { 'Authorization': `Bearer ${accessToken}`, - 'Accept': 'application/json' + 'Accept': 'application/json', + 'OCS-APIRequest': 'true', + 'X-Requested-With': 'XMLHttpRequest' } } ); + // Log the response status and headers for debugging + console.log('Accounts response status:', accountsResponse.status); + console.log('Accounts response headers:', Object.fromEntries(accountsResponse.headers.entries())); + if (!accountsResponse.ok) { - console.error('Failed to fetch mail accounts:', await accountsResponse.text()); + const errorText = await accountsResponse.text(); + console.error('Failed to fetch mail accounts. Response:', errorText); return NextResponse.json( { error: "L'application Mail n'est pas disponible sur Nextcloud. Veuillez contacter votre administrateur.", @@ -84,22 +99,28 @@ export async function GET(req: NextRequest) { } const accountsData = await accountsResponse.json(); + console.log('Accounts data:', accountsData); const accounts = accountsData.data || []; const unreadEmails = []; for (const account of accounts) { // Get mailboxes for the account const mailboxesResponse = await fetch( - `${nextcloudUrl}/apps/mail/api/accounts/${account.id}/mailboxes`, + `${nextcloudUrl}/index.php/apps/mail/api/accounts/${account.id}/mailboxes`, { headers: { 'Authorization': `Bearer ${accessToken}`, - 'Accept': 'application/json' + 'Accept': 'application/json', + 'OCS-APIRequest': 'true', + 'X-Requested-With': 'XMLHttpRequest' } } ); - if (!mailboxesResponse.ok) continue; + if (!mailboxesResponse.ok) { + console.error(`Failed to fetch mailboxes for account ${account.id}`); + continue; + } const mailboxesData = await mailboxesResponse.json(); const mailboxes = mailboxesData.data || []; @@ -107,16 +128,21 @@ export async function GET(req: NextRequest) { // Get unread messages from each mailbox for (const mailbox of mailboxes) { const messagesResponse = await fetch( - `${nextcloudUrl}/apps/mail/api/accounts/${account.id}/mailboxes/${mailbox.id}/messages?filter=is:unread`, + `${nextcloudUrl}/index.php/apps/mail/api/accounts/${account.id}/mailboxes/${mailbox.id}/messages?filter=is:unread`, { headers: { 'Authorization': `Bearer ${accessToken}`, - 'Accept': 'application/json' + 'Accept': 'application/json', + 'OCS-APIRequest': 'true', + 'X-Requested-With': 'XMLHttpRequest' } } ); - if (!messagesResponse.ok) continue; + if (!messagesResponse.ok) { + console.error(`Failed to fetch messages for mailbox ${mailbox.id}`); + continue; + } const messagesData = await messagesResponse.json(); const messages = messagesData.data || [];