从 HTML 内容解析纯文本电子邮件 (ASP.NET)
是的,简而言之,我们基本上已经有了一个可以生成电子邮件 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我的解决方案
好的,就在这里! 我想出了一个解决我的问题的方法,它很有魅力!
现在,以下是我想要设定的一些目标:
SendMail("PageX.aspx")
”之外,我不希望客户端代码执行任何其他操作。流程
因此,这就是我最终要做的事情:
Page_Load
添加了一些代码,检查 QueryString 参数“type”(可以是“html”或“text”)。 如果不存在,它将转为“文本”。 根据值,它切换视图。SendMail
方法来获取所需页面的响应,传递“type=html
”和“type=text< /code>”并创建 AlternateView'视情况而定。
总结
因此,简而言之:
任务完成!
如果有任何不清楚的地方,请大喊。 我想在某个时候更详细地撰写关于此的博客文章。
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:
SendMail("PageX.aspx")
".The Process
So, this is what I ended up doing:
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.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:
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.
我的想法
基于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).
您可以确保 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.