diff --git a/app/api/courrier/route.ts b/app/api/courrier/route.ts
index e5ab7b8b..d77d2185 100644
--- a/app/api/courrier/route.ts
+++ b/app/api/courrier/route.ts
@@ -72,23 +72,14 @@ export async function GET(request: Request) {
const adjustedStart = Math.min(start, mailbox.exists);
const adjustedEnd = Math.min(end, mailbox.exists);
- // Fetch messages from the current folder with content
+ // Fetch messages from the current folder
const messages = await client.fetch(`${adjustedStart}:${adjustedEnd}`, {
envelope: true,
flags: true,
- bodyStructure: true,
- source: true, // Get the full email source
- bodyParts: ['text/plain', 'text/html'] // Get both text and HTML content
+ bodyStructure: true
});
for await (const message of messages) {
- // Get the email content
- let content = '';
- if (message.bodyParts) {
- // Prefer HTML content if available
- content = message.bodyParts.get('text/html')?.toString() || message.bodyParts.get('text/plain')?.toString() || '';
- }
-
result.push({
id: message.uid,
from: message.envelope.from?.[0]?.address || '',
@@ -100,14 +91,9 @@ export async function GET(request: Request) {
starred: message.flags.has('\\Flagged'),
folder: mailbox.path,
hasAttachments: message.bodyStructure?.type === 'multipart',
- flags: Array.from(message.flags),
- content: content,
- source: message.source?.toString() || '' // Include full email source for parsing
+ flags: Array.from(message.flags)
});
}
-
- // Sort results by date, most recent first
- result.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
}
return NextResponse.json({
diff --git a/app/courrier/page.tsx b/app/courrier/page.tsx
index 93035c19..36152f31 100644
--- a/app/courrier/page.tsx
+++ b/app/courrier/page.tsx
@@ -500,32 +500,22 @@ export default function CourrierPage() {
try {
console.log('Checking for stored credentials...');
const response = await fetch('/api/courrier');
- const data = await response.json();
-
if (!response.ok) {
- console.log('API response error:', data);
- if (data.error === 'No mail credentials found. Please configure your email account.') {
+ 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('/courrier/login');
return;
}
- if (data.error === 'Unauthorized') {
- console.log('User not authenticated, redirecting to auth...');
- router.push('/api/auth/signin');
- return;
- }
- setError(data.error || 'Failed to check credentials');
- setLoading(false);
- return;
+ throw new Error(errorData.error || 'Failed to check credentials');
}
-
- // If we get here, credentials are valid and we have emails
console.log('Credentials verified, loading emails...');
setLoading(false);
loadEmails();
} catch (err) {
console.error('Error checking credentials:', err);
- setError('Failed to connect to mail server. Please try again later.');
+ setError(err instanceof Error ? err.message : 'Failed to check credentials');
setLoading(false);
}
};
@@ -808,14 +798,7 @@ export default function CourrierPage() {
// Sort emails by date (most recent first)
const sortedEmails = useMemo(() => {
return [...emails].sort((a, b) => {
- const dateA = new Date(a.date);
- const dateB = new Date(b.date);
- // First sort by date
- const dateDiff = dateB.getTime() - dateA.getTime();
- if (dateDiff !== 0) return dateDiff;
-
- // If dates are equal, maintain stable order using email ID
- return Number(b.id) - Number(a.id);
+ return new Date(b.date).getTime() - new Date(a.date).getTime();
});
}, [emails]);
@@ -836,7 +819,7 @@ export default function CourrierPage() {
email.subject.toLowerCase().includes(query) ||
email.from.toLowerCase().includes(query) ||
email.to.toLowerCase().includes(query) ||
- (email.content || '').toLowerCase().includes(query)
+ email.content.toLowerCase().includes(query)
);
}, [sortedEmails, searchQuery]);
@@ -1038,7 +1021,33 @@ export default function CourrierPage() {
{/* Scrollable content area */}
+ {selectedEmail.fromName} <{selectedEmail.from}>
+
+ to {selectedEmail.to}
+
+ cc {selectedEmail.cc}
+
- {email.fromName || email.from} <{email.from}> -
-- to {email.to} -
- {email.cc && ( -- cc {email.cc} -
- )} -