我试图在Ruby on Rails中解析一个附件中的电子邮件?我不担心正则表达式,但更多的是用于获取解析输出的方法。我希望没有任何邮件解析宝石这样做。下面的代码似乎有效,这是正确的方法吗?
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>
答案 0 :(得分:2)
电子邮件规范允许multiline headers,您当前的表达式不匹配。另外,我认为你的正则表达式不允许所有允许的地址字符。
使用procmail的^TO_
语法变体可以让您更自由地匹配多行地址模式。例如:
header.scan( /^Delivered-To:(.*[^-a-zA-Z0-9_.])?/im ).flatten.map(&:strip)
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"]