예제 #1
0
        private static string InlineHtml(string html, Uri baseUri)
        {
            var preMailer = new PreMailer.Net.PreMailer(html, baseUri);
            var result    = preMailer.MoveCssInline(true, null, null, true, true);

            return(result.Html);
        }
예제 #2
0
        private static void ParseHtml(string html)
        {
            html = WebUtility.HtmlDecode(html);
            PreMailer.Net.PreMailer pm = new PreMailer.Net.PreMailer(html);
            string inlined             = pm.MoveCssInline(removeStyleElements: true, removeComments: true).Html;

            HtmlDoc = new HtmlDocument();
            HtmlDoc.LoadHtml(inlined);
        }
예제 #3
0
        public static string HtmlInlineCSS(string html)
        {
            html = WebUtility.HtmlDecode(html);
            PreMailer.Net.PreMailer pm = new PreMailer.Net.PreMailer(html);
            string inlined             = pm.MoveCssInline(removeStyleElements: true, removeComments: true).Html;

            HtmlDoc = new HtmlDocument();
            HtmlDoc.LoadHtml(inlined);

            return(HtmlDoc.DocumentNode.OuterHtml);
        }
예제 #4
0
        public string InlineCss(string html)
        {
            var inliner = new PreMailer.Net.PreMailer(html);
            var result  = inliner.MoveCssInline(ignoreElements: "#ignore", removeComments: true);

            if (result.Warnings.Any())
            {
                _dependencies.LogWrapper.SitecoreWarn(
                    $"Email CSS inliner processed with {result.Warnings.Count} warnings.  Warnings log at Debug.");
                result.Warnings.ForEach(warn => _dependencies.LogWrapper.SitecoreDebug($"CSS Inliner Warning: {warn}"));
            }

            return(result.Html);
        }
예제 #5
0
        private string InlineCss(string html)
        {
            Uri baseUri = null;

            try
            {
                // 'Store' is a global model part, so we pretty can be sure it exists
                baseUri = new Uri(Utils.GetBaseUrl);
            }
            catch { }

            var pm = new PreMailer.Net.PreMailer(html, baseUri);
            var result = pm.MoveCssInline(false, "#ignore");
            return result.Html;
        }
예제 #6
0
        private string InlineCss(string html, dynamic model)
        {
            Uri baseUri = null;

            try
            {
                // 'Store' is a global model part, so we pretty can be sure it exists
                baseUri = new Uri((string)model.Store.Url);
            }
            catch { }

            var pm     = new PreMailer.Net.PreMailer(html, baseUri);
            var result = pm.MoveCssInline(true, "#ignore");

            return(result.Html);
        }
예제 #7
0
        //commented out as need to alter method or MOQ request current
        //[TestMethod]
        public void TestEmailTemplate()
        {
            var template = new EmailTemplate() { Body = "Body", Title = "Title" };

            var text = template.TransformText();

            var pm = new PreMailer.Net.PreMailer(text);

            var path = GetEmailFolderPath() + "app.css";

            var css = File.ReadAllText(path);

            var il = pm.MoveCssInline(css: css);

            var res = il.Html;
        }
예제 #8
0
        private async Task <string> GenerateEmailBody(string template, object model)
        {
            var engine = new RazorLightEngineBuilder().UseEmbeddedResourcesProject(options.Assembly).Build();

            dynamic viewBag = options.ViewBag;

            viewBag.Subject = template.ToString();

            string html = await engine.CompileRenderAsync(string.Format(options.TemplatePath, template), model, viewBag);

            if (options.MoveCssInline)
            {
                using var preMailer = new PreMailer.Net.PreMailer(html);
                html = preMailer.MoveCssInline().Html;
            }
            return(html);
        }
예제 #9
0
        //commented out as need to alter method or MOQ request current
        //[TestMethod]
        public void TestEmailTemplate()
        {
            var template = new EmailTemplate()
            {
                Body = "Body", Title = "Title"
            };

            var text = template.TransformText();

            var pm = new PreMailer.Net.PreMailer(text);

            var path = GetEmailFolderPath() + "app.css";

            var css = File.ReadAllText(path);

            var il = pm.MoveCssInline(css: css);

            var res = il.Html;
        }
예제 #10
0
 public string Process(string body)
 {
     var pm = new PreMailer.Net.PreMailer();
     return pm.MoveCssInline(body, this.RemoveStyleTag);
 }
예제 #11
0
        private async Task SendMailMessage <T>(
            ShipHubTemplateBase <T> htmlTemplate,
            ShipHubTemplateBase <T> plainTemplate,
            string subject) where T : MailMessageBase
        {
            var smtpPassword = ShipHubCloudConfiguration.Instance.SmtpPassword;

            if (smtpPassword.IsNullOrWhiteSpace())
            {
                Log.Info("SmtpPassword unset so will not send email.");
                return;
            }

            // MailMessage.Dispose() takes care of views and attchments for us. Yay!

            using (var client = new SmtpClient("smtp.mailgun.org", 587))
                using (var message = new MailMessage()) {
                    client.Credentials = new NetworkCredential("*****@*****.**", smtpPassword);

                    message.From = new MailAddress("*****@*****.**", "Ship");
                    message.To.Add(new MailAddress(htmlTemplate.Model.ToAddress, htmlTemplate.Model.ToName));
                    message.Bcc.Add(new MailAddress("*****@*****.**")); // So we can monitor production billing emails.
                    message.Subject = subject;
                    message.Body    = plainTemplate.TransformText();

                    // Special behavior if NOT live
                    if (ShipHubCloudConfiguration.Instance.ApiHostName != "hub.realartists.com")
                    {
                        message.Bcc.Clear(); // Too noisy.
                        // So we never have to wonder where an odd email came from.
                        message.Subject = $"[{ShipHubCloudConfiguration.Instance.ApiHostName}] {message.Subject}";
                    }

                    if (IncludeHtmlView)
                    {
                        // Let's just use the entire plain text version as the pre-header for now.
                        // We don't need to do anything more clever.  Also, it's important that
                        // pre-header text be sufficiently long so that the <img> tag's alt text and
                        // the href URL don't leak into the pre-header.  The plain text version is long
                        // enough for this.
                        plainTemplate.Clear();
                        plainTemplate.SkipHeaderFooter = true;
                        var preheader = plainTemplate.TransformText().Trim();

                        htmlTemplate.PreHeader = preheader;
                        var html = htmlTemplate.TransformText();

                        // Inline CSS is compatible with more mail clients.
                        using (var premailer = new PreMailer.Net.PreMailer(html)) {
                            html = premailer.MoveCssInline(removeComments: true).Html;
                        }

                        var htmlView       = AlternateView.CreateAlternateViewFromString(html, Encoding.UTF8, MediaTypeNames.Text.Html);
                        var linkedResource = new LinkedResource(Path.Combine(BaseDirectory, "ShipLogo.png"), "image/png")
                        {
                            ContentId = "ShipLogo.png"
                        };
                        htmlView.LinkedResources.Add(linkedResource);
                        message.AlternateViews.Add(htmlView);
                    }

                    if (htmlTemplate.Model is IPdfAttachment attachmentInfo && !string.IsNullOrWhiteSpace(attachmentInfo.AttachmentUrl))
                    {
                        var attachment = await CreatePdfAttachment(attachmentInfo);

                        if (attachment != null) // Best effort only
                        {
                            message.Attachments.Add(attachment);
                        }
                    }

                    await client.SendMailAsync(message);
                }
        }
예제 #12
0
        public void TestGenerate()
        {
            var request = new Mock <HttpRequestBase>();
            var mock    = new Mock <ControllerContext>();

            request.SetupGet(x => x.Headers).Returns(
                new System.Net.WebHeaderCollection {
                { "X-Requested-With", "XMLHttpRequest" }
            });

            var context = new Mock <HttpContextBase>();

            context.SetupGet(x => x.Request).Returns(request.Object);

            mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns("test");
            if ("test" != null)
            {
                mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true);
                mock.SetupGet(p => p.HttpContext.User.Identity.IsAuthenticated).Returns(true);
            }
            //else
            //{
            //    mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(false);
            //}

            var routeData = new RouteData();

            routeData.Values.Add("controller", "MessagesController");
            routeData.Values.Add("action", "GetMessage");
            mock.SetupGet(m => m.RouteData).Returns(routeData);

            var view             = new Mock <IView>();
            var engine           = new Mock <IViewEngine>();
            var viewEngineResult = new ViewEngineResult(view.Object, engine.Object);

            engine.Setup(e => e.FindPartialView(It.IsAny <ControllerContext>(), It.IsAny <string>(), It.IsAny <bool>())).Returns(viewEngineResult);
            ViewEngines.Engines.Clear();
            ViewEngines.Engines.Add(engine.Object);

            MessagesController controller = new MessagesController(new EventService());

            controller.ControllerContext = new ControllerContext(context.Object, routeData, controller);

            var vm = new ChatMessageViewModel()
            {
                From = new Models.Database.User()
                {
                },
                To = new Models.Database.User()
                {
                },
                IsReceived = true,
                Message    = new UserMessage()
                {
                    From = new Models.Database.User()
                    {
                        Name = "FromSender", AppId = "123"
                    }, TimeStamp = DateTime.Now, Content = "This is a test message!"
                },
            };

            var HTMLString = controller.RenderPartialViewToString(viewName: "_PartialChatMessage", model: vm);

            var pm = new PreMailer.Net.PreMailer(HTMLString);
        }