protected virtual MailMessage BuildMessage(EmailDispatch <TKey> emailDispatch)
        {
            MailAddress mailSender   = new MailAddress(_smtpSettings.SenderAddress, _smtpSettings.SenderDisplayName);
            MailAddress mailReceiver = new MailAddress(emailDispatch.ReceiverAddress, emailDispatch.ReceiverDisplayName);
            MailMessage mailMessage  = new MailMessage(mailSender, mailReceiver);

            mailMessage.Subject    = emailDispatch.MessageSubject;
            mailMessage.Body       = emailDispatch.MessageBody;
            mailMessage.IsBodyHtml = emailDispatch.IsBodyHtml;

            if (emailDispatch.CCAddresses != null)
            {
                foreach (string cc in emailDispatch.CCAddresses)
                {
                    mailMessage.CC.Add(cc.Trim());
                }
            }
            if (emailDispatch.BCCAddresses != null)
            {
                foreach (string bcc in emailDispatch.BCCAddresses)
                {
                    mailMessage.Bcc.Add(bcc.Trim());
                }
            }
            if (emailDispatch.ReplyToAddresses != null)
            {
                foreach (ReplyToAddress replyTo in emailDispatch.ReplyToAddresses)
                {
                    mailMessage.ReplyToList.Add(new MailAddress(replyTo.Address, replyTo.DisplayName));
                }
            }

            return(mailMessage);
        }
        //methods
        public virtual async Task <ProcessingResult> Send(SignalDispatch <TKey> item)
        {
            EmailDispatch <TKey> emailDispatch = (EmailDispatch <TKey>)item;

            MailMessage mailMessage = BuildMessage(emailDispatch);

            using (SmtpClient client = BuildSmtpClient())
            {
                await client.SendMailAsync(mailMessage);
            }

            return(ProcessingResult.Success);
        }
        protected virtual EmailDispatch <TKey> AssembleEmail(EventSettings <TKey> settings,
                                                             SignalEvent <TKey> signalEvent, Subscriber <TKey> subscriber, string subject, string body)
        {
            var dispatch = new EmailDispatch <TKey>()
            {
                ReceiverDisplayName = subscriber.Address,
                MessageSubject      = subject,
                MessageBody         = body,
                IsBodyHtml          = IsBodyHtml,
                CCAddresses         = CCAddresses,
                BCCAddresses        = BCCAddresses,
                ReplyToAddresses    = ReplyToAddresses
            };

            SetBaseProperties(dispatch, settings, signalEvent, subscriber);
            return(dispatch);
        }