email - 检测电子邮件是否本质上是文本

标签 email outlook vsto email-client heuristics

我正在编写一个 Outlook 插件,用于保存电子邮件以用于历史目的。不幸的是,Outlook 的 MSG 格式过于冗长,即使经过压缩也是如此。这会导致保存的 MSG 文件的大小是其等效文本大小的许多倍。然而,将所有消息保存为文本存在缺乏附件、图像和任何相关格式的明显缺陷。

对于大多数电子邮件,这不是问题,但是具有一定程度复杂格式、图片、附件(等)的电子邮件应该以 MSG 格式保存。

大多数用户的电子邮件以 HTML 格式发送,因此我的算法大致如下:

1. If email has attachment(s), save as MSG and be done
2. If email is stored as text, save as text and be done
3. If email is not stored as HTML store as MSG and be done
4. Decide if the HTML should be converted to text and
     store it as text if so
     store it as MSG if not

这很简单,除了第 4 步:如何确定 HTML 格式的电子邮件在保存时应转换为哪种格式?

最佳答案

一个想法:计算消息中 HTML 标签的加权密度。根据现有数据选择阈值。 HTML 密度高于阈值的消息将存储为 MSG;密度低于阈值的消息将存储为纯文本。

你如何计算加权密度?使用 HTML 解析库。让它解析文档并计算文档中每种类型的 HTML 标签的数量。这就是您需要从图书馆获得的全部内容。将每个标签计数乘以其权重并将它们相加。然后尝试将消息转换为纯文本并计算消息中的字符数。将加权标签计数总和除以该数字,您就得到了密度。

密度应该用什么加权?通过一个表格,你创建了每种类型的 HTML 标签的重要性。我猜想失去粗体和斜体并不算太糟糕。丢失有序和无序列表会更糟,除非在将消息转换为纯文本时保留项目符号和数字。表格的权重应该很高,因为它们对格式很重要。也为无法识别的标签选择权重。

你应该如何选择你的阈值?对电子邮件样本运行密度计算函数。还要手动检查这些电子邮件,看看它们作为 MSG 还是纯文本更好,并为每封电子邮件写下该选择。使用该数据的一些算法来找到边界值。我认为该算法可能是 Naive Bayes classification ,但在这种情况下可能有更简单的算法。或者人工计算的猜测可能就足够了。我认为您可以在查看人类选择的格式与加权 HTML 标签密度的散点图后做出猜测,并观察大致将两种格式决策分开的密度值。

关于email - 检测电子邮件是否本质上是文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9439317/

相关文章:

html - 邮件中的图像上的图像

azure - 如何使用 Azure 数据工厂复制事件提取电子邮件附件?

excel - 向自动 Outlook 邮件添加签名

vba - 有没有直接的方法来获取 PowerPoint 演示文稿中幻灯片的索引?

c# - 读取Excel互操作单元格: Cannot convert mthod group 'ToString' to non-delegated type 'String' [closed]时出错

javascript - 如何使用按钮发送当前页面的电子邮件?

ios - 如何调用电子邮件应用程序?

html - HTML 格式的 Django 电子邮件

vba - 删除 Outlook 前后的空格

c# - object[,] 在 C# 中是什么意思?