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);
}
}