【问题标题】:How to save the html generated by javascript code so it can be sent by email?如何保存由javascript代码生成的html以便可以通过电子邮件发送?
【发布时间】:2015-10-01 23:39:09
【问题描述】:

我想将我编写的 C# API 转换为使用 angularjs 生成(静态)html 页面(主要用于呈现数据表)。目标是更好地分离数据和 html,允许交互性(例如,按列排序)/重复使用数据,这超出了静态 html 页面所能提供的范围。

现在的问题是,一旦我使用 JS 生成页面的一部分,我就不能再通过电子邮件按原样发送 html 文档,因为 JS 不会从电子邮件客户端执行。然而,这是我的 API 的一个有用功能。

有办法解决吗?

我想我曾经听说过一个虚拟浏览器(在节点中?),它可以执行所有的 javascript(没有 GUI),然后将 html 转储到一个文件中。

否则,我能想到的唯一解决方案是让 C# 生成表格,硬编码 html 中的值(目前就是这种情况),并且让 angularjs 仍然执行所有 json 后处理以允许用户与数据交互。令人讨厌的是,它需要在 C# 和 JS 中复制一些表构造逻辑,这不是很好。

【问题讨论】:

  • 您可以通过使用 dot 液体或 Razor 直接执行此操作。看看这个,可能会有所帮助:dotliquidmarkup.org/try-online
  • 我认为 dotliquid 不如 angular 强大。我追求的不仅仅是模板,例如 json 查询。
  • Dot Liquid 是模板渲染引擎,而 Angular 是 MVVC 框架 :-)

标签: javascript c# html angularjs html-email


【解决方案1】:

是否需要考虑使用邮件 API?在这种情况下,您可以只获取内容并使用 angular 将其发送到 e。 G。发送网格。

【讨论】:

  • 谢谢,但问题不在于我已经拥有的邮件 API。就是获取javascript生成的html。
  • 您可以使用 Angular 的元素 API (docs.angularjs.org/api/ng/function/angular.element) 来检索 html 内容。不过,这不包括任何样式。
  • 是的,但是如何在浏览器之外使用这个 API?
  • 哦,也许我误解了这个问题。因此,您需要能够在看不到页面的情况下生成它(如预定报告)?在这种情况下,您可能应该将代码生成移至单独的 Javascript 类,以便您可以在服务器端和前端的节点中使用它。
  • 是的,没错。好吧,我认为 node 是要走的路,但似乎这比我希望的具有更广泛的影响。也就是说,如果我可以安装一个 node.js 实用程序来满足我的需求,那很好,但我不想开始安装节点服务器并不得不维护它。
【解决方案2】:

如果你想发送电子邮件,那么在 Angular 中实现一个service,它会调用一些服务器端函数来发送电子邮件。数据应该作为某种视图模型传递。在 ASP.NET 中,此服务器端函数通常通过 Web API 或通用处理程序 (.ashx) 公开。

如果您希望用户能够直接从页面下载文件,请查看How to trigger a file download when clicking an html button or javascript

应该注意的是,直接使用用于网页的 HTML 通常不是一个好主意,将其包含在电子邮件中。电子邮件客户端中的 HTML 解析器差异很大,您应该只使用一小部分 HTML 功能来确保兼容性。用于浏览器的 HTML 通常还包含不适合电子邮件的额外内容(例如导航菜单)。

【讨论】:

  • 我实际上并没有使用 ASP 网络服务器来生成我的页面。主要原因是页面是在桌面应用程序中按需生成的,这太复杂而无法迁移到网络服务器(尤其是因为它需要一些您不希望网络服务器提供的计算能力)。在我使用 angularjs 的原型中,我正在生成静态 html 页面 + 一些 js/json 文件,然后可以通过一些网络服务器访问这些文件进行渲染。
  • @joelhoro 好的。但是您仍然需要一个服务器来处理邮件。它可以托管在 ASP.NET 或 WCF 中,甚至可以只是一个自定义控制台应用程序。或者您可以使用商业上可用的东西,例如SendGrid。关键是,如果你想发送电子邮件,你需要一个服务器端组件。
  • 至于下载文件的能力,这正是我想切换到 Angular 的原因。但这并不能解决我的问题,即如果用户已经可以看到 html,他们也可以使用浏览器中的“保存”按钮来保存文档。如果我通过电子邮件向他们发送此页面,则链接将不起作用。当然,我可以向网络服务器发送一个链接,但就目前而言,无法从 Intranet 外部访问服务器,这意味着人们将无法从他们的邮件客户端或智能手机读取 html 页面的内容,他们需要远程进入我们的系统。
  • 感谢澄清,但目前我们确实有一个邮件服务器,我的 API 依赖它。关键问题是生成将进入电子邮件的静态 html。
  • @joelhoro 我已经解释过了。您将视图模型传递给服务器。然后服务器负责生成电子邮件并将其发送到邮件服务器。
猜你喜欢
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
  • 2016-11-06
  • 2018-08-18
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多