Provided by: libmail-message-perl_3.019-1_all bug

NAME

       Mail::Box::Parser - reading and writing messages

INHERITANCE

        Mail::Box::Parser
          is a Mail::Reporter

        Mail::Box::Parser is extended by
          Mail::Box::Parser::C
          Mail::Box::Parser::Lines
          Mail::Box::Parser::Perl

SYNOPSIS

         # Not instatiatiated itself

DESCRIPTION

       The "Mail::Box::Parser" manages the parsing of folders.  Usually, you won't need to know anything about
       this module, except the options which are involved with this code.

       There are currently three implementations of this module:

       •   Mail::Box::Parser::C

           A  fast  parser  written  in  "C".   This package is released as separate module on CPAN, because the
           module distribution via CPAN can not handle XS files which are not located in the root  directory  of
           the module tree.  If a C compiler is available on your system, it will be used automatically.

       •   Mail::Box::Parser::Perl

           A slower parser when the message is in a file, like mbox, which only uses plain Perl.  This module is
           a bit slower, and does less checking and less recovery.

       •   Mail::Box::Parser::Lines

           Useful  when the message is already in memory.  When you plan to use this yourself, you probably need
           to use Mail::Message::Construct::Read.

       Extends "DESCRIPTION" in Mail::Reporter.

METHODS

       Extends "METHODS" in Mail::Reporter.

   Constructors
       Extends "Constructors" in Mail::Reporter.

       $class->new(%options)
           Create a parser object which can handle one file.  For mbox-like mailboxes, this object can  be  used
           to read a whole folder.  In case of MH-like mailboxes, each message is contained in a single file, so
           each message has its own parser object.  Improves base, see "Constructors" in Mail::Reporter

            -Option           --Defined in     --Default
             fix_header_errors                   false
             log                Mail::Reporter   'WARNINGS'
             trace              Mail::Reporter   'WARNINGS'
             trusted                             false

           fix_header_errors => BOOLEAN
             When  header  errors  are  detected, the parsing of the header will be stopped.  Other header lines
             will become part of the body of the message.  Set this flag to have the erroneous line added to the
             previous header line.

           log => LEVEL
           trace => LEVEL
           trusted => BOOLEAN
             Is the input  from  the  file  to  be  trusted,  or  does  it  require  extra  tests.   Related  to
             Mail::Box::new(trusted).

   Attributes
       Extends "Attributes" in Mail::Reporter.

       $any->defaultParserType( [$class] )
           Returns  the  parser  to  be used to parse all subsequent messages, possibly first setting the parser
           using the optional argument.  Usually, the parser is autodetected; the "C"-based parser will be  used
           when it can be, and the Perl-based parser will be used otherwise.

           The  $class  argument  allows  you  to specify a package name to force a particular parser to be used
           (such as your own custom parser). You have to "use" or "require" the package yourself before  calling
           this method with an argument. The parser must be a sub-class of "Mail::Box::Parser".

       $obj->fixHeaderErrors( [BOOLEAN] )
           If  set  to  "true",  parsing of a header will not stop on an error, but attempt to add the erroneous
           this line to previous field.  Without "BOOLEAN", the current setting is returned.

           » example:

             $folder->parser->fixHeaderErrors(1);
             my $folder = $mgr->open('folder', fix_header_errors => 1);

       $obj->logSettings()
           Inherited, see "Attributes" in Mail::Reporter

       $obj->trusted()
           Trust the source of the data: do not run additional tests.

   Parsing
       $obj->bodyAsFile( $fh [$chars, [$lines]] )
           Try to read one message-body from the file, and immediately write it to  the  specified  file-handle.
           Optionally,  the  predicted  number  of  CHARacterS  and/or $lines to be read can be supplied.  These
           values may be "undef" and may be wrong.

           The return is a list of three scalars: the location of the body (begin and end)  and  the  number  of
           lines in the body.

       $obj->bodyAsList( [$chars, [$lines]] )
           Try  to  read  one message-body from the file.  Optionally, the predicted number of CHARacterS and/or
           $lines to be read can be supplied.  These values may be "undef" and may be wrong.

           The return is a list of scalars, each containing one line (including line  terminator),  preceded  by
           two integers representing the location in the file where this body started and ended.

       $obj->bodyAsString( [$chars, [$lines]] )
           Try  to  read  one message-body from the file.  Optionally, the predicted number of CHARacterS and/or
           $lines to be read can be supplied.  These values may be "undef" and may be wrong.

           Returned is a list of three scalars: the location in the file where the body starts, where  the  body
           ends, and the string containing the whole body.

       $obj->bodyDelayed( [$chars, [$lines]] )
           Try  to  read  one  message-body  from  the file, but the data is skipped.  Optionally, the predicted
           number of CHARacterS and/or $lines to be skipped can be supplied.  These values may  be  "undef"  and
           may be wrong.

           The return is a list of four scalars: the location of the body (begin and end), the size of the body,
           and the number of lines in the body.  The number of lines may be "undef".

       $obj->lineSeparator()
           Returns  the  character  or  characters which are used to separate lines in the folder file.  This is
           based on the first line of the file.  UNIX systems use a single LF to separate lines.  Windows uses a
           CR and a LF.  Mac uses CR.

       $obj->readHeader()
           Read the whole message-header and return it as list of field-value pairs.  Mind that some fields will
           appear more than once.

           The first element will represent the position in the file where the header starts.  The  follows  the
           list of header field names and bodies.

           » example:

             my ($where, @header) = $parser->readHeader;

       $obj->stop()
           Stop the parser.

       Administering separators

       The  various "separators" methods are used by Mail::Message::Body::Multipart to detect parts, and for the
       file based mailboxes to flag where the new message starts.

       $obj->activeSeparator()

       $obj->popSeparator()
           Remove the last-pushed separator from the list which is maintained by the parser.  This  will  return
           "undef" when there is none left.

       $obj->pushSeparator(STRING|Regexp)
           Add  a  boundary  line.  Separators tell the parser where to stop reading.  A famous separator is the
           "From"-line, which is used in Mbox-like folders to separate messages.  But also  parts  (attachments)
           is a message are divided by separators.

           The  specified  "STRING"  describes  the  start of the separator-line.  The Regexp can specify a more
           complicated format.

       $obj->readSeparator(%options)
           Read the currently active separator (the last one which  was  pushed).   The  line  (or  "undef")  is
           returned.  Blank-lines before the separator lines are ignored.

           The  return are two scalars, where the first gives the location of the separator in the file, and the
           second the line which is found as separator.  A new separator is activated using pushSeparator().

       $obj->resetSeparators()

       $obj->separators()

       $obj->stripGt()

   Error handling
       Extends "Error handling" in Mail::Reporter.

       $obj->AUTOLOAD()
           Inherited, see "Error handling" in Mail::Reporter

       $obj->addReport($object)
           Inherited, see "Error handling" in Mail::Reporter

       $any->defaultTrace( [$level]|[$loglevel, $tracelevel]|[$level, $callback] )
           Inherited, see "Error handling" in Mail::Reporter

       $obj->errors()
           Inherited, see "Error handling" in Mail::Reporter

       $any->log( [$level, [$strings]] )
           Inherited, see "Error handling" in Mail::Reporter

       $any->logPriority($level)
           Inherited, see "Error handling" in Mail::Reporter

       $obj->notImplemented()
           Inherited, see "Error handling" in Mail::Reporter

       $obj->report( [$level] )
           Inherited, see "Error handling" in Mail::Reporter

       $obj->reportAll( [$level] )
           Inherited, see "Error handling" in Mail::Reporter

       $obj->trace( [$level] )
           Inherited, see "Error handling" in Mail::Reporter

       $obj->warnings()
           Inherited, see "Error handling" in Mail::Reporter

   Cleanup
       Extends "Cleanup" in Mail::Reporter.

       $obj->DESTROY()
           Inherited, see "Cleanup" in Mail::Reporter

DIAGNOSTICS

       Error: Filename or handle required to create a parser.
           A message parser needs to know the source of the  message  at  creation.   These  sources  can  be  a
           filename (string), file handle object, or GLOB.  See new(filename) and new(file).  Cast by new()

       Error: Package $package does not implement $method.
           Fatal  error:  the specific 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 notImplemented()

       Warning: Unexpected end of header in $source: $line
           While parsing a message from the specified source (usually a file name), the parser  found  a  syntax
           error.   According  to  the  MIME  specification  in the RFCs, each header line must either contain a
           colon, or start with a blank to indicate a folded field.  Apparently, this  header  contains  a  line
           which starts on the first position, but not with a field name.

           By  default,  parsing  of  the  header  will  be  stopped.   If there are more header lines after the
           erroneous line, they will be added to the body of the message.   In  case  of  new(fix_header_errors)
           set,  the parsing of the header will be continued.  The erroneous line will be added to the preceding
           field.  Cast by readHeader()

SEE ALSO

       This  module  is  part  of  Mail-Message  version  3.019,  built   on   November   24,   2025.   Website:
       http://perl.overmeer.net/CPAN/

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.

perl v5.40.1                                       2025-12-07                             Mail::Box::Parser(3pm)