From 7963852af61faf062b45b2a8a3b758f7bef26982 Mon Sep 17 00:00:00 2001 From: alma Date: Mon, 28 Apr 2025 21:10:05 +0200 Subject: [PATCH] courrier multi account restore compose --- lib/utils/email-content.ts | 29 ++++++++++++++++++----------- lib/utils/email-formatter.ts | 16 +++++++++++++++- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/lib/utils/email-content.ts b/lib/utils/email-content.ts index 4a9de2c0..829a2515 100644 --- a/lib/utils/email-content.ts +++ b/lib/utils/email-content.ts @@ -17,24 +17,31 @@ export function formatEmailContent(email: any): string { // Get the content in order of preference let content = ''; - if (email.formattedContent) { - console.log('formatEmailContent: Using formattedContent'); - content = email.formattedContent; + if (email.content && typeof email.content === 'object') { + console.log('formatEmailContent: Using object content:', email.content); + content = email.content.html || email.content.text || ''; } else if (typeof email.content === 'string') { console.log('formatEmailContent: Using direct string content'); content = email.content; - } else if (email.content && typeof email.content === 'object') { - console.log('formatEmailContent: Using object content:', email.content); - content = email.content.html || email.content.text || ''; - } else { - console.log('formatEmailContent: Using fallback content'); - content = email.html || email.text || ''; + } else if (email.html) { + console.log('formatEmailContent: Using html content'); + content = email.html; + } else if (email.text) { + console.log('formatEmailContent: Using text content'); + content = email.text; + } else if (email.formattedContent) { + console.log('formatEmailContent: Using formattedContent'); + content = email.formattedContent; } console.log('formatEmailContent: Content before sanitization:', content); - // Sanitize the content for display - const sanitizedContent = DOMPurify.sanitize(content); + // Sanitize the content for display while preserving formatting + const sanitizedContent = DOMPurify.sanitize(content, { + ADD_TAGS: ['style'], + ADD_ATTR: ['class', 'style', 'dir'], + ALLOW_DATA_ATTR: false + }); console.log('formatEmailContent: Final sanitized content:', sanitizedContent); diff --git a/lib/utils/email-formatter.ts b/lib/utils/email-formatter.ts index e5718b4c..29180535 100644 --- a/lib/utils/email-formatter.ts +++ b/lib/utils/email-formatter.ts @@ -94,6 +94,11 @@ export interface EmailMessage { contentFetched?: boolean; } +interface EmailContent { + html?: string; + text?: string; +} + /** * Format email addresses for display */ @@ -258,7 +263,16 @@ export function formatReplyEmail(email: EmailMessage, type: 'reply' | 'reply-all const quoteHeader = `
On ${formattedDate}, ${fromText} wrote:
`; // Get and sanitize original content (sanitization preserves content direction) - const originalContent = email.html || email.content || email.text || ''; + let originalContent = ''; + if (email.content && typeof email.content === 'object') { + const contentObj = email.content as EmailContent; + originalContent = contentObj.html || contentObj.text || ''; + } else if (typeof email.content === 'string') { + originalContent = email.content; + } else { + originalContent = email.html || email.text || ''; + } + const quotedContent = sanitizeHtml(originalContent); // Format recipients