ruby - 如何在 Ruby 中解析邮箱文件?

标签 ruby parsing email mbox

Ruby gem rmail 具有解析本地磁盘上的邮箱文件的方法。不幸的是这个 gem 已经坏了(在 Ruby 2.0.0 中)。它可能无法修复,因为人们正在迁移到 gem mail

Gem mail 有方法 Mail.read('filename.txt'),但它只解析邮箱中的第一条消息。

那个 gem 和内置的 Net::IMAP 已经在网上充斥着通过 imap 访问邮箱的教程。

那么,还有没有办法在没有 imap 的情况下解析普通的旧文件? 作为我小组中唯一的 ruby 爱好者,我不想诉诸 http://docs.python.org/2/library/mailbox.html 让自己难堪。 .

或者,更糟糕的是,PHP 的 imap_open('/var/mail/www-data', ...) —— 如果只有 Net::IMAP.new接受这样的文件名。

最佳答案

好消息是 Mbox format真的很简单,虽然它的简单性是它最终被替换的原因。解析大型邮箱文件以提取单个消息的效率不是特别高。

如果您可以将邮箱文件拆分成单独的字符串,则可以将这些字符串传递给 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

关键是每条消息都以 "From " 开头,后面的空格是关键。 header 将被定义为 From: 并且任何以 ">From" 开头的行都将被视为 实际上是 "From"。像这样的事情使得这种编码方法确实不合适,但如果 Maildir 不是一个选项,这就是你必须要做的。

关于ruby - 如何在 Ruby 中解析邮箱文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16363222/

相关文章:

perl - Email::发件人如何在 Perl 中附加文件?

javascript - 使用 gmaps4rails 显示虚线

Ruby 线程使用不同的参数调用相同的函数

php - 在共享主机上使用 Laravel 发送邮件

json - 解析 JSON 时 Unicode 字符不正确

javascript - 用javascript解析json结构

php - 邮件中的 html 未显示。内联图像确实

ruby-on-rails - 使用#update_all 更新时间戳

ruby-on-rails - 如何检查哈希数组的唯一性

c# - 使用已知但未给定的时区解析 DateTime