从 HTML 内容解析纯文本电子邮件 (ASP.NET)

发布于 2024-07-08 19:33:40 字数 396 浏览 11 评论 0原文

是的,简而言之,我们基本上已经有了一个可以生成电子邮件 HTML 内容的系统。 它并不完美,但它有效。

由此,我们需要能够导出电子邮件的明文替代方案。 我正在考虑立即开始并创建一个正则表达式来从消息中删除 <*> 标签 - 但后来我意识到这不会很好,因为我们确实需要一些格式化信息(段落、换行符、图像等)。

注意:我可以实际发送邮件并设置替代视图等,这只是关于从HTML。

所以,我正在思考一些想法。 将发布一个作为答案,看看你们的想法,但我想我会把它公开。 :)

如果您需要更多说明,请大声喊叫。

非常感谢,

罗布

Right, in short we basically already have a system in place where the HTML content for emails is generated. It's not perfect, but it works.

From this, we need to be able to derive a plaintext alternative for the email. I was thinking of instantly jumping on and creating a RegEx to strip the <*> tags from the message - but then I realised this would be no good because we do need some of the formatting information (paragraphs, line breaks, images etc).

NOTE: I am OK with actually sending the mail and setting up alternative views etc, this is only about getting plaintext from HTML.

So, I am pondering some ideas. Will post one as an answer to see what you guys think, but thought I would open it up to the floor. :)

If you need any more clarification then please shout.

Many thanks,

Rob

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你的心境我的脸 2024-07-15 19:33:40

我的解决方案

好的,就在这里! 我想出了一个解决我的问题的方法,它很有魅力!

现在,以下是我想要设定的一些目标:

  • 电子邮件的所有内容都应保留在 ASPX 页面中(就像当前的 HTML 内容一样)。
  • 除了“SendMail("PageX.aspx")”之外,我不希望客户端代码执行任何其他操作。
  • 我不想写太多代码。
  • 我想让代码在语义上尽可能正确(没有真的疯狂的黑客行为!)。

流程

因此,这就是我最终要做的事情:

  • 转到电子邮件的母版页。 创建 ASP.NET 多视图控件。 该控件有两个视图 - HTML 和 PlainText。
  • 在每个视图中,我添加了实际内容的内容占位符。
  • 然后,我抓取所有现有的 ASPX 代码(例如页眉和页脚)并将其粘贴到 HTML 视图中。 所有这些,DocType 等等。 这确实让 VS 有点抱怨。 忽略它。
  • 然后,我当然向纯文本视图添加了新内容,以便在纯文本环境中最好地复制 HTML 视图。
  • 然后,我向 Master Page_Load 添加了一些代码,检查 QueryString 参数“type”(可以是“html”或“text”)。 如果不存在,它将转为“文本”。 根据值,它切换视图。
  • 然后,我转到内容页面并为纯文本等效项添加新占位符,并根据需要添加文本。
  • 为了让我的生活更轻松,我然后重载了 SendMail 方法来获取所需页面的响应,传递“type=html”和“type=text< /code>”并创建 AlternateView'视情况而定。

总结

因此,简而言之:

  • 视图分隔了内容(HTML 和文本)的实际“视图”。
  • 母版页根据查询字符串自动切换视图。
  • 内容页面对其视图的外观负责。

任务完成!

如果有任何不清楚的地方,请大喊。 我想在某个时候更详细地撰写关于此的博客文章。

My Solution

OK, so here it is! I thought up a solution to my problem and it works like a charm!

Now, here are some of the goals I wanted to set out:

  • All the content for the emails should remain in the ASPX pages (as the HTML content currently does).
  • I didn't want the client code to do anything more other than say "SendMail("PageX.aspx")".
  • I didn't want to write too much code.
  • I wanted to keep the code as semantically correct as possible (no REALLY crazy-ass hacks!).

The Process

So, this is what I ended up doing:

  • Go to the master page for the email messages. Create an ASP.NET MultiView Control. This control would have two views - HTML and PlainText.
  • Within each view, I added content placeholders for the actual content.
  • I then grabbed all the existing ASPX code (such as header and footer) and stuck it in the HTML View. All of it, DocType and everything. This does cause VS to whinge a little bit. Ignore It.
  • I then of course added new content to the PlainText view to best replicate the HTML view in a PlainText environment.
  • I then added some code to the Master Page_Load, checking for the QueryString parameter "type" which could be either "html" or "text". It falls over to "text" if none present. Dependant on the value, it switches the view.
  • I then go to the content pages and add new placeholders for the PlainText equivalents and add text as required.
  • To make my life easier, I then overloaded my SendMail method to get the response for the required page, passing "type=html" and "type=text" and creating AlternateView's as appropriate.

In Summary

So, in short:

  • The Views seperate the actual "views" of the content (HTML and Text).
  • A master page auto switches the view based on a QueryString.
  • Content pages are responsible for how their views look.

Job done!

If any of this is unclear then please shout. I would like to create blog post on this at some point in more detail.

ゞ花落谁相伴 2024-07-15 19:33:40

我的想法

基于HTML内容创建一个页面并遍历控制树。 然后,您可以从控件中选取文本并根据需要处理不同的控件(例如,对图像使用 ALT 文本,对 HR 等使用“_____”)。

My Idea

Create a page based on the HTML content and traverse the control tree. You can then pick the text from the controls and handle different controls as required (e.g. use ALT text for images, "_____" for HR etc).

抹茶夏天i‖ 2024-07-15 19:33:40

您可以确保 HTML 邮件采用 XHTML 格式,以便您可以使用标准 XML 工具轻松解析它,然后创建您自己的输出纯文本的 DOM 序列化程序。 覆盖一般的 XHTML 仍然需要大量工作,但对于您计划在电子邮件中使用的有限子集来说,它可以工作。

或者,如果您不介意使用其他程序,则可以使用 lynx Web 浏览器的 -dump 开关。

You could ensure the HTML mail is in XHTML format so you can parse it easily using the standard XML tools, then create your own DOM serialiser that outputs plain text. It'd still be a lot of work to cover general XHTML, but for a limited subset you plan to use in e-mail it could work.

Alternatively, if you don't mind shelling out to another program, you could just use the -dump switch to the lynx web browser.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文