Ruby on rails 如何解析传递到标题的内容?

Ruby on rails 如何解析传递到标题的内容?,ruby-on-rails,ruby,parsing,Ruby On Rails,Ruby,Parsing,我正在尝试用RubyonRails解析一封电子邮件,它是一个附件?我不必担心正则表达式,更不用担心用于获取解析输出的方法。我希望这样做没有任何邮件解析宝石。下面的代码似乎有效,这是正确的方法吗 model.rb def parse_delivered_to str = File.read("public/emails/email.txt").to_s delivered_to = str.match(/(Delivered-To: )[\w+\-.]+@[a-z\d\-.]+\.+[a-

我正在尝试用RubyonRails解析一封电子邮件,它是一个附件?我不必担心正则表达式,更不用担心用于获取解析输出的方法。我希望这样做没有任何邮件解析宝石。下面的代码似乎有效,这是正确的方法吗

model.rb

def parse_delivered_to
  str = File.read("public/emails/email.txt").to_s
  delivered_to = str.match(/(Delivered-To: )[\w+\-.]+@[a-z\d\-.]+\.+[a-z]+[a-z]+[a-z]/i)
end
show.html.erb

<%= @email.parse_delivered_to %><br>

分析 电子邮件规范允许,但您当前的表达式不匹配。此外,我认为正则表达式不允许所有允许的地址字符

解决方案 使用procmail的
^TO
语法的变体应该允许您更自由地匹配多行地址模式。例如:

header.scan( /^Delivered-To:(.*[^-a-zA-Z0-9_.])?/im ).flatten.map(&:strip)
一些测试和示例
header=“交付给:\n Foo”
标题.扫描(/^交付至:(.[^-a-zA-Z0-9.])?/im).展平.地图(&:条带)
标题.扫描(/^交付至:(.[^-a-zA-Z0-9.])?/im).展平.地图(&:条带)
=>[“Foo”]
标题.扫描(/^发送至:(.[^-a-zA-Z0-9.])?/im)。
展平地图(&:条带)至美国扫描(/[\w@.+_-]+/).grep(/@/).first.tos
=> "foo@example.com"
'交付给:foo.bar+extension@example.com'.
扫描(/^发送至:(.[^-a-zA-Z0-9.])?/im)。
展平.map(&:strip).to_.s.扫描(/[\w.+\u-]+/)
=>[“foo.bar+扩展”]
'交付给:foo.bar-extension@example.com'.
扫描(/^发送至:(.[^-a-zA-Z0-9.])?/im)。
展平.map(&:strip).to_.s.扫描(/[\w.+\u-]+/)
=>[“foo.bar扩展”]
header = "Delivered-To:\n  Foo <foo@example.com>"
header.scan( /^Delivered-To:(.*[^-a-zA-Z0-9_.])?/im ).flatten.map(&:strip)
header.scan( /^Delivered-To:(.*[^-a-zA-Z0-9_.])?/im ).flatten.map(&:strip)
=> ["Foo <foo@example.com>"]

header.scan( /^Delivered-To:(.*[^-a-zA-Z0-9_.])?/im).
 flatten.map(&:strip).to_s.scan(/[\w@.+_-]+/).grep(/@/).first.to_s
=> "foo@example.com"

'Delivered-To: foo.bar+extension@example.com'.
  scan( /^Delivered-To:(.*[^-a-zA-Z0-9_.])?/im).
  flatten.map(&:strip).to_s.scan(/[\w.+_-]+/)
=> ["foo.bar+extension"]

'Delivered-To: foo.bar-extension@example.com'.
  scan( /^Delivered-To:(.*[^-a-zA-Z0-9_.])?/im).
  flatten.map(&:strip).to_s.scan(/[\w.+_-]+/)
=> ["foo.bar-extension"]