/// <summary>
        ///     The construct message list.
        /// </summary>
        /// <param name="mailMessages">
        ///     The mail messages.
        /// </param>
        /// <param name="mailList">
        ///     The mail list.
        /// </param>
        private void ConstructMessageList(IDictionary<MailMessage, Mail> mailMessages, IEnumerable<Mail> mailList)
        {
            // construct mail message list...
            foreach (var mail in mailList.Where(x => x.ID > 0))
            {
                // Build a MailMessage
                if (mail.FromUser.IsNotSet() || mail.ToUser.IsNotSet())
                {
                    this.MailRepository.Delete(mail);
                    continue;
                }

                try
                {
                    MailAddress toEmailAddress = mail.ToUserName.IsSet()
                                                     ? new MailAddress(mail.ToUser, mail.ToUserName)
                                                     : new MailAddress(mail.ToUser);
                    MailAddress fromEmailAddress = mail.FromUserName.IsSet()
                                                       ? new MailAddress(mail.FromUser, mail.FromUserName)
                                                       : new MailAddress(mail.FromUser);

                    var newMessage = new MailMessage();
                    mailMessages.Add(newMessage, mail);
                    newMessage.Populate(fromEmailAddress, toEmailAddress, mail.Subject, mail.Body, mail.BodyHtml);
                }
                catch (FormatException ex)
                {
                    // incorrect email format -- delete this message immediately
                    this.MailRepository.Delete(mail);
#if (DEBUG)
                    this.Logger.Debug("Invalid Email Address: {0}".FormatWith(ex.ToString()), ex.ToString());
#else
                    this.Logger.Log(
                        null,
                        this,
                        "Invalid Email Address: {0}".FormatWith(ex.ToString()),
                        EventLogTypes.Warning);
#endif
                }
            }
        }
        /// <summary>
        /// The construct message list.
        /// </summary>
        /// <param name="mailMessages">
        /// The mail messages.
        /// </param>
        /// <param name="mailList">
        /// The mail list.
        /// </param>
        private void ConstructMessageList(IDictionary<MailMessage, TypedMailList> mailMessages, IEnumerable<TypedMailList> mailList)
        {
            // construct mail message list...
            foreach (var mail in mailList.Where(x => x.MailID.HasValue))
            {
                // Build a MailMessage
                if (mail.FromUser.IsNotSet() || mail.ToUser.IsNotSet())
                {
                    LegacyDb.mail_delete(mail.MailID.Value);
                    continue;
                }

                try
                {
                    MailAddress toEmailAddress = mail.ToUserName.IsSet()
                                                 	? new MailAddress(mail.ToUser, mail.ToUserName)
                                                 	: new MailAddress(mail.ToUser);
                    MailAddress fromEmailAddress = mail.FromUserName.IsSet()
                                                   	? new MailAddress(mail.FromUser, mail.FromUserName)
                                                   	: new MailAddress(mail.FromUser);

                    var newMessage = new MailMessage();
                    mailMessages.Add(newMessage, mail);
                    newMessage.Populate(fromEmailAddress, toEmailAddress, mail.Subject, mail.Body, mail.BodyHtml);
                }
                catch (FormatException ex)
                {
                    // incorrect email format -- delete this message immediately
                    LegacyDb.mail_delete(mail.MailID);

                    this.Logger.Debug("Invalid Email Address: {0}".FormatWith(ex.ToString()));
            #if (DEBUG)
                    this.Logger.Warn("Invalid Email Address: {0}".FormatWith(ex.ToString()), ex.ToString());
            #endif
                }
            }
        }
        /// <summary>
        /// The send.
        /// </summary>
        /// <param name="sendMail">
        /// The send mail.
        /// </param>
        /// <param name="fromAddress">
        /// The from address.
        /// </param>
        /// <param name="toAddress">
        /// The to address.
        /// </param>
        /// <param name="subject">
        /// The subject.
        /// </param>
        /// <param name="bodyText">
        /// The body text.
        /// </param>
        /// <param name="bodyHtml">
        /// The body html.
        /// </param>
        public static void Send(
            [NotNull] this ISendMail sendMail, 
            [NotNull] MailAddress fromAddress, 
            [NotNull] MailAddress toAddress, 
            [CanBeNull] string subject, 
            [CanBeNull] string bodyText, 
            [CanBeNull] string bodyHtml)
        {
            CodeContracts.VerifyNotNull(sendMail, "sendMail");
            CodeContracts.VerifyNotNull(fromAddress, "fromAddress");
            CodeContracts.VerifyNotNull(toAddress, "toAddress");

            var mailMessage = new MailMessage();
            mailMessage.Populate(fromAddress, toAddress, subject, bodyText, bodyHtml);
            sendMail.SendAll(new List<MailMessage> { mailMessage });
        }