Ruby on rails 如何解析传递到标题的内容?
我正在尝试用RubyonRails解析一封电子邮件,它是一个附件?我不必担心正则表达式,更不用担心用于获取解析输出的方法。我希望这样做没有任何邮件解析宝石。下面的代码似乎有效,这是正确的方法吗 model.rbRuby 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-
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"]