Cam*_*une 3 ruby email parsing mbox
Ruby gem rmail具有解析本地磁盘上的邮箱文件的方法.不幸的是,这个宝石已经崩溃了(在Ruby 2.0.0中).它可能无法修复,因为人们正在迁移到gem mail.
Gem mail有方法Mail.read('filename.txt'),但只解析邮箱中的第一条消息.
那个宝石和内置Net::IMAP的网络已经充斥着通过imap访问邮箱的教程.
那么,有没有办法解析一个普通的旧文件,没有imap?作为我小组中唯一的rubyist,我宁愿不通过诉诸http://docs.python.org/2/library/mailbox.html来使自己难堪.
或者更糟糕的是,PHP是imap_open('/var/mail/www-data', ...)- 如果只Net::IMAP.new接受这样的文件名.
好消息是Mbox格式真的很简单,虽然它的简单性是它最终被替换的原因.解析大型邮箱文件以提取单个邮件并不是特别有效.
如果可以将邮箱文件拆分为单独的字符串,则可以将这些字符串传递给Mail库进行解析.
一个示例出发点:
def parse_message(message)
Mail.new(message)
do_other_stuff!
end
message = nil
while (line = STDIN.gets)
if (line.match(/\AFrom /))
parse_message(message) if (message)
message = ''
else
message << line.sub(/^\>From/, 'From')
end
end
Run Code Online (Sandbox Code Playgroud)
关键是每条消息都以"From "密钥后面的空格开始.标题将被定义为From:,任何以开头的行将">From"被视为实际存在"From".这样的事情使得这种编码方法真的不合适,但如果Maildir不是一个选项,那么这就是你必须要做的.