From c025203267527417142bfaa21f3bc69ca44fdf97 Mon Sep 17 00:00:00 2001 From: alma Date: Wed, 16 Apr 2025 00:43:35 +0200 Subject: [PATCH] mail page imap connection mime 5 bis rest 16 login page 20 --- app/api/mail/route.ts | 34 +++++++++++++++++++-------- app/mail/page.tsx | 54 +++++++++++++++++++++++-------------------- 2 files changed, 54 insertions(+), 34 deletions(-) diff --git a/app/api/mail/route.ts b/app/api/mail/route.ts index 4099a3b..4de2604 100644 --- a/app/api/mail/route.ts +++ b/app/api/mail/route.ts @@ -91,14 +91,21 @@ function getStoredCredentials(): StoredCredentials | null { export async function GET() { try { + console.log('GET /api/mail called'); const credentials = getStoredCredentials(); if (!credentials) { + console.log('No credentials found in cookies'); return NextResponse.json( { error: 'No stored credentials found' }, { status: 401 } ); } + console.log('Using credentials:', { + ...credentials, + password: '***' + }); + const imapConfig: ImapConfig = { user: credentials.email, password: credentials.password, @@ -110,29 +117,38 @@ export async function GET() { debug: (info: string) => console.log('IMAP Debug:', info) }; - console.log('IMAP Config:', { - ...imapConfig, - password: '***' - }); - + console.log('Connecting to IMAP server...'); const imap = new Imap(imapConfig); const connectPromise = new Promise((resolve, reject) => { - imap.once('ready', () => resolve(true)); - imap.once('error', (err: Error) => reject(err)); + imap.once('ready', () => { + console.log('IMAP connection ready'); + resolve(true); + }); + imap.once('error', (err: Error) => { + console.error('IMAP connection error:', err); + reject(err); + }); imap.connect(); }); await connectPromise; + console.log('Opening INBOX...'); const openBoxPromise = new Promise((resolve, reject) => { imap.openBox('INBOX', false, (err: Error | null, box: ImapBox) => { - if (err) reject(err); - else resolve(box); + if (err) { + console.error('Error opening INBOX:', err); + reject(err); + } else { + console.log('INBOX opened successfully'); + resolve(box); + } }); }); const box = await openBoxPromise; + console.log('Total messages in INBOX:', box.messages.total); const fetchPromise = (imap: Imap, seqno: number): Promise => { return new Promise((resolve, reject) => { diff --git a/app/mail/page.tsx b/app/mail/page.tsx index e51c1a3..a068977 100644 --- a/app/mail/page.tsx +++ b/app/mail/page.tsx @@ -401,33 +401,33 @@ export default function MailPage() { // Check for stored credentials useEffect(() => { - const storedCredentials = localStorage.getItem('imapCredentials'); - if (!storedCredentials) { - router.push('/mail/login'); - } else { - setLoading(false); - } + const checkCredentials = async () => { + try { + console.log('Checking for stored credentials...'); + const response = await fetch('/api/mail'); + if (!response.ok) { + const errorData = await response.json(); + console.log('API response error:', errorData); + if (errorData.error === 'No stored credentials found') { + console.log('No credentials found, redirecting to login...'); + router.push('/mail/login'); + return; + } + throw new Error(errorData.error || 'Failed to check credentials'); + } + console.log('Credentials verified, loading emails...'); + setLoading(false); + loadEmails(); + } catch (err) { + console.error('Error checking credentials:', err); + setError(err instanceof Error ? err.message : 'Failed to check credentials'); + setLoading(false); + } + }; + + checkCredentials(); }, [router]); - // Load emails on mount and when selectedAccount changes - useEffect(() => { - if (!loading) { - loadEmails(); - } - }, [loading, selectedAccount]); - - // Show loading state if credentials are not loaded - if (loading) { - return ( -
-
-
-

Loading...

-
-
- ); - } - // Fetch emails from IMAP API const loadEmails = async () => { try { @@ -441,6 +441,10 @@ export default function MailPage() { if (!response.ok) { const errorData = await response.json(); console.error('API error:', errorData); + if (errorData.error === 'No stored credentials found') { + router.push('/mail/login'); + return; + } throw new Error(errorData.error || 'Failed to load emails'); }