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/