如何使用Rails3应用程序解析电子邮件正文中的文本?

时间:2011-05-18 17:26:12

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

我需要从转发的电子邮件中获取姓名和电子邮件地址,其中正文中有这样的行:

From: john smith <sales@domain.com>

最好的方法是什么?我应该使用一个好的图书馆/宝石吗?

此行与其发送的电子邮件客户端以及使用的语言不同,因此我需要一种比仅匹配此字符串更强大的方式。

另外一些客户不包括名称,只包括此行的电子邮件地址,因此我需要能够处理。

1 个答案:

答案 0 :(得分:2)

require 'mail'  # only needed for non-Rails
m = Mail.new( "any RFC-conforming email including headers" )
puts m[:from].display_names.first
puts m[:from].addresses.first

Mail对象自动包含在使用ActionMailer的Rails项目中 - 但如果您不使用Gemfile,则需要将其添加到ActionMailer

更新

我没有正确阅读OP的问题 - 他们希望从转发邮件的正文中获取电子邮件地址。我只是使用一些正则表达式:

name, email = m.body.match( /^\s*From:\s*(.*)\s+<(.*)>$/)[1,2]

注意:这假定了相当多的电子邮件结构 - 只有HTML的电子邮件很容易阻止这个正则表达式。