我需要从转发的电子邮件中获取姓名和电子邮件地址,其中正文中有这样的行:
From: john smith <sales@domain.com>
最好的方法是什么?我应该使用好的库/宝石吗?
此外,此行将因发送的电子邮件客户端以及语言而异,因此我需要一种更强大的方法,而不仅仅是匹配此字符串。
此外,有些客户在此行上不包含名称,而只包含电子邮件地址,因此我需要能够处理它。
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 项目中 - 但如果您不使用ActionMailer
,则需要将其添加到Gemfile
更新
我没有正确阅读OP的问题-他们想从转发的邮件正文中获取电子邮件地址。 我只会使用一些正则表达式:
name, email = m.body.match( /^s*From:s*(.*)s+<(.*)>$/)[1,2]
注意:这假设了相当多的电子邮件结构 - 仅HTML电子邮件可以轻松阻止此正则表达式。