コード例 #1
0
        /// <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);
        }
コード例 #2
0
 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);
 }
コード例 #3
0
        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]));
        }