From 328ba34a5c246ec54cba589012a1be698f67161e Mon Sep 17 00:00:00 2001 From: Rob Wood Date: Wed, 24 Apr 2024 13:25:35 +0100 Subject: [PATCH] Fix: Assume all mailbox addresses domains are absolute when comparing to generate BCC. --- Rnwood.Smtp4dev/ApiModel/Message.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Rnwood.Smtp4dev/ApiModel/Message.cs b/Rnwood.Smtp4dev/ApiModel/Message.cs index cc96d6c2b..00fd244c9 100644 --- a/Rnwood.Smtp4dev/ApiModel/Message.cs +++ b/Rnwood.Smtp4dev/ApiModel/Message.cs @@ -55,7 +55,9 @@ public Message(DbModel.Message dbMessage) foreach (var internetAddress in MimeMessage.To.Where(t => t is MailboxAddress)) { var to = (MailboxAddress)internetAddress; - recipients.Remove(PunyCodeReplacer.DecodePunycode(to.Address)); + var decodedToAddress = PunyCodeReplacer.DecodePunycode(to.Address); + recipients.Remove(decodedToAddress.TrimEnd('.')); + recipients.Remove($"{decodedToAddress}."); } } @@ -66,7 +68,9 @@ public Message(DbModel.Message dbMessage) foreach (var internetAddress in MimeMessage.Cc.Where(t => t is MailboxAddress)) { var cc = (MailboxAddress)internetAddress; - recipients.Remove(PunyCodeReplacer.DecodePunycode(cc.Address)); + var decodedCCAddress = PunyCodeReplacer.DecodePunycode(cc.Address); + recipients.Remove(decodedCCAddress.TrimEnd('.')); + recipients.Remove($"{decodedCCAddress}."); } } @@ -145,7 +149,7 @@ internal static FileStreamResult GetPartContent(Message result, string cid) { var contentEntity = GetPart(result, cid); - if (contentEntity is MimePart mimePart) + if (contentEntity is MimePart mimePart && mimePart.Content != null) { return new FileStreamResult(mimePart.Content.Open(), contentEntity.ContentType?.MimeType ?? "application/text") { @@ -171,7 +175,7 @@ internal static string GetPartContentAsText(Message result, string id) { var contentEntity = GetPart(result, id); - if (contentEntity is MimePart part) + if (contentEntity is MimePart part && part.Content != null) { var encoding = part.ContentType.CharsetEncoding ?? ApiModel.Message.GetSessionEncodingOrAssumed(result); using var reader = new StreamReader(part.Content.Open(), encoding);