diff --git a/Wino.Core/Services/MailService.cs b/Wino.Core/Services/MailService.cs index 8c1a8305..0d331703 100644 --- a/Wino.Core/Services/MailService.cs +++ b/Wino.Core/Services/MailService.cs @@ -670,16 +670,13 @@ namespace Wino.Core.Services } message.Headers.Add("Thread-Topic", referenceMessage.Subject); - } - var previewer = new HtmlTextPreviewer(); + builder.HtmlBody = CreateHtmlForReferencingMessage(referenceMessage); + } if (reason == DraftCreationReason.Forward) { - var visitor = _mimeFileService.CreateHTMLPreviewVisitor(referenceMessage, string.Empty); - visitor.Visit(referenceMessage); - - builder.HtmlBody = visitor.HtmlBody; + builder.HtmlBody = CreateHtmlForReferencingMessage(referenceMessage); } // Append signatures if needed. @@ -695,11 +692,11 @@ namespace Wino.Core.Services if (string.IsNullOrWhiteSpace(builder.HtmlBody)) { - builder.HtmlBody = @$"

{signature.HtmlBody}"; + builder.HtmlBody = $"


{signature.HtmlBody}"; } else { - builder.HtmlBody += @$"{signature.HtmlBody}"; + builder.HtmlBody = $"


{signature.HtmlBody}" + builder.HtmlBody; } } } @@ -772,6 +769,37 @@ namespace Wino.Core.Services } return message; + + // Generates html representation of To/Cc/From/Time and so on from referenced message. + string CreateHtmlForReferencingMessage(MimeMessage referenceMessage) + { + var htmlMimeInfo = string.Empty; + // Separation Line + htmlMimeInfo += "


"; + + var visitor = _mimeFileService.CreateHTMLPreviewVisitor(referenceMessage, string.Empty); + visitor.Visit(referenceMessage); + + htmlMimeInfo += $""" +
+ + From: {ParticipantsToHtml(referenceMessage.From)}
+ Sent: {referenceMessage.Date.ToLocalTime()}
+ {(referenceMessage.Cc.Count > 0 ? $"Cc: {ParticipantsToHtml(referenceMessage.Cc)}
" : string.Empty)} + To: {ParticipantsToHtml(referenceMessage.To)}
+ Subject: {referenceMessage.Subject} +
+
 
+ {visitor.HtmlBody} +
+ """; + + return htmlMimeInfo; + } + + static string ParticipantsToHtml(InternetAddressList internetAddresses) => + string.Join("; ", internetAddresses.Mailboxes + .Select(x => $"{x.Name ?? Translator.UnknownSender} <{x.Address ?? Translator.UnknownAddress}>")); } public async Task MapLocalDraftAsync(Guid accountId, Guid localDraftCopyUniqueId, string newMailCopyId, string newDraftId, string newThreadId)