Mail::Box-Overview - objects used by Mail::Box |
Mail::Box-Overview - objects used by Mail::Box
The MailBox package is a suite of classes for accessing and managing
email folders in a folder-independent manner. This package is an
alternative to the Mail::Folder
and MIME::*
packages. It abstracts the
details of messages, message storage, and message threads, while
providing better performance than older mail packages. It is meant to
provide an object-oriented toolset for all kinds of e-mail applications,
under which Mail User-Agents (MUA) and mail filtering programs.
This package is modular --parts of it can be used independently of the rest. For example, the Mail::Box::Manager can automatically determine that a folder is in Mbox format and return an object of the Mail::Box::Mbox class, or the user program can bypass the manager and create Mail::Box::Mbox objects directly. Similarly, if the user program is only manipulating a single message, a Mail::Message.
The Mail::Box package has special features to help MUA's access folder data quickly in random order. You will not really benefit (neither slower) if you need the full folder sequentially.
This code is beta, which means that there are no serious applications
written with it yet. Please inform the author when you have, so this
module can be marked as stable. Read the STATUS file enclosed in the package
for more details. You may also want to have a look at the sample
scripts in the scripts
directory.
Mail::Box::Manager objects play a central role in any program which is built with MailBox. Each program will create one manager, and then open folders via that manager. Besides folders, the manager can also be used to discover message threads: sequences of messages with their follow-ups.
<has-a> Mail::Box::Mbox Mail::Box::Manager <---------* (Mail::Box::MH) ^ : (Mail::Box::Maildir) | (maintains) (Mail::Box::POP3) | : | : `---------------------* Mail::Box::Thread::Manager (<has-a>)
Each folder maintains a list of messages. Much effort is made to hide differences between folder types and kinds of messages. Your program can be used for MBOX, MH, Maildir, and POP3 folders with no change at all (as long as you stick to the rules).
Mail::Box::Mbox <-----------* Mail::Box::Mbox::Message ^ <has-a> ^ | <isa> | <isa> | | Mail::Box ............. Mail::Box::Message ^ | <isa> | Mail::Message / \ <has-a> / \ Mail::Message Mail::Message ::Body ::Head
The situation for MH and Maildir folders is a little more complicated, because they have an extra intermediate level of abstraction: Mail::Box::Dir. The POP3 folder has an intermediate Mail::Box::Net.
In the future, when more Mbox-like folder types get implemented, there may be a Mail::Box::File level too. The following is also true for the mail boxes
MB::MH::Message MB::POP3::Message \ MB::Maildir::Message / \ / / \ / MB::Mbox::Message / \ / | / MB::Dir::Message | MB::Net::Message \ | / \ | / MB::Message | | Mail::Message
The mailbox manager Mail::Box::Manager encapsulates folder management issues. It maintains a set of open mail folders (mailboxes), and provides methods for opening and closing them, efficiently moving messages between folders, and efficiently appending messages to folders. It contains Mail::Box objects which may be of different types. Most folder types can be detected automatically.
The main manager also manages message-thread detector objects, and informs them when the contents of a folder have changed. This manager class is the only one you instantiate yourself: objects of all other classes will be provided by your folder manager.
You are strongly advised to use this object, but you can often do without it and open a specific folder-type directly.
The Mail::Message::Construct package is loaded when more complex tasks have to be performed on messages, like creating replies, bounces, or a forward message. These functionalities are described and implemented in the ::Construct file, but are automatically added to the Mail::Message namespace when used.
Message types which are foreign to MailBox can be used in the MailBox environment: there are some converters implemented via Mail::Message::Convert. Particularly the popular Mail::Internet and MIME::Entity are supported.
One special case of the body types is the Mail::Message::Body::Multipart, which
contains a set of Mail::Message::Part objects. These are just like
normal messages, except that they are contained in an other message.
The Mail::Message::Body::Nested body type is comparible, but contains only
one message: they are used for message/rfc822
message encodings.
When needed, the functionality of the body objects is extended with Mail::Message::Body::Construct and Mail::Message::Body::Encode. The former package implements things like concatenation, the later controls message encoding and decoding. In the current implementation this is limited to transfer encodings (implemented in the Mail::Message::TransferEnc packages). Automatic character and mime recodings are on the wish-list.
The header object has three sub-classes: the Mail::Message::Head::Complete version knows all lines for sure, Mail::Message::Head::Subset maintains an unknown subset of lines, and the Mail::Message::Head::Delayed has no lines yet but knows where to get them.
The latter two will automatically get the missing header lines from the
mailbox files when needed, and so transform into a ::Complete
header.
It is fully transparent to the user of MailBox in which shape the
header really is on the moment.
Mbox-style folders have one file containing multiple messages per folder. When folders get large, access tends to get slow.
MH-style folders are represented by a directory, where each message is stored in a separate file. The message files are sequentially numbered. It is fast to open one single message, but hard to get an overview.
This object maintains linked lists of Mail::Box::Thread::Node objects. Mail::Message::Dummy's fill-up some holes.
filename.lock
),
flock filehandle locking, and locking over NFS. Each is implemented in a
separate class. A multi-locker, using a set of lock-methods at the
same time is also available.
mail
, Mailx
, sendmail
, or
autonomously with direct SMTP. Receiving is currently only implemented
via POP3.
All classes are written to be extensible.
See the MailBox website at http://perl.overmeer.net/mailbox/ for more details.
Distribution version 2.059. Written by Mark Overmeer (mark@overmeer.net) See the ChangeLog for other contributors.
Copyright (c) 2001-2003 by the author(s). All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Mail::Box-Overview - objects used by Mail::Box |