Class RMail::Mailbox::MBoxReader
In: lib/rmail/mailbox/mboxreader.rb
Parent: RMail::Parser::PushbackReader

Class that can parse Unix mbox style mailboxes. These mailboxes separate individual messages with a line beginning with the string "From ".

Typical usage:

 File.open("file.mbox") { |file|
   RMail::Mailbox::MBoxReader.new(file).each_message { |input|
     message = RMail::Parser.read(input)
     # do something with the message

Or see RMail::Mailbox.parse_mbox for a more convenient interface.

each_message    eof    new    next    read_chunk   
Public Class methods
new(input, line_separator = $/)

Creates a new MBoxReader that reads from `input' with lines that end with `line_separator'.

`input' can either be an IO source (an object that responds to the "read" method in the same way as a standard IO object) or a String.

`line_separator' defaults to $/, and useful values are probably limited to "\n" (Unix) and "\r\n" (DOS/Windows).

Public Instance methods

Reads some data from the current message and returns it. The `size' argument is just a suggestion, and the returned string can be larger or smaller. When `size' is nil, then the entire message is returned.

Once all data from the current message has been read, #read returns nil and #next must be called to begin reading from the next message. You can use #eof to tell if there is any more data to be read from the input source.


Advances to the next message to be read. Call this after #read returns nil.

Note: Once #read returns nil, you can call #eof before or after calling #next to tell if there actually is a next message to read.


Returns true if the next call to read_chunk will return nil.

each_message() {|self| ...}

Yield self until eof, calling next after each yield.

This method makes it simple to read messages successively out of the mailbox. See the class description for a code example.