コード例 #1
0
        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);
            }
        }
コード例 #2
0
        private static string FormatHtmlAddressList(InternetAddressList adressList)
        {
            const string emailAddress     = @"%{NAME}% <a class=""txt-link-rfc2396E"" href=""%{EMAIL}%"">&lt;%{EMAIL}%&gt;</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>");
        }