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); }
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); }
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); }
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); }
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; }
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); }
//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; }
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); }
public string Process(string body) { var pm = new PreMailer.Net.PreMailer(); return pm.MoveCssInline(body, this.RemoveStyleTag); }
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); } }
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); }