我在电子邮件中存储了图表视图。当我发送它作为电子邮件正文。只有html元素呈现。但不是javascript。我真的需要这个来渲染......如果有人知道任何方式。在任何服务器/客户端/ mailProtocol上我可以渲染这个..这里是一些代码示例。查看字符串功能
public static string RenderRazorViewToString(this Controller controller, string viewName, object model)
{
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(controller.ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
这里发送邮件
string result = Renderer.RenderRazorViewToString (this, "Index", null);
using (var message = new MailMessage("[email protected]", "[email protected]"))
{
message.IsBodyHtml = true;
message.Subject = "ChartTest";
message.Body = result ;
message.Priority = MailPriority.High;
using (SmtpClient client = new SmtpClient
{
EnableSsl = true,
Host = "smtp.gmail.com",
Port = 587,
Credentials = new NetworkCredential("[email protected]", "myPassword")
})
{
client.Send(message);
}
}
大多数电子邮件服务,如Gmail,雅虎和大多数电子邮件客户端Thunderbird,Outlook等都不支持Javascript呈现。我认为在电子邮件上支持JS以获取安全措施是不合逻辑的。
要实现目标,您应该预渲染并将内容保存为图像。同样,你有很多选择。
选项1:使用具有“导出图像”功能的图形库,并在电子邮件中包含图像。
选项2:使用无头浏览器技术并截取您的电子邮件内容的屏幕截图。 (Awesome list of headless browsers)
选项3 :(类似于选项1)开发一个端点,该端点获取图形数据(或唯一ID)并返回图像。这样您就不需要实现“屏幕截图”机制了。