
=head1 NAME


Mail::Box::Maildir::Message - one message in a Maildir folder

=head1 CLASS INHERITANCE

Mail::Box::Maildir::Message
   is a Mail::Box::Dir::Message
   is a Mail::Box::Message
   is a Mail::Message
   is a Mail::Reporter

=head1 SYNOPSIS


 my $folder = new Mail::Box::Maildir ...
 my $message = $folder->message(10);

=head1 DESCRIPTION


A Mail::Box::Maildir::Message represents one message in an
Maildir-folder. Each message is stored in a separate file.

=head1 METHODS

=head2 Initiation

=over 4

=item B<filename> [FILENAME] X<filename>

Returns the current filename for this message.  If the FILENAME argument
is specified, a new filename will be set.  For maildir messages this
means that modifications are immediately performed: there will be
a rename (move) from the old name to the new name.  Labels may change
within in the message object as well.

=item B<new> OPTIONS X<new>

 OPTION               DEFAULT
 body                 undef
 body_type            <from folder>
 deleted              <false>
 field_type           undef
 filename             undef
 folder               <required>
 head                 undef
 head_type            'Mail::Message::Head::Complete'
 log                  'WARNINGS'
 messageId            undef
 modified             <false>
 size                 undef
 trace                'WARNINGS'
 trusted              <false>

=over 4

=item B<body> =E<gt> OBJECT

See Mail::Message::new(body)

=item B<body_type> =E<gt> CODE|CLASS

See Mail::Box::Message::new(body_type)

=item B<deleted> =E<gt> BOOLEAN

See Mail::Box::Message::new(deleted)

=item B<field_type> =E<gt> CLASS

See Mail::Message::new(field_type)

=item B<filename> =E<gt> FILENAME

See Mail::Box::Dir::Message::new(filename)

=item B<folder> =E<gt> FOLDER

See Mail::Box::Message::new(folder)

=item B<head> =E<gt> OBJECT

See Mail::Message::new(head)

=item B<head_type> =E<gt> CLASS

See Mail::Message::new(head_type)

=item B<log> =E<gt> LEVEL

See Mail::Reporter::new(log)

=item B<messageId> =E<gt> STRING

See Mail::Message::new(messageId)

=item B<modified> =E<gt> BOOLEAN

See Mail::Message::new(modified)

=item B<size> =E<gt> INTEGER

See Mail::Box::Message::new(size)

=item B<trace> =E<gt> LEVEL

See Mail::Reporter::new(trace)

=item B<trusted> =E<gt> BOOLEAN

See Mail::Message::new(trusted)

=back

=back

=head2 Constructing a Message

=over 4

=item B<bounce> [RG-OBJECT|OPTIONS]

See Mail::Message::Construct::bounce()

=item B<build> [MESSAGE|BODY], CONTENT

See Mail::Message::Construct::build()

=item B<buildFromBody> BODY, HEADERS

See Mail::Message::Construct::buildFromBody()

=item B<coerce> MESSAGE

See Mail::Box::Message::coerce()

=item B<forward> OPTIONS

See Mail::Message::Construct::forward()

=item B<forwardPostlude> 

See Mail::Message::Construct::forwardPostlude()

=item B<forwardPrelude> 

See Mail::Message::Construct::forwardPrelude()

=item B<forwardSubject> STRING

See Mail::Message::Construct::forwardSubject()

=item B<read> FILEHANDLE|SCALAR|REF-SCALAR|ARRAY-OF-LINES, OPTIONS

See Mail::Message::Construct::read()

=item B<reply> OPTIONS

See Mail::Message::Construct::reply()

=item B<replyPrelude> [STRING|FIELD|ADDRESS]

See Mail::Message::Construct::replyPrelude()

=item B<replySubject> STRING

See Mail::Message::Construct::replySubject()

=back

=head2 The Message

=over 4

=item B<clone> 

See Mail::Message::clone()

=item B<copyTo> FOLDER

See Mail::Box::Message::copyTo()

=item B<folder> [FOLDER]

See Mail::Box::Message::folder()

=item B<isDummy> 

See Mail::Message::isDummy()

=item B<isPart> 

See Mail::Message::isPart()

=item B<messageId> 

See Mail::Message::messageId()

=item B<modified> [BOOLEAN]

See Mail::Message::modified()

=item B<moveTo> FOLDER

See Mail::Box::Message::moveTo()

=item B<parent> 

See Mail::Message::parent()

=item B<print> [FILEHANDLE]

See Mail::Message::print()

=item B<send> [MAILER], OPTIONS

See Mail::Message::send()

=item B<seqnr> [INTEGER]

See Mail::Box::Message::seqnr()

=item B<size> 

See Mail::Message::size()

=item B<toplevel> 

See Mail::Message::toplevel()

=back

=head2 The Header

=over 4

=item B<head> [HEAD]

See Mail::Message::head()

=back

=head2 Header Shortcuts

=over 4

=item B<bcc> 

See Mail::Message::bcc()

=item B<cc> 

See Mail::Message::cc()

=item B<date> 

See Mail::Message::date()

=item B<destinations> 

See Mail::Message::destinations()

=item B<from> 

See Mail::Message::from()

=item B<get> FIELD

See Mail::Message::get()

=item B<guessTimestamp>  X<guessTimestamp>

The filename of a Mail::Box::Maildir::Message contains a timestamp.  This
is a wild guess about the actual time of sending of the message: it is the
time of receipt which may be seconds to hours off.  But is still a good
guess...  When the message header is not parsed, then this date is used.

=item B<nrLines> 

See Mail::Message::nrLines()

=item B<sender> 

See Mail::Message::sender()

=item B<subject> 

See Mail::Message::subject()

=item B<timestamp> 

See Mail::Message::timestamp()

=item B<to> 

See Mail::Message::to()

=back

=head2 The Body

=over 4

=item B<body> [BODY]

See Mail::Message::body()

=item B<decoded> OPTIONS

See Mail::Message::decoded()

=item B<encode> OPTIONS

See Mail::Message::encode()

=item B<isMultipart> 

See Mail::Message::isMultipart()

=item B<parts> ['ALL'|'ACTIVE'|'DELETED'|'RECURSE'|FILTER]

See Mail::Message::parts()

=back

=head2 Access to the Message

=over 4

=item B<file> 

See Mail::Message::Construct::file()

=item B<lines> 

See Mail::Message::Construct::lines()

=item B<string> 

See Mail::Message::Construct::string()

=back

=head2 Labels

=over 4

=item B<delete> 

See Mail::Box::Message::delete()

=item B<deleted> [BOOLEAN]

See Mail::Box::Message::deleted()

=item B<label> LABEL [,VALUE [LABEL, VALUE] ]

See Mail::Message::label()

=item B<labels> 

See Mail::Message::labels()

=back

=head2 Reading and Writing [internals]

=over 4

=item B<DESTROY> 

See Mail::Message::DESTROY()

=item B<accept>  X<accept>

Accept a message for the folder.  This will move it from the C<new> or
C<tmp> sub-directories into the C<cur> sub-directory.  When you accept an
already accepted message, nothing will happen.

=item B<create> FILENAME

See Mail::Box::Dir::Message::create()

=item B<diskDelete> 

See Mail::Box::Message::diskDelete()

=item B<isDelayed> 

See Mail::Message::isDelayed()

=item B<labelsToFilename>  X<labelsToFilename>

When the labels on a message change, this may implicate a change in
the message's filename.  The change will take place immediately.

=item B<labelsToStatus> 

See Mail::Message::labelsToStatus()

=item B<loadBody> 

See Mail::Box::Dir::Message::loadBody()

=item B<loadHead> 

See Mail::Box::Dir::Message::loadHead()

=item B<parser> 

See Mail::Box::Dir::Message::parser()

=item B<readBody> PARSER, HEAD [, BODYTYPE]

See Mail::Box::Message::readBody()

=item B<readFromParser> PARSER, [BODYTYPE]

See Mail::Message::readFromParser()

=item B<readHead> PARSER [,CLASS]

See Mail::Message::readHead()

=item B<statusToLabels> 

See Mail::Message::statusToLabels()

=item B<storeBody> BODY

See Mail::Message::storeBody()

=item B<takeMessageId> [STRING]

See Mail::Message::takeMessageId()

=back

=head2 Logging and Tracing

=over 4

=item B<defaultTrace> [LEVEL, [LEVEL]

See Mail::Reporter::defaultTrace()

=item B<errors> 

See Mail::Reporter::errors()

=item B<log> [LEVEL [,STRINGS]]

See Mail::Reporter::log()

=item B<printStructure> [FILEHANDLE][, INDENT]

See Mail::Message::Construct::printStructure()

=item B<report> [LEVEL]

See Mail::Reporter::report()

=item B<reportAll> [LEVEL]

See Mail::Reporter::reportAll()

=item B<shortString> 

See Mail::Box::Message::shortString()

=item B<trace> [LEVEL]

See Mail::Reporter::trace()

=item B<warnings> 

See Mail::Reporter::warnings()

=back

=head2 Other Methods

=over 4

=item B<AUTOLOAD> 

See Mail::Reporter::AUTOLOAD()

=item B<inGlobalDestruction> 

See Mail::Reporter::inGlobalDestruction()

=item B<logPriority> LEVEL

See Mail::Reporter::logPriority()

=item B<logSettings> 

See Mail::Reporter::logSettings()

=item B<notImplemented> 

See Mail::Reporter::notImplemented()

=back

=head1 SEE ALSO

A good start to read is Mail::Box-Overview.
More documentation and a mailinglist are available from the project's
website at L<http://perl.overmeer.net/mailbox/>.

=head1 AUTHOR

Written by Mark Overmeer (L<mark@overmeer.net|mailto:mark@overmeer.net>)
with the help of many.  See the ChangeLog for details.

=head1 VERSION

This code is beta, version 2.031.

Copyright (c) 2001-2002 by the authors. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
