
README   Mail::Box


The Mail::Box folder is a modern mail-folder manager -- at least on
the moment of this writing ;)  It is written to replace Mail::Folder,
although it interface is different.

The most important manual-pages are Mail::Box::Manager, Mail::Box,
and Mail::Box::Message.  They explain parts of the features in
more detail than this document.


===== Status

Although the implementation of Mail::Box is young, it has already
a large number of features.

See the file STATUS to see what has been tested and what isn't.
Version 1.300 contained 300 tests, but that is certainly not
sufficient call the module `well tested'.

===== Features

= AUTOLOAD messages.

Everyone who has used MIME::Entity will agree that the module is
nice and structured but slow: detailed parsing of e-mail messages
by MIME::Entity is twice as slow as the general message-parsing
of Mail::Internet (where it is based on).

The Mail::Box modules are trying to keep messages stored in the
mailbox file(s) for as long as possible.  Only if the user of a
folder really needs the content of a message, that message is
read from file and parsed.

Demand- or delayed-parsing of messages is implemented using the
standard AUTOLOAD mechanism, which means that it is not visible to
the user of the folder!  This mechanism also reduces the memory
foot-print of the program enormously.

A few (or all) header-lines are available, even when a message is
not parsed.  For instance the `Subject'-line is taken, because it
is nearly always needed.  These are taken to try to avoid triggering
autoloading of the whole message for only a single header-line.

Even so: when you write a folder, after reading through it, unmodified
messages are not printed from memory, but copied from the old-folder
into a new one on a byt-by-byte basis.  There will be no change, even
when the whole message got parsed.

= Support for various folder-types

Currently supported:

* Mbox folders, see Mail::Box::Mbox
  One file per folder, so many messages in each file.

* MH folders, see Mail::Box::MH
  One directory per folder, each message in a seperate file.

See STATUS for my wishlist.

= Support for message thread-discovery

A very basic detection of message threads is implemented.  On the
moment, only the In-Reply-To and the References fields are taken
into account.  This could be optimized, for instance by looking
at the subject.  Read more in Mail::Box::Threads.

= Various kinds of locking

There are three kinds of locking:
* Locking via a .lock (dotlock) file.
* Locking using flock
* Locking via a .lock (dotlock) file which is NFS-safe.
Read more in Mail::Box::Locker.

= Managing folders

A special folder manager was designed to keep track on opened
folders.  This is the main object (read its manual-page
Mail::Box::Manager before trying anything else).

= Tied access

If you like, you can tie a folder to an array, and fool around
with that one.  Read Mail::Box::Tie.


===== Differences with Mail::Folder

The popular Mail::Folder package is around for many years.  It is
written to use Mail::Internet, instead of the more powerful
MIME::Entity messages which Mail::Box uses.

Mail::Folder does not support discussion-thread detection, nor
autoloading of message data.  Therefore, it is much slower in
accessing the folders.

An other large difference, is that the object-structure in Mail::Folder
are less clear than in Mail::Box.  The supported mail-box types are
seperately implemented, and share less code than they could.  The
folders manage themselves instead of a seperate folder-manager object.

======

Author: Mark Overmeer
        mark@overmeer.net
