internal async Task StoreMail(MailModel mail, InternetAddressList to) { if (mail is null) { throw new ArgumentNullException(nameof(mail)); } if (to?.Any() != true) { throw new ArgumentException($"{nameof(mail)}.{nameof(to)} cannot be empty."); } List <MailboxModel> mailboxes = await this.mailRepository.GetMailboxes(to.OfType <MailboxAddress>().Select(x => x.Address).ToList()); foreach (var recipient in to.OfType <MailboxAddress>().Select(x => x.Address)) { var mailbox = mailboxes.SingleOrDefault(x => x.Address == recipient); if (mailbox != null) { var encryptedMail = this.emailCryptoService.EncryptWithNewPassword(mail, mailbox.PublicKey); encryptedMail.MailboxId = mailbox.Id; await this.mailRepository.Insert(encryptedMail); } else { this.logger.LogInformation($"disposing received mail with no corresponding mailbox. From={mail.FromAddress}; To={recipient}"); } this.NotifyMail(mail, recipient); } }
private static string FormatHtmlAddressList(InternetAddressList adressList) { const string emailAddress = @"%{NAME}% <a class=""txt-link-rfc2396E"" href=""%{EMAIL}%""><%{EMAIL}%></a>"; const string namePlaceholder = "%{NAME}%"; const string emailPlaceholder = "%{EMAIL}%"; var addresses = new StringBuilder(); foreach (var address in adressList.OfType <MailboxAddress>()) { var fragment = emailAddress .Replace(namePlaceholder, String.IsNullOrEmpty(address.Name) ? address.Address : address.Name) .Replace(emailPlaceholder, address.Address) ; addresses .Append(fragment) .Append(", ") ; } var list = addresses .Remove(addresses.Length - 2, 2) .ToString() ; return($"<td>{list}</td>"); }