- 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/
可以抛出异常的函数可以有[pure]属性吗? 最佳答案 根据 https://msdn.microsoft.com/en-us/library/system.diagnostics.contracts
我使用的是纯 css 推送导航。它工作得很好,但是我不知道如何在单击导航链接时隐藏菜单。您必须手动单击菜单图标才能使菜单返回隐藏状态。但是,当单击链接并且站点跳转到某个部分时,我希望菜单自动滑入隐藏状
我正在尝试让纯 CSS 下拉菜单正常工作。它在很大程度上确实有效,除了其他内容似乎显示出来但我不知道为什么。 http://jsfiddle.net/uQveP/4/ 有人可以告诉我我做错了什么吗?
这个问题在这里已经有了答案: What is a "callback" in C and how are they implemented? (9 个回答) 关闭 8 年前。 我正在以这种方式实现回
我想在不使用 Javascript 或任何其他语言的情况下,使用 HTML 和 CSS 创建一个 Page Back Button。我想用纯 HTML 和 CSS 来完成。 我进行了搜索,但每次代码中
我对序言很陌生。据我所知,Pure Prolog 仅限于 Horn 子句。 这是一个非常简单的序言程序 - % student( Snr , FirstName , LastName ,
我想在加载数据时对容器使用以下加载指示器。 问题是, slider 具有固定的宽度和高度(300 像素和 300 像素),但我希望它能够动态适应容器。当我尝试添加宽度时:140px;和高度:140px
当内容超过可用宽度时,我需要启用滚动阴影。这是我试图用纯 css(没有 JS)来实现的。我遇到了很多文章,可以使用 css 多背景和背景附件来实现。如果内容是文本类型,则可以使用下面的 jsfilld
我正在编写一个上古卷轴在线插件,它由一个名为 Havok Script 的轻微修改的 Lua 5.1 引擎支持。 .这个Lua环境不允许访问os , io , package , debug模块或任何
我自己尝试过将 Arduino 库编译成他们自己的独立库并链接到 Eclipse 中的一个项目,但在此过程中遇到了一些问题。 是否有关于如何启动和运行的体面指南?我一直很难在网上找到一个真正有效的..
我在这里遇到了一些麻烦。我正在尝试使用本地存储创建一个待办事项列表,但我唯一要做的就是将列表项添加到本地存储并删除 所有项目 从本地存储中删除,但我无法从列表中删除单个 SELECTED 项目。有人可
我的问题很简单。考虑以下 CodePen .是否有可能仅使用 css 就可以获得相同的结果?换句话说,如果不使用 javascrip 如何做到这一点?非常感谢! Nachos are
我正在使用没有 jquery 的 angularjs,并尝试创建滚动事件监听器。 尝试过这种方法: $rootScope.$watch(function() { return $windo
我正在尝试使用纯 webgl 创建虚线。我知道这已经有一个问题,也许我很笨,但我不知道如何让它发挥作用。我理解这个概念,但我不知道如何在着色器中获取沿路径的距离。以前的答案有以下行: varying
我正在尝试用纯 JavaScript 制作工具提示,显示在 hover .就像 Stack Overflow 中将鼠标悬停在配置文件名称上的一个 div显示。 我尝试使用 onmouseover ,
我想要通过 AJAX 将监听器添加到新元素的想法: 例如,现在我有 hello world 我为每个 添加了一个监听器,但是当我通过 AJAX 加载新元素时,它没有监听器;我不完全确定问题是什么。
如果我错误地提出了这个问题,或者之前已经有人问过并回答过这个问题,我提前表示歉意。我的搜索发现了类似的基于 JQuery 和/或静态日期的问答,我正在寻找具有动态日期的纯 JavaScript 解决方
在 Real World Haskell, Chapter 28, Software transactional memory ,开发了一个并发的网络链接检查器。它获取网页中的所有链接,并使用 HEA
我正在尝试取消 jQuery-fy 一个聪明的 piece of code ,但有点太聪明了。 目标是simple 。将图像从桌面拖动到浏览器。 在这次 unjQueryfication 过程中,我发
如何重新创建 jQuery end() $('#id') .find('.class') .css('font',f) .end() .find('.seven') .css(b,'red') 我有什
我是一名优秀的程序员,十分优秀!