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

NAME

       Mail::Message::Construct::Forward - forwarding a Mail::Message

SYNOPSIS

        my Mail::Message $forward = $message->forward(To => 'you');
        $forward->send;

DESCRIPTION

       Complex functionality on Mail::Message objects is implemented in different files which are autoloaded.
       This file implements the functionality related to creating forwarded messages.

METHODS

   Constructing a message
       $obj->forward(%options)
           Forward the content of this message.  The body of the message to be forwarded is encapsulated in some
           accompanying  text  (if  you  have  no wish for that, than "bounce" is your choice).  A Mail::Message
           object is returned on success.

           You may forward a whole message, but also message parts.  You  may  wish  to  overrule  some  of  the
           default header settings for the reply immediately, or you may do that later with "set" on the header.

           When  a  multi-part  body is encountered, and the message is included to ATTACH, the parts which look
           like signatures will be removed.  If only one message  remains,  it  will  be  the  added  as  single
           attachment,  otherwise  a  nested  multipart  will  be the result.  The value of this option does not
           matter, as long as it is present.  See "Mail::Message::Body::Multipart".

            -Option    --Default
             Bcc         undef
             Cc          undef
             Date        <now>
             From        <'to' in current>
             Message-ID  <uniquely generated>
             Subject     forwardSubject()
             To          <required>
             body        undef
             include     <if body then 'NO' else C<'INLINE'>>
             preamble    constructed from prelude and postlude
             signature   undef

           Bcc => ADDRESSES
             Receivers of blind carbon copies: their names will not be published to other message receivers.

           Cc => ADDRESSES
             The carbon-copy receivers, by default none.

           Date => DATE
             The date to be used in the message sent.

           From => ADDRESSES
             Your identification, by default taken from the "To" field of the source message.

           Message-ID => STRING
             Supply a STRING as specific message-id for the forwarded message.  By default, one is generated for
             you.  If there are no angles around your id, they will be added.

           Subject => STRING|CODE
             Force the subject line to the specific STRING, or the result of the subroutine specified  by  CODE.
             The  subroutine  will  be  called passing the subject of the original message as only argument.  By
             default, the forwardSubject() method is used.

           To => ADDRESSES
             The destination of your  message.  Obligatory.   The  ADDRESSES  may  be  specified  as  string,  a
             Mail::Address object, or as array of Mail::Address objects.

           body => OBJECT
             If  you  specify  a  fully prepared body OBJECT, it will be used as forwarded message contents.  In
             this case, only the headers are constructed for you.

           include => 'NO'|'INLINE'|'ATTACH'|'ENCAPSULATE'
             Must the message where this is a reply to be included in the message?  When "INLINE" is given,  you
             may pass the options of forwardInline() as well.

             In  many  applications, the forward option "as attachment" results in a structure which is produced
             when this option is set to "ENCAPSULATE".  Their default behavior is usually "INLINE".

             It is only possible to inline textual messages, therefore binary or multi-part messages will always
             be enclosed as attachment.  Read the details in section "Creating a forward"..

           preamble => STRING|BODY
             Part which is attached before the  forwarded  message.   If  no  preamble  is  given,  then  it  is
             constructed  from  the prelude and postlude.  When these are also not present, you will still get a
             one liner: the result of forwardPrelude()

           signature => BODY|MESSAGE
             The signature to be added in case of a multi-part forward.  The mime-type  of  the  signature  body
             should  indicate  this  is a used as such.  However, in INLINE mode, the body will be taken, a line
             containing '-- ' added before it, and added behind the epilogue.

       $obj->forwardAttach(%options)
           Forward the message as flat attachment to the specified "preamble".   You  can  specify  all  options
           available to "forward()", although a "preamble" which is provided as body object is required, and any
           specified "body" is ignored.

            -Option  --Default
             preamble  <required>

           preamble => BODY|PART
       $obj->forwardEncapsulate(%options)
           Like  forwardAttach(),  but in this case the original message is first encapsulated as nested message
           in a Mail::Message::Body::Nested, and then joint into a multipart.

           You can specify all options available to "forward()", although a "preamble" which is provided as body
           object is required, and any specified "body" is ignored.  Signatures are  not  stripped.   Signatures
           are not stripped.

            -Option  --Default
             preamble  <required>

           preamble => BODY|PART
       $obj->forwardInline(%options)
           This  method  is  equivalent in behavior to forward() with the option "include" set to 'INLINE'.  You
           can specify most of the fields which are available to forward() except "include" and "body".

            -Option         --Default
             is_attached      "[The forwarded message is attached]\n"
             max_signature    10
             postlude         undef
             prelude          undef
             quote            undef
             strip_signature  qr/^--\s/

           is_attached => STRING
             A forward on binary messages can not be inlined.  Therefore, they are automatically translated into
             an attachment, as made by forwardAttach().  The obligatory preamble option to that  method  may  be
             specified  as  option  to  this  method,  to  be used in case of such a forward of a binary, but is
             otherwise constructed from the prelude, the value of this option, and the postlude.

           max_signature => INTEGER
             Passed to Mail::Message::Body::stripSignature(max_lines).  Only effective for single-part messages.

           postlude => BODY
             The line(s) which to be added after the quoted reply lines.  Create a  body  for  it  first.   This
             should  not include the signature, which has its own option.  The signature will be added after the
             postlude when the forwarded message is "INLINE"d.

           prelude => BODY
             The line(s) which will be added before the quoted forwarded lines.  If nothing  is  specified,  the
             result  of  the  forwardPrelude()  method  is  used.  When "undef" is specified, no prelude will be
             added.

           quote => CODE|STRING
             Mangle the lines of an "INLINE"d reply with CODE, or by prepending a  STRING  to  each  line.   The
             routine specified by CODE is called when the line is in $_.

             By  default,  nothing  is added before each line.  This option is processed after the body has been
             decoded.

           strip_signature => REGEXP|STRING|CODE
             Remove  the  signature  of  the   sender.    The   value   of   this   parameter   is   passed   to
             Mail::Message::Body::stripSignature(pattern),   unless  the  source  text  is  not  included.   The
             signature is stripped from the message before quoting.

       $obj->forwardNo(%options)
           Construct a forward, where the whole body of the message is already constructed.  That  complex  body
           is usually produced in forwardInline(), forwardAttach(), or forwardEncapsulate().

           The  %options  are  the  same as for "forward()" except that "body" is required.  Some other options,
           like "preamble", are ignored.

            -Option--Default
             body    <required>

           body => BODY
       $obj->forwardPostlude()
           Added after the forwarded message.

           example:

            ---- END forwarded message

       $obj->forwardPrelude()
           Create a few lines to be included before the forwarded message content.  The return is  an  array  of
           lines.

           example:

            ---- BEGIN forwarded message
            From: him@somewhere.else.nl (Original Sender)
            To: me@example.com (Me the receiver)
            Cc: the.rest@world.net
            Date: Wed, 9 Feb 2000 15:44:05 -0500
            <blank line>

       $obj->forwardSubject(STRING)
           Create  a  subject  for  a message which is a forward from this one.  This routine tries to count the
           level of reply in  subject  field,  and  transform  it  into  a  standard  form.   Please  contribute
           improvements.

           example:

            subject                 --> Forw: subject
            Re: subject             --> Forw: Re: subject
            Re[X]: subject          --> Forw: Re[X]: subject
            <blank>                 --> Forwarded

DETAILS

   Creating a forward
       The  main difference between bounce() and forward() is the reason for message processing.  The bounce has
       no intention to modify the content of message: the same information is passed-on to someplace else.  This
       may mean some conversions, but for instance, the Message-ID does not need to be changed.

       The purpose of forward() is to pass  on  information  which  is  modified:  annotated  or  reduced.   The
       information is not sent back to the author of the original message (which is implemented by reply()), but
       to someone else.

       So:  some  information  comes  in, is modified, and than forwarded to someone else.  Currently, there are
       four ways to get the original information included, which are explained in the next sections.

       After the creation of the  forward,  you  may  want  to  rebuild()  the  message  to  remove  unnecessary
       complexities.  Of course, that is not required.

       forward, specify a body

       When  you  specify  forward(body),  you  have  created  your own body object to be used as content of the
       forwarded message.  This implies that forward(include) is 'NO': no automatic generation of the  forwarded
       body.

       forward, inline the original

       The  forward(include)  is  set to 'INLINE' (the default) This is the most complicated situation, but most
       often used by MUAs: the original message is inserted textually in the new body.  You can set-up automatic
       stripping of signatures, the way of encapsulation, and texts which should be added before and  after  the
       encapsulated part.

       However,  the  result  may  not  always  be  what  you  expect.   For instance, some people use very long
       signatures which will not be automatically stripped because the pass the  threshold.   So,  you  probably
       need some manual intervention after the message is created and before it is sent.

       When a binary message is encountered, inlining is impossible.  In that case, the message is treated as if
       'ENCAPSULATE' was requested.

       forward, attach the original

       When  forward(include)  is  explicitly  set to 'ATTACH' the result will be a multipart which contains two
       parts.  The first part will be your message, and the second the body of the original message.

       This means that the headers of the forwarded message are used for the new message, and detached from  the
       part which now contains the original body information.  Content related headers will (of course) still be
       part of that part, but lines line "To" and "Subject" will not be stored with that part.

       As example of the structural transformation:

        # code: $original->printStructure;
        multipart/alternative: The source message
          text/plain: content in raw text
          text/html: content as html

        # code: $fwd = $original->forward(include => 'ATTACH');
        # code: $fwd->printStructure
        multipart/mixed: The source message
          text/plain: prelude/postlude/signature
          multipart/alternative
            text/plain: content in raw text
            text/html: content as html

       forward, encapsulate the original

       When  forward(include)  is  explicitly set to 'ENCAPSULATE', then the original message is left in-tact as
       good as possible.  The lines of the original message are  used  in  the  main  message  header  but  also
       enclosed in the part header.

       The  encapsulation  is  implemented using a nested message, content type "message/rfc822".  As example of
       the structural transformation:

        # code: $original->printStructure;
        multipart/alternative: The source message
          text/plain: content in raw text
          text/html: content as html

        # code: $fwd = $original->forward(include => 'ENCAPSULATE');
        # code: $fwd->printStructure
        multipart/mixed: The source message
          text/plain: prelude/postlude/signature
          message/rfc822
             multipart/alternative: The source message
                text/plain: content in raw text
                text/html: content as html

       The message structure is much more complex, but no information is lost.  This is probably the reason  why
       many MUAs use this when the forward an original message as attachment.

DIAGNOSTICS

       Error: Cannot include forward source as $include.
           Unknown  alternative  for  the  forward(include).   Valid  choices  are "NO", "INLINE", "ATTACH", and
           "ENCAPSULATE".

       Error: Method forwardAttach requires a preamble
       Error: Method forwardEncapsulate requires a preamble
       Error: No address to create forwarded to.
           If a forward message is created, a destination address must be specified.

SEE ALSO

       This module is part of Mail-Message distribution version 3.015, built  on  December  11,  2023.  Website:
       http://perl.overmeer.net/CPAN/

LICENSE

       Copyrights 2001-2023 by [Mark Overmeer <markov@cpan.org>]. For other contributors see ChangeLog.

       This  program  is  free  software;  you can redistribute it and/or modify it under the same terms as Perl
       itself.  See http://dev.perl.org/licenses/

perl v5.36.0                                       2023-12-11             Mail::Message::Construct::Forward(3pm)