Exemplo n.º 1
0
        public EmailContentData GenerateEmailContent(string baseTemplateDirectory)
        {
            string templatePath = string.IsNullOrWhiteSpace(_baseTemplateDirectory) ? baseTemplateDirectory : Path.Combine(_baseTemplateDirectory, baseTemplateDirectory);

            var emailContentData = new EmailContentData();

            emailContentData.Content = File.ReadAllText(templatePath);

            return(emailContentData);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        public EmailContentData GenerateEmailContent(string content)
        {
            if (string.IsNullOrWhiteSpace(content))
            {
                return(new EmailContentData());
            }

            // LR: Prepare the request
            var mjmlRequest = new MjmlRenderRequest
            {
                mjml = content
            };

            // LR: Convert to json payload
            var renderMjmlPayload = JsonConvert.SerializeObject(mjmlRequest);

            var request = new RestRequest("render", Method.POST);

            request.RequestFormat = DataFormat.Json;
            request.AddJsonBody(renderMjmlPayload);

            var restResponse = _client.Execute(request);

            var mjmlRenderResponse = JsonConvert.DeserializeObject <MjmlRenderResponse>(restResponse.Content);

            var retVal = new EmailContentData();
            var errors = new List <string>();

            if (restResponse.IsSuccessful == false)
            {
                errors.Add("MJML Render request failed");

                if (restResponse.ErrorMessage != null)
                {
                    errors.Add(restResponse.ErrorMessage);
                }

                if (restResponse.StatusDescription != null)
                {
                    errors.Add(restResponse.StatusDescription);
                }
            }

            if (mjmlRenderResponse.Errors != null)
            {
                errors.AddRange(mjmlRenderResponse.Errors.Select(s => s.Message));
            }

            retVal.Content = mjmlRenderResponse.Html;
            retVal.Errors  = errors;

            return(retVal);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Executes the <see cref="IEmailContentProvider.GenerateEmailContent" /> then executes <see cref="TryGenerateFluid" /> using
        /// <see cref="CultureInfo.CurrentCulture" /> as the CultureInfo.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="content"></param>
        /// <param name="model"></param>
        /// <param name="registerType">If you have not registered the type, set this flag to true</param>
        /// <param name="result"></param>
        /// <param name="errors">Errors with getting the content or generating the fluid</param>
        /// <returns></returns>
        public bool TryGenerate <T>(string content,
                                    T model,
                                    out string result,
                                    out IList <string> errors,
                                    bool registerType = false) where T : class
        {
            errors = new List <string>();

            EmailContentData contentResult = new EmailContentData();;

            try
            {
                contentResult = _emailContentProvider.GenerateEmailContent(content);
            }
            catch (Exception ex)
            {
                errors.Add(ex.Message);
            }
            finally
            {
                errors.AddRange(contentResult.Errors ?? Enumerable.Empty <string>());
            }

            if (errors.Any())
            {
                result = string.Empty;
                return(false);
            }

            if (TryGenerateFluid(contentResult.Content, model, out var fluidResult, out var fluidErrors, registerType: registerType) == false)
            {
                result = string.Empty;
                errors = fluidErrors;
                return(false);
            }

            result = fluidResult;
            errors = Array.Empty <string>();

            return(true);
        }