diff --git a/app/api/mail/route.ts b/app/api/mail/route.ts index d366ada..d367384 100644 --- a/app/api/mail/route.ts +++ b/app/api/mail/route.ts @@ -12,11 +12,16 @@ console.log('IMAP Configuration:', { const imapConfig: Imap.Config = { user: process.env.IMAP_USER as string, - password: encodeURIComponent(process.env.IMAP_PASSWORD as string), + password: process.env.IMAP_PASSWORD as string, host: process.env.IMAP_HOST || 'mail.infomaniak.com', port: parseInt(process.env.IMAP_PORT || '993', 10), tls: true, - tlsOptions: { rejectUnauthorized: false } + tlsOptions: { + rejectUnauthorized: false, + servername: process.env.IMAP_HOST || 'mail.infomaniak.com' + }, + authTimeout: 10000, + connTimeout: 10000 }; // Validate IMAP configuration @@ -47,9 +52,27 @@ function createImapConnection() { return new Promise((resolve, reject) => { const imap = new Imap(imapConfig); - imap.once('ready', () => resolve(imap)); - imap.once('error', (err: Error) => reject(err)); - imap.connect(); + imap.once('ready', () => { + console.log('IMAP connection established successfully'); + resolve(imap); + }); + + imap.once('error', (err: Error) => { + console.error('IMAP connection error:', err); + reject(err); + }); + + imap.once('end', () => { + console.log('IMAP connection ended'); + }); + + try { + console.log('Attempting to connect to IMAP server...'); + imap.connect(); + } catch (err) { + console.error('Error during IMAP connection:', err); + reject(err); + } }); } @@ -122,9 +145,25 @@ function fetchMessages(imap: Imap, box: string): Promise { export async function GET(request: Request) { try { + console.log('Starting email fetch process...'); + + // Validate IMAP configuration + if (!imapConfig.user || !imapConfig.password) { + console.error('IMAP configuration error:', { + user: imapConfig.user, + hasPassword: !!imapConfig.password + }); + throw new Error('IMAP credentials are not properly configured. Please check your .env file.'); + } + + console.log('Creating IMAP connection...'); const imap = await createImapConnection() as Imap; + + console.log('Fetching messages...'); const messages = await fetchMessages(imap, 'INBOX'); + console.log(`Successfully fetched ${messages.length} messages`); + // Process messages into the format expected by the frontend const processedMessages = messages.map((msg: ImapMessage, index: number) => ({ id: index + 1, @@ -144,8 +183,11 @@ export async function GET(request: Request) { return NextResponse.json({ messages: processedMessages }); } catch (error) { - console.error('Error fetching emails:', error); - return NextResponse.json({ error: 'Failed to fetch emails' }, { status: 500 }); + console.error('Error in GET handler:', error); + return NextResponse.json({ + error: 'Failed to fetch emails', + details: error instanceof Error ? error.message : 'Unknown error' + }, { status: 500 }); } }