=encoding utf8

=head1 NAME

Mail::Box::Dir::Message - one message in a directory organized folder

=head1 INHERITANCE

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

 Mail::Box::Dir::Message is extended by
   Mail::Box::MH::Message
   Mail::Box::Maildir::Message

=head1 SYNOPSIS

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

=head1 DESCRIPTION

A C<Mail::Box::Dir::Message> is a base class for one message in a
directory organized folder; each message is stored in a separate file.
There are no objects of type C<Mail::Box::Dir::Message>, only extensions
are allowed to be created.

At the moment, three of these extended message types are implemented:

=over 4

=item * L<Mail::Box::MH::Message|Mail::Box::MH::Message>

which represents one message in a L<Mail::Box::MH|Mail::Box::MH> folder.  MH folders are
very, very simple.... and hence not sophisticated nor fast.

=item * L<Mail::Box::Maildir::Message|Mail::Box::Maildir::Message>

which represents one message in a L<Mail::Box::Maildir|Mail::Box::Maildir> folder.  Flags are
kept in the message's filename.  It is stateless, so you will never loose
a message.

=item * Mail::Box::Netzwert::Message

which represents one message in a Mail::Box::Netzwert folder.  As advantage,
it stores pre-parsed information in the message file.  As disadvantage: the
code is not GPLed (yet).

=back

Extends L<"DESCRIPTION" in Mail::Box::Message|Mail::Box::Message/"DESCRIPTION">.

=head1 METHODS

Extends L<"METHODS" in Mail::Box::Message|Mail::Box::Message/"METHODS">.

=head2 Constructors

Extends L<"Constructors" in Mail::Box::Message|Mail::Box::Message/"Constructors">.

=over 4

=item $obj-E<gt>B<clone>(%options)

Inherited, see L<Mail::Message/"Constructors">

=item $class-E<gt>B<new>(%options)

Create a messages in a directory organized folder.
Improves base, see L<Mail::Reporter/"Constructors">

 -Option    --Defined in        --Default
  body        Mail::Message       undef
  body_type   Mail::Box::Message  <from folder>
  deleted     Mail::Message       false
  field_type  Mail::Message       undef
  filename                        undef
  fix_header                      false
  folder      Mail::Box::Message  <required>
  head        Mail::Message       undef
  head_type   Mail::Message       Mail::Message::Head::Complete
  labels      Mail::Message       +{}
  messageId   Mail::Message       undef
  modified    Mail::Message       false
  size        Mail::Box::Message  undef
  trusted     Mail::Message       false

=over 2

=item body => $object

=item body_type => CODE|$class

=item deleted => BOOLEAN

=item field_type => $class

=item filename => $file

The C<$file> where the message is stored in.

=item fix_header => BOOLEAN

See L<Mail::Box::new(fix_headers)|Mail::Box/"Constructors">.

=item folder => $folder

=item head => $object

=item head_type => $class

=item labels => \@pairs|\%settings

=item messageId => $id

=item modified => BOOLEAN

=item size => $bytes

=item trusted => BOOLEAN

=back

=back

=head2 Attributes

Extends L<"Attributes" in Mail::Box::Message|Mail::Box::Message/"Attributes">.

=over 4

=item $obj-E<gt>B<filename>( [$filename] )

Returns the name of the file in which this message is actually stored.  This
will return C<undef> when the message is not stored in a file.

=item $obj-E<gt>B<fixHeader>()

Returns C<true> when the folder is in fixing mode.

=item $obj-E<gt>B<folder>( [$folder] )

Inherited, see L<Mail::Box::Message/"Attributes">

=item $obj-E<gt>B<seqnr>( [$integer] )

Inherited, see L<Mail::Box::Message/"Attributes">

=back

=head2 Constructing a message

Extends L<"Constructing a message" in Mail::Box::Message|Mail::Box::Message/"Constructing a message">.

=over 4

=item $obj-E<gt>B<bounce>( [<$rg_object|%options>] )

Inherited, see L<Mail::Message::Construct::Bounce/"Constructing a message">

=item $class-E<gt>B<build>( [$message|$part|$body], @fields, %options )

Inherited, see L<Mail::Message::Construct::Build/"Constructing a message">

=item $class-E<gt>B<buildFromBody>($body, [$head], $headers)

Inherited, see L<Mail::Message::Construct::Build/"Constructing a message">

=item $obj-E<gt>B<forward>(%options)

Inherited, see L<Mail::Message::Construct::Forward/"Constructing a message">

=item $obj-E<gt>B<forwardAttach>(%options)

Inherited, see L<Mail::Message::Construct::Forward/"Constructing a message">

=item $obj-E<gt>B<forwardEncapsulate>(%options)

Inherited, see L<Mail::Message::Construct::Forward/"Constructing a message">

=item $obj-E<gt>B<forwardInline>(%options)

Inherited, see L<Mail::Message::Construct::Forward/"Constructing a message">

=item $obj-E<gt>B<forwardNo>(%options)

Inherited, see L<Mail::Message::Construct::Forward/"Constructing a message">

=item $obj-E<gt>B<forwardPostlude>()

Inherited, see L<Mail::Message::Construct::Forward/"Constructing a message">

=item $obj-E<gt>B<forwardPrelude>()

Inherited, see L<Mail::Message::Construct::Forward/"Constructing a message">

=item $obj-E<gt>B<forwardSubject>(STRING)

Inherited, see L<Mail::Message::Construct::Forward/"Constructing a message">

=item $class-E<gt>B<read>($fh|$text|\$text|\@lines, %options)

Inherited, see L<Mail::Message::Construct::Read/"Constructing a message">

=item $obj-E<gt>B<rebuild>(%options)

Inherited, see L<Mail::Message::Construct::Rebuild/"Constructing a message">

=item $obj-E<gt>B<reply>(%options)

Inherited, see L<Mail::Message::Construct::Reply/"Constructing a message">

=item $obj-E<gt>B<replyPrelude>( [STRING|$field|$address|\@addrs|\@fields] )

Inherited, see L<Mail::Message::Construct::Reply/"Constructing a message">

=item $any-E<gt>B<replySubject>(STRING)

Inherited, see L<Mail::Message::Construct::Reply/"Constructing a message">

=back

=head2 The message

Extends L<"The message" in Mail::Box::Message|Mail::Box::Message/"The message">.

=over 4

=item $obj-E<gt>B<container>()

Inherited, see L<Mail::Message/"The message">

=item $obj-E<gt>B<copyTo>($folder, %options)

Inherited, see L<Mail::Box::Message/"The message">

=item $obj-E<gt>B<endsOnNewline>()

Inherited, see L<Mail::Message/"The message">

=item $obj-E<gt>B<isDummy>()

Inherited, see L<Mail::Message/"The message">

=item $obj-E<gt>B<isPart>()

Inherited, see L<Mail::Message/"The message">

=item $obj-E<gt>B<messageId>()

Inherited, see L<Mail::Message/"The message">

=item $obj-E<gt>B<moveTo>($folder, %options)

Inherited, see L<Mail::Box::Message/"The message">

=item $obj-E<gt>B<partNumber>()

Inherited, see L<Mail::Message/"The message">

=item $obj-E<gt>B<print>( [$fh] )

Inherited, see L<Mail::Message/"The message">

=item $obj-E<gt>B<send>( [$mailer], %options )

Inherited, see L<Mail::Message/"The message">

=item $obj-E<gt>B<size>()

Inherited, see L<Mail::Message/"The message">

=item $obj-E<gt>B<toplevel>()

Inherited, see L<Mail::Message/"The message">

=item $obj-E<gt>B<write>( [$fh] )

Inherited, see L<Mail::Message/"The message">

=back

=head2 The header

Extends L<"The header" in Mail::Box::Message|Mail::Box::Message/"The header">.

=over 4

=item $obj-E<gt>B<bcc>()

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<cc>()

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<date>()

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<destinations>()

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<from>()

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<get>($fieldname)

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<guessTimestamp>()

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<head>( [$head] )

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<nrLines>()

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<sender>()

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<study>($fieldname)

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<subject>()

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<timestamp>()

Inherited, see L<Mail::Message/"The header">

=item $obj-E<gt>B<to>()

Inherited, see L<Mail::Message/"The header">

=back

=head2 The body

Extends L<"The body" in Mail::Box::Message|Mail::Box::Message/"The body">.

=over 4

=item $obj-E<gt>B<body>( [$body] )

Inherited, see L<Mail::Message/"The body">

=item $obj-E<gt>B<contentType>()

Inherited, see L<Mail::Message/"The body">

=item $obj-E<gt>B<decoded>(%options)

Inherited, see L<Mail::Message/"The body">

=item $obj-E<gt>B<encode>(%options)

Inherited, see L<Mail::Message/"The body">

=item $obj-E<gt>B<isMultipart>()

Inherited, see L<Mail::Message/"The body">

=item $obj-E<gt>B<isNested>()

Inherited, see L<Mail::Message/"The body">

=item $obj-E<gt>B<parts>( [<'ALL'|'ACTIVE'|'DELETED'|'RECURSE'|$filter>] )

Inherited, see L<Mail::Message/"The body">

=back

=head2 Flags

Extends L<"Flags" in Mail::Box::Message|Mail::Box::Message/"Flags">.

=over 4

=item $obj-E<gt>B<delete>()

Inherited, see L<Mail::Message/"Flags">

=item $obj-E<gt>B<deleted>( [BOOLEAN] )

Inherited, see L<Mail::Message/"Flags">

=item $obj-E<gt>B<isDeleted>()

Inherited, see L<Mail::Message/"Flags">

=item $obj-E<gt>B<isModified>()

Inherited, see L<Mail::Message/"Flags">

=item $obj-E<gt>B<label>($label|PAIRS)

Inherited, see L<Mail::Message/"Flags">

=item $obj-E<gt>B<labels>()

Inherited, see L<Mail::Message/"Flags">

=item $obj-E<gt>B<labelsToStatus>()

Inherited, see L<Mail::Message/"Flags">

=item $obj-E<gt>B<modified>( [BOOLEAN] )

Inherited, see L<Mail::Message/"Flags">

=item $obj-E<gt>B<statusToLabels>()

Inherited, see L<Mail::Message/"Flags">

=back

=head2 The whole message as text

Extends L<"The whole message as text" in Mail::Box::Message|Mail::Box::Message/"The whole message as text">.

=over 4

=item $obj-E<gt>B<file>()

Inherited, see L<Mail::Message::Construct::Text/"The whole message as text">

=item $obj-E<gt>B<lines>()

Inherited, see L<Mail::Message::Construct::Text/"The whole message as text">

=item $obj-E<gt>B<printStructure>( [$fh|undef],[$indent] )

Inherited, see L<Mail::Message::Construct::Text/"The whole message as text">

=item $obj-E<gt>B<string>()

Inherited, see L<Mail::Message::Construct::Text/"The whole message as text">

=back

=head2 Internals

Extends L<"Internals" in Mail::Box::Message|Mail::Box::Message/"Internals">.

=over 4

=item $obj-E<gt>B<clonedFrom>()

Inherited, see L<Mail::Message/"Internals">

=item $class-E<gt>B<coerce>($message, %options)

Inherited, see L<Mail::Message/"Internals">

=item $obj-E<gt>B<create>($filename)

Create the message in the specified file.  If the message already has
a filename and is not modified, then a move is tried.  Otherwise the
message is printed to the file.  If the C<$filename> already exists for
this message, nothing is done.  In any case, the new C<$filename> is set
as well.

=item $obj-E<gt>B<diskDelete>()

Inherited, see L<Mail::Box::Message/"Internals">

=item $obj-E<gt>B<isDelayed>()

Inherited, see L<Mail::Message/"Internals">

=item $obj-E<gt>B<loadBody>()

This method is called by the autoloader when the body of the message
is needed.

=item $obj-E<gt>B<loadHead>()

This method is called by the autoloader when the header of the message
is needed.

=item $obj-E<gt>B<parser>()

Create and return a parser for this message (-file).

=item $obj-E<gt>B<readBody>( $parser, $head, [$bodytype] )

Inherited, see L<Mail::Box::Message/"Internals">

=item $obj-E<gt>B<readFromParser>( $parser, [$bodytype] )

Inherited, see L<Mail::Message/"Internals">

=item $obj-E<gt>B<readHead>( $parser, [$class] )

Inherited, see L<Mail::Message/"Internals">

=item $obj-E<gt>B<recursiveRebuildPart>($part, %options)

Inherited, see L<Mail::Message::Construct::Rebuild/"Internals">

=item $obj-E<gt>B<storeBody>($body)

Inherited, see L<Mail::Message/"Internals">

=item $obj-E<gt>B<takeMessageId>( [STRING] )

Inherited, see L<Mail::Message/"Internals">

=back

=head2 Error handling

Extends L<"Error handling" in Mail::Box::Message|Mail::Box::Message/"Error handling">.

=over 4

=item $obj-E<gt>B<AUTOLOAD>()

Inherited, see L<Mail::Message::Construct/"METHODS">

=item $obj-E<gt>B<notImplemented>()

Inherited, see L<Mail::Reporter/"Error handling">

=item $any-E<gt>B<shortSize>( [$value] )

Inherited, see L<Mail::Message/"Error handling">

=item $obj-E<gt>B<shortString>()

Inherited, see L<Mail::Message/"Error handling">

=back

=head2 Cleanup

Extends L<"Cleanup" in Mail::Box::Message|Mail::Box::Message/"Cleanup">.

=over 4

=item $obj-E<gt>B<DESTROY>()

Inherited, see L<Mail::Reporter/"Cleanup">

=item $obj-E<gt>B<destruct>()

Inherited, see L<Mail::Box::Message/"Cleanup">

=back

=head1 DETAILS

Extends L<"DETAILS" in Mail::Box::Message|Mail::Box::Message/"DETAILS">.

=head1 DIAGNOSTICS

=over 4

=item Error: Cannot include forward source as $kind.

Unknown alternative for the L<forward(include)|Mail::Message::Construct::Forward/"Constructing a message">.  Valid choices are
C<NO>, C<INLINE>, C<ATTACH>, and C<ENCAPSULATE>.
Cast by C<forward()>

=item Error: No default mailer found to send message.

The message L<send()|Mail::Message/"The message"> mechanism had not enough information to automatically
find a mail transfer agent to sent this message.  Specify a mailer
explicitly using the C<via> options.
Cast by C<send()>

=item Error: cannot coerce a $type object into a $me object.

Cast by C<coerce()>

=item Error: cannot include reply source as $kind.

Unknown alternative for the C<include> option of L<reply()|Mail::Message::Construct::Reply/"Constructing a message">.  Valid
choices are C<NO>, C<INLINE>, and C<ATTACH>.
Cast by C<reply()>

=item Error: cannot read message from a $source}.

Cast by C<read()>

=item Fault: cannot write message to $file: $!

When a modified or new message is written to disk, it is first written
to a temporary file in the folder directory.  For some reason, it is
impossible to create this file.
Cast by C<create()>

=item Error: class $package does not implement method $method.

Fatal error: the specific C<$package> (or one of its superclasses) does not
implement this method where it should. This message means that some other
related classes do implement this method however the class at hand does
not.  Probably you should investigate this and probably inform the author
of the package.
Cast by C<notImplemented()>

=item Error: coercion starts with some object, not '$type'.

Cast by C<coerce()>

=item Fault: failed to rename file $from to $to: $!

When a modified or new message is written to disk, it is first written
to a temporary file in the folder directory.  Then, the new file is
moved to replace the existing file.  Apparently, the latter fails.
Cast by C<create()>

=item Error: method bounce requires To, Cc, or Bcc.

The message L<bounce()|Mail::Message::Construct::Bounce/"Constructing a message"> method forwards a received message off to someone
else without modification; you must specified it's new destination.
If you have the urge not to specify any destination, you probably
are looking for L<reply()|Mail::Message::Construct::Reply/"Constructing a message">. When you wish to modify the content, use
L<forward()|Mail::Message::Construct::Forward/"Constructing a message">.
Cast by C<bounce()>

=item Error: method forwardAttach requires a preamble.

Cast by C<forwardAttach()>

=item Error: method forwardEncapsulate requires a preamble.

Cast by C<forwardEncapsulate()>

=item Error: method forwardNo requires a To.

Cast by C<forwardNo()>

=item Error: method forwardNo requires a body.

Cast by C<forwardNo()>

=item Error: no rebuild rule $name defined.

Cast by C<rebuild()>

=item Error: only build() Mail::Message's; they are not in a folder yet.

You may wish to construct a message to be stored in a some kind
of folder, but you need to do that in two steps.  First, create a
normal L<Mail::Message|Mail::Message>, and then add it to the folder.  During this
L<Mail::Box::addMessage()|Mail::Box/"The folder"> process, the message will get L<coerce()|Mail::Message/"Internals">-d
into the right message type, adding storage information and the like.
Cast by C<build()>

=item Error: please install Email::Simple.

Cast by C<coerce()>

=item Error: please install MIME::Entity.

Cast by C<coerce()>

=item Error: please install Mail::Internet.

Cast by C<coerce()>

=item Error: select parts via '$what'?

Cast by C<parts()>

=item Warning: skipped unknown key '$key' in build.

Cast by C<build()>

=item Error: unable to read delayed body for message $msgid.

For some reason, the header of the message could be read, but the body
cannot.  Probably the file has disappeared or the permissions were
changed during the progress of the program.
Cast by C<loadBody()>

=item Error: unable to read delayed head for message $msgid.

L<Mail::Box|Mail::Box> tries to be I<lazy> with respect to parsing messages.  When a
directory organized folder is opened, only the filenames of messages are
collected.  At first use, the messages are read from their file.  Apperently,
a message is used for the first time here, but has disappeared or is
unreadible for some other reason.
Cast by C<loadBody()>

=back

=head1 SEE ALSO

This module is part of Mail-Box version 4.01,
built on December 13, 2025. Website: F<http://perl.overmeer.net/CPAN/>

=head1 LICENSE

For contributors see file ChangeLog.

This software is copyright (c) 2001-2025 by Mark Overmeer.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

