是否有可能以编程方式“清理”电子邮件?

有没有人有任何关于我如何清理收到的电子邮件的建议? 我想删除免责声明,图像以及可能也存在的任何以前的电子邮件文本,以便我只留下正文文本内容。 我的猜测是不可能以任何可靠的方式,但是有人试过吗? 有没有适合这种事情的图书馆?

在电子邮件中,有几个商定的标记意味着你想剥离的东西。 您可以使用正则表达式查找这些行。 我怀疑你不能很好地“消毒”你的电子邮件,但你可以寻找一些东西:

  1. 以“>”开头的行(大于空格)标记引号
  2. 带有“ – ”的行(两个连字符,然后是空格,然后换行)标记签名的开头,请参阅维基百科上的签名块
  3. 多部分消息,边界以开头除此之外,您需要进行一些搜索以将消息正文部分与不需要的部分(如base64图像)分开

至于实际的C#实现,我留给你或其他SOers。

一些显而易见的事情要看:

  1. 如果邮件不是纯文本,则邮件将是多部分的mime。 任何类型为“image / *”(图像/ jpeg等)的部分都可能被删除。 在任何可能的情况下,任何类型不是“text / *”的部分都可以。
  2. HTML消息可能会有“multipart / alternative”类型的一部分(我认为),并且将包含2个部分,一个是“text / plain”,另一个是“text / html”。 这两个部分应该大致相同,因此您可以删除HTML部分。 如果存在的唯一部分是HTML位,则可能必须执行HTML到纯文本转换。
  3. 引用文本的通常格式是在文本前面加上“>”字符。 您应该可以删除这些行,除非行开始“> From”,在这种情况下插入“>”以防止邮件阅读器认为“From”是新邮件的开头。
  4. 签名应以“ – \ r \ n”开头,但很有可能缺少尾随空格。

OSBF-Lua的第3版有一个邮件解析库,它将处理MIME并将消息拆分为其MIME部分,依此类推。 我目前有一堆Lua脚本,可以忽略大多数非文本附件,更喜欢纯文本到HTML等等。 (我还试图保留引用时将长行换行为80个字符。)

至于删除以前引用的邮件,上面的建议都很好(你必须订阅一些不礼貌的邮件列表)。

可靠地删除免责声明可能会很困难。 我的第一个裁剪就是维护一个免责声明库,这些免责声明会在每封邮件的末尾被删除; 我会编写一个脚本,以便我轻松添加到库中。 对于更复杂的东西,我会尝试某种机器学习。

自2007年2月以来,我一直致力于垃圾邮件过滤,我已经了解到与电子邮件有关的任何事情都是一团糟。 一个好的经验法则是,无论你想做什么都比你想象的要难得多:-(

鉴于您的问题“是否有可能以编程方式’清理’电子邮件?”,我会回答“不,不可靠”。

你面临的危险并不是真正的技术,而是社会学的危险。

它很容易发现并过滤掉消息的某些方面 – 比如图像。 同样,过滤签名和免责声明也是可能的(尽管更多的是挑战)。

真正的问题是错误的成本。

如果您的filter恰好删除了一条关键信息,会发生什么? 你可以追溯它找到丢失的部分,或者你的过滤是否具有破坏性? 更糟糕的是,你会注意到这件作品丢失了吗?

我几年前看到的经典喜剧小说就说明了这一点。 一起工作在汽车的两个人。 一个是在工作之下,另一个坐在附近阅读服务手册的指示 – 很明显,没有人知道他在做什么,但他们正在尽力而为。

手动的家伙,大声朗读:“撤消油底壳中心的粗体……”[翻页]

工具家伙:“好的,它出来了。”

手动人:“……在任何情况下都没有。”

如果您创建自己的应用程序,我会查看正则表达式,找到文本并替换它。 为了使应用程序有点好,我创建了一个名为Email的类,在该类中我有一个名为RAW的属性和一个名为Stripped的属性。

只是一些提示,当你看到正则表达式时,你会收集其余的!