代码之家  ›  专栏  ›  技术社区  ›  Rob Cooper

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

  •  1
  • Rob Cooper  · 技术社区  · 17 年前

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

    因此,我们需要能够为电子邮件派生一个纯文本替代方案。我正在考虑立刻跳上,创造一个雷吉士脱衣舞。 <*> 信息中的标签-但后来我意识到 这是不好的,因为我们确实需要一些格式信息(段落、换行符、图像等)。

    注: 我可以实际发送邮件和设置其他视图等,这是 仅限于从HTML获取纯文本。

    所以,我在思考一些想法。会贴一个答案,看看你们怎么想,但我想我会把它打开到地板上。:)

    如果你需要更多的澄清,请大喊。

    多谢,

    抢劫

    3 回复  |  直到 17 年前
        1
  •  1
  •   Rob Cooper    17 年前

    我的解决方案

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

    现在,我想提出一些目标:

    • 电子邮件的所有内容都应保留在ASPX页面中(就像当前的HTML内容一样)。
    • 我不想让客户机代码做任何事情,除了说 SendMail("PageX.aspx") “。
    • 我不想写太多代码。
    • 我想尽可能保持代码的语义正确(不 真的? 疯狂的蠢货!.

    过程

    所以,这就是我最后所做的:

    • 转到母版页查看电子邮件。创建ASP.NET MultiView Control . 此控件将有两个视图-HTML和纯文本。
    • 在每个视图中,我为实际内容添加了内容占位符。
    • 然后,我抓取了所有现有的ASPX代码(如页眉和页脚),并将其粘贴在HTML视图中。所有的,doctype和所有的。这确实会让vs发牢骚。 忽略它。
    • 然后,我当然向纯文本视图添加了新内容,以便在纯文本环境中最好地复制HTML视图。
    • 然后我给主控添加了一些代码 Page_Load ,检查querystring参数“type”,它可以是“html”或“text”。如果没有“文本”,它就会变成“文本”。取决于价值, 切换视图。
    • 然后,我转到内容页,为纯文本等价物添加新的占位符,并根据需要添加文本。
    • 为了让我的生活更轻松,我又超载了 SendMail 方法获取所需页的响应,传递“ type=html “和” type=text “创造 AlternateView 视情况而定。

    综上所述

    因此,简而言之:

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

    工作完成了!

    如果有任何不清楚的地方,请大声喊叫。我想在这上面创建一个更详细的博客文章。

        2
  •  0
  •   Rob Cooper    17 年前

    我的想法

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

        3
  •  0
  •   bobince    17 年前

    您可以确保HTML邮件是XHTML格式的,这样您就可以使用标准的XML工具轻松地解析它,然后创建自己的输出纯文本的DOM serializer。覆盖通用XHTML仍然需要很多工作,但是对于计划在电子邮件中使用的有限子集,它仍然可以工作。

    或者,如果您不介意花大量精力开发另一个程序,您可以使用lynx web浏览器的-dump开关。