从电子邮件签名和答复

我目前正在开发一个系统,允许用户回复发送( 叹息 )的通知邮件。

我需要删除答复和签名,以便留下答复的实际内容,没有任何噪音。

有没有人有任何build议最好的办法做到这一点?

如果您的系统是内部的和/或您的回复格式数量有限,那么可以做一个很好的工作。 以下是我们为电子邮件回复trac ticket设置的filter:

删除所有文本后,包括:

  1. 等于'-- \n' (标准电子邮件sig分隔符)
  2. 等于'--\n' (人们常常忘记了sig定界符中的空格;这不是常见的外部sigs)
  3. '-----Original Message-----'开头的行(MS Outlook默认)
  4. '________________________________ ”开头的行(32个下划线,Outlook再次)
  5. 'On '开始并以'On '结尾' wrote:\n' (OS X Mail.app默认值)
  6. 'From: '开头的行(可以保护四个Outlook和其他一些回复格式)
  7. 'Sent from my iPhone'开头的行
  8. 'Sent from my BlackBerry'开始的行

数字3和4是“开始”,而不是“等于”,因为有时候用户会在意外时挤压线条。

我们试图更加自由地解决答复,因为对于纠正丢失的文本来说,更多的烦恼(对我们来说)有垃圾回复。

任何人都有他们想分享的其他格式?

我不相信你可以做到这一点可靠 (签名曾经以'--'开头,但我不再看到这一点)。 也许你最好让人们在文本标题之间回复,然后简单地从这里删除答复? 这不是优雅,但也许更可靠。

例如

 REPLY BETWEEN HERE --> AND HERE --> 

所以你只需要在上面find所需的标题,并采取什么中间。

查看email_reply_parser gem – https://github.com/github/email_reply_parser 。 它处理这个问题做得很好。

如果你想要一些function强大的,不介意阅读学术刊物,你可以看看这个:

  • 学习从电子邮件中提取签名和回复行

这是一个作者的主页,更多的信息和一些下载:

  • Vitor R. Carvalho – 软件和数据集 – (Vitor Carvalho)

如果您可以假定这些电子邮件是纯文本的,只需将以“>”开头的行作为回复,“ – ”行应该划定签名。 但是这些假设可能行不通,因为不是所有的互联网用户都使用符合规则的软件。

只能用于签名的方法(除了检测__或 – 之外)是为了testing发件人的名字和/或姓是否在短线 (〜最多包含3到4个字)。

发件人姓名位于原始电子邮件标题上,大部分时间位于电子邮件地址旁边,如下所示: From: John Doe <jdoe@provider.com>

这是基于这样的假设:你很less在电子邮件中写下自己的名字,如果你这样做了,那可能是一个长长的句子。

当然会有一些误报,但是根据你做什么(我们用它来把引用的文本和签名放到一个… Gmail风格的button中,这可能不会是一个大问题,所以过度检测并不会最终导致丢失任何内容,它只是错位)。

有一个非常好的PHP库专用于电子邮件parsing

http://williamdurand.fr/EmailReplyParser/

https://github.com/willdurand/EmailReplyParser

推荐的签名分隔符是“ – \ n”。 如果人们遵循这个build议,剥离签名应该很容易。