App.Core.Services.EmailService.IEmailService C# (CSharp) Method

IEmailService() private method

Send email message with a template
private IEmailService ( SendEmailModel sendEmailModel, string templateName, object data ) : void
sendEmailModel App.Core.Models.SendEmailModel
templateName string Template name. Ex.: "Contact"
data object Data object for the template. Ex.: new { Name = "John" }
return void
        void IEmailService.SendEmail(SendEmailModel sendEmailModel, string templateName, object data)
        {
            if (String.IsNullOrWhiteSpace(templateName))
            {
                throw new ArgumentException(String.Format(Global.CannotBeNullOrEmpy, "templateName"), "templateName");
            }

            var viewData = data as ViewDataDictionary ?? new ViewDataDictionary { Model = data };
            viewData["SendEmailModel"] = sendEmailModel;

            var tempData = new TempDataDictionary();

            if (String.IsNullOrWhiteSpace(sendEmailModel.WebsiteURL))
            {
                throw new ApplicationException("Missing Website URL property.");
            }

            using (var stringWriter = new StringWriter())
            {
                var httpResponse = new HttpResponse(stringWriter);
                var newHttpContext = new HttpContext(new HttpRequest("/", sendEmailModel.WebsiteURL, ""), httpResponse) { User = new GenericPrincipal(new GenericIdentity(""), null) };
                var controllerContext = new ControllerContext();
                controllerContext.HttpContext = new HttpContextWrapper(newHttpContext);
                controllerContext.RequestContext = new RequestContext(new HttpContextWrapper(newHttpContext),
                                                                      new RouteData());
                controllerContext.RouteData.Values.Add("controller", "foo");

                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controllerContext,
                                                                                  String.Format(
                                                                                      "~/Views/EmailTemplates/{0}.cshtml",
                                                                                      templateName));
                ViewContext viewContext = new ViewContext(controllerContext, viewResult.View, viewData, tempData,
                                                          httpResponse.Output);
                viewResult.View.Render(viewContext, httpResponse.Output);
                httpResponse.Flush();

                var message = httpResponse.Output.ToString().Trim();

                (this as IEmailService).SendEmail(sendEmailModel.EmailAddress, sendEmailModel.Subject, message);
            }
        }

Same methods

EmailService::IEmailService ( string emailAddress, string subject, string message ) : void