- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
阅读 HTML 格式的 Outlook 电子邮件不是很漂亮,而且在我的场景中基本上“无用”。我目前正在构建一个支持系统,用户应该能够在其中创建新票证,并通过 对票证发表评论。电子邮件。
100% 肯定只会使用 Outlook。
到目前为止,这是我的方法:
订阅并阅读邮件
private static void OnEvent(object sender, NotificationEventArgs args)
{
// Streaming subscription to EWS
var subscription = args.Subscription;
// Loop through notifications
foreach(var notification in args.Events)
{
// If this is a news mail
if(notification.EventType = EventType.NewMail)
{
var item = (ItemEvent)notification;
// Define what properties to load
var props new PropertySet(BasePropertySet.IdOnly,
EmailMessageSchema.UniqueBody,
EmailMessageSchema.From,
EmailMessageSchema.Subject,
/* ECT */);
// We need the body to be in HTML
props.RequestedBodyType = BodyType.HTML;
// Bind the message
var message = EmailMessage.Bind(subscription.Service, item.ItemId, props);
// Handle the message with custom made handler
Handlers.ReadEmailAndPerformAction(message);
}
}
}
消息处理程序
public static void ReadEmailAndPerformAction(EmailMessage message)
{
var from = message.From.Address;
var subject = message.Subject;
var body = message.UniqueBody.Text;
// BIND OTHER PROPERTIES
if(isReply)
CommentOnTicketFromEmail(/* Needed arguments */);
else
CreateNewTicketFromEmail(/* Needed arguments */);
}
问题
当我收到并阅读 HTML 格式的电子邮件内容时,它看起来很奇怪。这只是 Outlook,它充满了荣耀,惹恼了任何经过的开发人员,而且 HTML 有点无用。我想阅读并将普通和基本的 HTML 插入到我的数据库中,但这不是我收到的。
这是一个 非常 基本电子邮件的 HTML 内容示例:
<html>
<body>
<div>
<div>
<span lang="da">
<div>
<div style="margin:0;">
<font face="Calibri,sans-serif" size="2">
<span style="font-size:11pt;">Test content</span>
</font>
</div>
</div>
</span>
</div>
</div>
</body>
</html>
对于我的系统,这只是乱码。我根本无法理解为什么输入不是段落等等。尽管如此,这当然是 Outlook 决定为我提供内容的方式。
无论如何,我想把这个例子转换成一个简单的 HTML 字符串,如下所示:
<p>Test content</p>
对我来说最简单的方法是只阅读纯文本内容,但这会弄乱列表、图像等,我希望保存列表和嵌入图像。
最佳答案
使用正则表达式,我设法将 outlook HTML 困惑美化为更具可读性和美观性的内容。它仍然不是 100% 的“纯”HTML(例如列表等),但至少它更好。
C#
public static string PrepareBody(string body)
{
var stripHead = new Regex(@"<body.*?>|<\/body>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
var stripScript = new Regex(@"<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
var stripStyle = new Regex(@"<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
var stripFonts = new Regex(@"\sface=""(.*?)""|\ssize=""(.*?)""", RegexOptions.IgnoreCase | RegexOptions.Multiline);
var stripInlineFontSize = new Regex(@"font-size:(.*?);", RegexOptions.IgnoreCase | RegexOptions.Multiline);
var regBody = stripHead.Split(body);
var content = "<div>" + regBody[1].Replace("\n", "\n<br />") + "</div>";
content = stripScript.Replace(content, "");
content = stripStyle.Replace(content, "");
content = stripFonts.Replace(content, "");
content = stripInlineFontSize.Replace(content, "");
content = content.Replace("<o:p>", "")
.Replace("</o:p>", "")
.Replace(" class=\"WordSection1\"", "")
.Replace(" class=\"MsoPlainText\"", "")
.Replace(" class=\"MsoNormal\"", "")
.Replace("mso-fareast-language:DA", "")
.Replace("<br>", "<br />");
return content;
}
解释
stripHead
:删除 <head></head>
和 <body></body>
标签,获取其中的内容。stripScript
:删除任何 <script></script>
可能存在的标签stripStyle
:删除任何 <style></style>
可能存在的标签stripFonts
:删除 <font></font>
内的所有样式标签(<font>
标签将仍然存在,因为字体颜色显示如下:<font color="red">Content</font>
,因此我们无法完全删除 <font>
标签)stripInlineFontSize
:删除任何 font-size
内联 css 中的 css 属性(示例:style="font-size:11pt;"
)请注意,这不是一个非常漂亮的解决方案。
关于c# - 将 MS Outlook HTML 内容转换为 "pretty"纯 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42765675/
我已经使用 MS Word 和一大堆表单字段创建了一个应用程序表单,并且我有一个 Access db,可以从这个 Word 文档中导入我需要的所有数据,这要归功于: http://msdn.micro
我试图找到一种将 Outlook 插件发布到办公商店的方法。但我发现我们只能发布 Office 应用程序,而不能发布 Office 商店的加载项。因此我想知道 Office 应用程序和 Office
我在 MS Reporting Services 服务器上部署了一份报告,工作正常。我可以使用 Microsoft 的报表查看器组件从 ASPX 页面毫无问题地 Access 它、设置报表参数等。效果
让我们再试一次。我发布这个是为了回答 2 个问题 MS Project 2007 是否需要 SharePoint(我希望没有)? 做 你喜欢 MS Project 开发团队 - 它是有用的还是 疼痛?
我正在执行这些星期六上午的任务之一,试图理解为什么为什么要在计算机注册表中搜索某些信息会花费大量时间,甚至迫使我停止该过程。使用这些注册表清理程序之一,我发现该代码花了数十分钟遍历如下行: HKEY_
从多年前开始,我就没有使用Access。 它能很好地解决什么样的问题,甚至比真正的RDBMS支持的Web应用程序更好? 它仍在积极开发吗?还是MS已经死了? 最大的局限性是什么? 更新: 应该使用什么
我们计划重新设计一个相当庞大的 MS Access 应用程序。有没有办法在同一应用程序上同时工作,或者是否可以合并同一文件的两个单独实例(不是数据,而是表单和代码)。现在 Access 包含数据,但在
我写了一些SQL命令来更正表中的字段。由于它是如此之小(也许我有点自大),我什至没有运行过一次,只是将其放入了更新包中供其他用户使用。 Dim SQL As String Dim rs As DAO.
它是Office自带的,是一个“中规中矩”的数据库,到今天这里有800多个问题,但我从来没有关注过它。 我失去了一些有趣的东西? 我说的是 MS-Access 作为用于快速原型(prototype)制
我有一个MS-Access数据库,该数据库已通过使用“用于Access的Microsoft SQL Server迁移助手2008”(aka SSMA)转换为使用SQL表并创建了链接表(因此,MS-Ac
我有一个 Excel 文件,其中包含从 Access 数据库(主数据库)导出的任务。然后,此 Excel 文件用作 MS Project 的导入文件。随后,MS Project 用于实际跟踪和报告,并
我正在尝试获取有关如何将 MS Project 2010 连接到 MS Project Server 2010 的教程或分步说明。 我已经在我的服务器上安装了 Server 2008 R2(64 位)
有没有办法像选择查询一样在查询中引用表单的组合框/文本框? 我通常在选择查询的条件中使用类似这样的东西: like forms!frmMain.qTitleofSomething&* (acces
我想创建一个表,其中包含 DOUBLE 实数类型的列。我可以在表设计 View 中找到数据类型 Number,但是没有 Double 或 single,Float.. 如何实现..? 我还需要 SQL
我环顾四周,发现了一些关于如何从字段的“描述”框中获取描述的 VBA 代码,但没有找到如何在表单属性中使用它的方法。 我希望出现一个 ControlTip,其中包含从数据库中的描述中带来的该字段的描述
我有一个难题。我已经开发了一个 Access 应用程序,我正准备分发它。我刚刚拆分了数据库。 (我知道,有人说我应该从一开始就把它分开开发……我没有)我也刚刚加密了后端数据库。在前端,我已链接到后端并
我制作了一个 MS Access 2013 数据库来跟踪有关交易网站的所有通信。与此问题相关的表和列是具有列 ID(编号)和链接(超链接)的广告,以及具有列广告的注释,其中包含广告 ID。链接字段包含
我与我不拥有且无法更改的数据库建立了 ODBC 连接。我要做的是使相关记录合并为一条记录。关系是一对多。 我有一个学生管理系统,想要导出一个提供自动标注服务(由调用收费)的调用列表。如果有多个学生住在
我在 Access 的表单中设置了一个文本框。该表单链接到一个表格。但是它自己的文本框是未绑定(bind)的,它用于简单地收集用户输入。但是,我无法编辑它所查看的值。 文本框未锁定。文本框可以在 VB
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
我是一名优秀的程序员,十分优秀!