1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
use strict;
package Mail::Message;
use vars '$VERSION';
$VERSION = '2.068';
use Mail::Message::Head::Complete;
use Mail::Message::Field;
use Carp qw/croak/;
sub bounce(@)
{ my $self = shift;
my $bounce = $self->clone;
my $head = $bounce->head;
if(@_==1 && ref $_[0] && $_[0]->isa('Mail::Message::Head::ResentGroup' ))
{ $head->addResentGroup(shift);
return $bounce;
}
my @rgs = $head->resentGroups;
my $rg = $rgs[0];
if(defined $rg)
{ $rg->delete; # Remove group to re-add it later: otherwise
while(@_) # field order in header would be disturbed.
{ my $field = shift;
ref $field ? $rg->set($field) : $rg->set($field, shift);
}
}
elsif(@_)
{ $rg = Mail::Message::Head::ResentGroup->new(@_);
}
else
{ $self->log(ERROR => "Method bounce requires To, Cc, or Bcc");
return undef;
}
#
# Add some nice extra fields.
#
$rg->set(Date => Mail::Message::Field->toDate)
unless defined $rg->date;
unless(defined $rg->messageId)
{ my $msgid = $head->createMessageId;
$rg->set('Message-ID' => "<$msgid>");
}
$head->addResentGroup($rg);
#
# Flag action to original message
#
$self->label(passed => 1); # used by some maildir clients
$bounce;
}
1;
|