2008-12-14 91 views
4

有没有人对我如何清理传入邮件的主体有任何建议?我想删除免责声明,图片以及可能也会出现的任何以前的电子邮件文本,这样我只剩下正文文本内容。我的猜测是不可能以任何可靠的方式实现,但是有没有人尝试过?有没有适合这种事情的图书馆?是否有可能以编程方式“清理”电子邮件?

回答

4

在电子邮件中,有一些商定的标记意味着你想要剥离的东西。您可以使用regular expressions查找这些行。我怀疑你不能真的很好“消毒”您的电子邮件,但你可以找一些事情:

  1. 线开始“>”(大于然后空格更大),标志着报价
  2. 本着“ - - “(然后两个连字符的空格,然后换行)标志着一个签名的开始,看到Signature block on Wikipedia
  3. 多部分消息,边界与开始 -,除此之外,你需要做一些搜索从不需要的部分邮件正文部分分开(如base64图像)

至于实际的C#实现,我会为您或其他SOers留下。

0

如果您创建自己的应用程序,我会查看正则表达式,找到文本并将其替换。为了使应用程序有点不错,我会创建一个叫做电子邮件的类,并且在该类中我有一个名为RAW的属性和一个名为Stripped的属性。

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

3

一些明显的事情来看待:

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

OSBF-Lua的第3版有一个邮件解析库,它将处理MIME并将邮件拆分为其MIME部分等等。我目前有一堆Lua脚本,它们会像 那样忽略大多数非文本附件,比较喜欢纯文本到HTML,等等。 (为了保留引号,我也将长行换成80个字符。)

就删除先前引用的邮件而言,上述建议都很好(您必须订阅一些不合适的邮件列表)。

可靠地删除免责声明可能会很难。我的第一步是简单地维护一个免责声明库,这个免责声明将从每封邮件的末尾删除;我会编写一个脚本,使我能够轻松地添加到库中。对于更复杂的东西,我会尝试一些机器学习。

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

1

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

你所面临的危险是不是一个真正的技术,而是一个社会学的一个

这是很容易被发现,并过滤掉,邮件的某些方面 - 。像图像过滤out签名和免责声明同样可以实现(尽管更多的是挑战)

真正的问题是开发人员的成本它错了。

如果您的过滤器碰巧删除了一条关键信息,会发生什么情况?你可以追溯到找到缺失的部分,或者是你的过滤desytructive?更糟糕的是,你会注意到这件作品丢失了吗?

我在几年前看到过一个经典的喜剧素描来说明这一点。两个人一起在一辆车上工作。一位在做这项工作,另一位坐在附近阅读服务手册的指示 - 很明显,没有人知道他在做什么,但他们正在尽力而为。

手册家伙,朗读:“撤消大胆的油底壳的中心......” [转页]

工具的家伙:“好吧,这出去了。”

手动人:“......在任何情况下”。

+0

这个想法出现在我身上,没有我的过程没有破坏性,电子邮件以原始格式保存,但我需要以其他方式使用所提供信息的元素,但是您所提出的观点恰恰是正在唠叨我。 – flesh 2008-12-15 10:37:06

相关问题