From 0cd481ac099064b9a544fd5fb4c6a837298424dc Mon Sep 17 00:00:00 2001 From: alma Date: Mon, 21 Apr 2025 15:56:44 +0200 Subject: [PATCH] mail page rest --- app/mail/page.tsx | 61 ++++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/app/mail/page.tsx b/app/mail/page.tsx index 703f8771..15149676 100644 --- a/app/mail/page.tsx +++ b/app/mail/page.tsx @@ -301,53 +301,50 @@ function decodeMimeContent(content: string): string { function renderEmailContent(email: Email) { try { - // First, parse the full email to get headers and body - const parsed = parseFullEmail(email.body); + // First, parse the email headers + const headers = parseEmailHeaders(email.body); - // If we have HTML content, render it - if (parsed.html) { + // Get the content type and encoding + const contentType = headers.contentType || ''; + const encoding = headers.encoding || '7bit'; + const charset = headers.charset || 'utf-8'; + + // Split the email into headers and body + const [headerPart, ...bodyParts] = email.body.split('\r\n\r\n'); + const body = bodyParts.join('\r\n\r\n'); + + // Decode the content based on encoding + let decodedContent = body; + if (encoding.toLowerCase() === 'quoted-printable') { + decodedContent = decodeQuotedPrintable(body, charset); + } else if (encoding.toLowerCase() === 'base64') { + decodedContent = decodeBase64(body, charset); + } + + // If it's HTML content, clean and render it + if (contentType.includes('text/html')) { + const cleanedHtml = cleanHtml(decodedContent); return (
); } - - // If we have text content, render it - if (parsed.text) { + + // If it's plain text, render it with proper formatting + if (contentType.includes('text/plain')) { return (
- {parsed.text.split('\n').map((line, i) => ( + {decodedContent.split('\n').map((line, i) => (

{line}

))}
); } - // If we have attachments, display them - if (parsed.attachments && parsed.attachments.length > 0) { - return ( -
-

Attachments

-
- {parsed.attachments.map((attachment, index) => ( -
- - - {attachment.filename} - -
- ))} -
-
- ); - } - - // If we couldn't parse the content, try to decode and clean the raw body - const decodedBody = decodeMIME(email.body, 'quoted-printable', 'utf-8'); - const cleanedContent = cleanHtml(decodedBody); - + // If we couldn't determine the content type, try to clean and display the content + const cleanedContent = cleanHtml(decodedContent); return (
{cleanedContent.split('\n').map((line, i) => (