如何解析Ruby中的邮箱文件?

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接受这样的文件名.

tad*_*man 7

好消息是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不是一个选项,那么这就是你必须要做的.