gpt4 book ai didi

c# - 将 MS Outlook HTML 内容转换为 "pretty"纯 HTML

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:02 27 4
gpt4 key购买 nike

阅读 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com