/// <summary> /// Loads a named email template from database and replaces tokens with passed entities, and returns a new email message object with template values /// </summary> /// <param name="templateName"></param> /// <param name="model"></param> /// <returns></returns> private EmailMessage LoadAndProcessTemplate(string templateName, object model = null) { //first load the template from database var template = _emailTemplateService.FirstOrDefault(x => x.TemplateSystemName == templateName); if (template == null) { return(null); } var content = _emailTemplateService.GetProcessedContentTemplate(template); //render the content //expand the routes first content = Expander.ExpandRoutes(content, model); var processedTemplateString = _viewAccountant.RenderView(templateName, content, model); var subjectString = _viewAccountant.RenderView($"{templateName}:Subject", template.Subject, model); var emailAccount = template.EmailAccount; //create a new email message var emailMessage = new EmailMessage() { IsEmailBodyHtml = true, EmailBody = processedTemplateString, EmailAccount = emailAccount, EmailAccountId = emailAccount?.Id ?? 0, Subject = subjectString, OriginalEmailTemplate = template, SendingDate = DateTime.UtcNow, Tos = new List <EmailMessage.UserInfo>() }; return(emailMessage); }
public async Task RenderAsync(ViewContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } //preserve view path context.TempData.Add("requested_path", _requestedPath); var view = _viewAccountant.RenderView(context); await context.Writer.WriteAsync(view); }
public string ReadTemplateFile(Context context, string templateName) { templateName = templateName.Trim('"'); var viewPath = _viewAccountant.GetThemeViewPath(templateName); if (string.IsNullOrEmpty(viewPath)) { throw new FileSystemException( $"The template '{templateName}' was not found. The following locations were searched:<br/>{string.Join("<br/>", _viewAccountant.GetSearchLocations())}"); } return(_viewAccountant.RenderView(viewPath, templateName, null, context.Scopes[0])); }