private static string RenderToString(RequestContext context, string view, Models.EmailViewModelBase model)
        {
            if (context == null)
            {
                throw new ArgumentNullException("A request context is required to render an email view to a string.");
            }
            if (string.IsNullOrEmpty(view))
            {
                throw new ArgumentException("A view to render is not specified.");
            }
            if (model == null)
            {
                throw new ArgumentNullException("You have not provided data to build an email.");
            }
            var controller        = (ControllerBase)ControllerBuilder.Current.GetControllerFactory().CreateController(context, "Email");
            var controllerContext = new ControllerContext(context, controller);

            ViewEngines.Engines.Add(new EmailViewEngine());
            var renderedView = ViewEngines.Engines.FindPartialView(controllerContext, view).View;
            var sb           = new StringBuilder();

            using (var sw = new StringWriter(sb))
            {
                using (var tw = new HtmlTextWriter(sw))
                {
                    var viewData = new ViewDataDictionary();
                    var tempData = new TempDataDictionary();
                    viewData.Model = model;
                    renderedView.Render(new ViewContext(controllerContext, renderedView, viewData, tempData, tw), tw);
                }
            }
            return(sb.ToString());
        }
        public static void Send(RequestContext context, string destination,
                                string subject, string view, Models.EmailViewModelBase model)
        {
            if (string.IsNullOrEmpty(SENDER_LOGIN) || string.IsNullOrEmpty(SENDER_PASSWORD) || string.IsNullOrEmpty(SENDER_HOST) || SENDER_PORT == 0)
            {
                throw new ConfigurationErrorsException("Please, provide a sender credentials in Web.config to use mailer (AuthEmail, AuthPassword, AuthHost, AuthPort).");
            }
            if (string.IsNullOrEmpty(destination))
            {
                throw new ArgumentNullException("Please, provide a mail destination.");
            }

            string body = RenderToString(context, view, model);

            MailMessage msg = new MailMessage();

            msg.From = new MailAddress(SENDER_LOGIN);
            msg.To.Add(new MailAddress(destination));
            msg.Subject = subject;
            msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(body, null, MediaTypeNames.Text.Html));

            SmtpClient smtpClient = new SmtpClient(SENDER_HOST, SENDER_PORT);

            System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(SENDER_LOGIN, SENDER_PASSWORD);
            smtpClient.UseDefaultCredentials = false;
            smtpClient.DeliveryMethod        = SmtpDeliveryMethod.Network;
            smtpClient.Credentials           = credentials;
            if (SENDER_PORT == 25)
            {
                smtpClient.EnableSsl = false;
            }
            else
            {
                smtpClient.EnableSsl = true;
            }
            smtpClient.Send(msg);
        }