如何删除Begin转发消息:rails 3应用程序中电子邮件正文的一部分

时间:2011-06-01 14:09:31

标签: ruby-on-rails ruby ruby-on-rails-3 parsing email

我正在接收转发电子邮件到我的rails 3应用程序并且正常工作。

但在转发的电子邮件中,它在顶部包含以下消息,例如:

Begin forwarded message:

From: roger rabbit <sales@mysite.com>
Date: 23 May 2011 13:52:08 GMT+01:00
To: sam@yoursite.com
Subject: Hi threre

Dear Mike 

Yes please do the work for me!

此格式会更改哪个电子邮件客户端发送邮件。

我想将其脱离身体,这样我就可以像这样显示转发的消息:

Dear Mike 

Yes please do the work for me!

最好的方法是什么,因为我知道我可以为这种特定的格式做到这一点,但我需要它更通用/更聪明。

我应该使用一些gem / lib吗?

任何帮助都会很棒。

谢谢Rick

2 个答案:

答案 0 :(得分:0)

我没有听说过有用的宝石或图书馆,但我的第一个问题是:

  1. 处理客户端之间不同的“开始转发的消息:”可能是一个棘手的问题。
  2. 解决电子邮件标题应该更容易,因为它们应该是可预测的。
  3. 对于数字1:我会猜测在大多数(希望是所有)情况下,你想要丢弃“From:”行上方的任何行。因此,找到“From:”所在的行号(可能通过正则表达式),删除上面的所有行。这样可以避免获得不同电子邮件客户端提出的“Begin forwarded message:”的所有变体。

    对于数字2:使用正则表达式检查电子邮件标题信息。检查“From:”或“To:”等的东西绑定到行的开头,然后删除该行匹配。

    我会尝试尽可能多的测试用例(示例转发的电子邮件)以确保您的系统正常运行。一旦你掌握了一些具体的例子,我们就可以继续提供帮助。

答案 1 :(得分:0)

我认为你应该使用String类的split方法。尝试这样的事情:

例如,a - 变量包含您的消息。

b = a.split("\n\r\n", 3) maybe b = a.split("\n\n", 3)

他会根据分隔符(在你的情况下为\ n \ n)将文件划分为子串,并返回这些子串的数组。

所以,最后你应该做以下事情:

c = b[2].to_s 

puts c => "Dear Mike \n\nYes please do the work for me!\n"

这不是一个好的解决方案,但这应该有效