Exemplo n.º 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);
        }