public static void SendMail(
            string currentMailAddress,
            string html,
            string subject,
            IEnumerable <string> listEmails,
            IEnumerable <string> listEmailsCopy,
            IEnumerable <Attachment> attachments,
            string sid,
            bool throwException)
        {
            SmtpSection mailSettings;

            if (SpecificInstances.DbFactory == null)
            {
                mailSettings = (SmtpSection)WebConfigurationManager.GetSection("system.net/mailSettings/smtp");
            }
            else
            {
                mailSettings =
                    (SmtpSection)
                    ((IWebConfiguration)SpecificInstances.DbFactory).WebConfiguration.GetSection(
                        "system.net/mailSettings/smtp");
            }

            var    mailServer = WebConfigurationManager.AppSettings["MailServer"];
            string emailFrom;

            if (mailSettings != null && !string.IsNullOrEmpty(mailSettings.From))
            {
                emailFrom = mailSettings.From;
            }
            else
            {
                emailFrom = currentMailAddress;
            }

            if (string.IsNullOrEmpty(emailFrom))
            {
                throw new Exception("Not set emailFrom, e-mail can't be sended");
            }

            var mm = new MailMessage
            {
                From    = new MailAddress(emailFrom),
                Subject = subject,
                //SubjectEncoding = Encoding.UTF8,
                Body       = html,
                IsBodyHtml = true,
            };

            foreach (var email in listEmails.Where(r => !string.IsNullOrEmpty(r)))
            {
                mm.To.Add(new MailAddress(email));
            }

            if (listEmailsCopy != null)
            {
                foreach (var email in listEmailsCopy.Where(r => !string.IsNullOrEmpty(r)))
                {
                    mm.CC.Add(new MailAddress(email));
                }
            }

            SmtpClient client;

            if (mailSettings == null || string.IsNullOrEmpty(mailSettings.From))
            {
                client = new SmtpClient(mailServer, 25)
                {
                    Credentials = CredentialCache.DefaultNetworkCredentials,
                }
            }
            ;
            else
            {
                var credentails = new NetworkCredential(
                    mailSettings.Network.UserName,
                    mailSettings.Network.Password,
                    mailSettings.Network.ClientDomain);
                client = new SmtpClient(mailSettings.Network.Host, mailSettings.Network.Port)
                {
                    Credentials           = credentails,
                    UseDefaultCredentials = mailSettings.Network.DefaultCredentials,
                    EnableSsl             = Convert.ToBoolean(WebConfigurationManager.AppSettings["Email_EnableSsl"]),
                };

                client.Credentials = credentails;
            }

            if (attachments != null)
            {
                foreach (var attachment in attachments)
                {
                    mm.Attachments.Add(attachment);
                }
            }

            var monitor = new LogMonitor();

            monitor.Init();
            try
            {
                monitor.Log(
                    LogMessageType.SystemMailSendMailInformation,
                    () =>
                {
                    var toMailsArray = mm.To.Select(
                        r => string.IsNullOrEmpty(r.DisplayName) ? r.Address : r.DisplayName).ToArray();
                    var toMails   = string.Join("; ", toMailsArray);
                    var fromEmail = string.IsNullOrEmpty(mm.From.DisplayName)
                                                ? mm.From.Address
                                                : mm.From.DisplayName;
                    var message = string.Format(
                        "От: {0}; \r\nКому: {1}; \r\nТема: {2}",
                        fromEmail,
                        toMails,
                        mm.Subject);
                    monitor.FieldChanged("EMailBody", "Содержание", "", mm.Body);
                    return(new LogMessageEntry(sid, LogMessageType.SystemMailSendMailInformation, message));
                });
                client.Send(mm);
            }
            catch (Exception e)
            {
                var messageEntry = new LogMessageEntry(sid, LogMessageType.SystemMailSendMailError, e.ToString());
                monitor.Log(messageEntry);
                if (throwException)
                {
                    throw;
                }
            }
        }
 public void Log(ILogMessageEntry logMessageEntry)
 {
     logMessageEntry.Sid = User.GetSID();
     logMonitor.Log(logMessageEntry);
 }