我需要从转发的电子邮件中获取姓名和电子邮件地址,其中正文中有这样的行:
From: john smith <sales@domain.com>
最好的方法是什么?我应该使用一个好的图书馆/宝石吗?
此行与其发送的电子邮件客户端以及使用的语言不同,因此我需要一种比仅匹配此字符串更强大的方式。
另外一些客户不包括名称,只包括此行的电子邮件地址,因此我需要能够处理。
答案 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的电子邮件很容易阻止这个正则表达式。