diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Sietima/Message.pm | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/lib/Sietima/Message.pm b/lib/Sietima/Message.pm index 7202269..a864c02 100644 --- a/lib/Sietima/Message.pm +++ b/lib/Sietima/Message.pm @@ -15,6 +15,7 @@ has mail => ( has from => ( is => 'ro', isa => Address, + coerce => AddressFromStr, required => 1, ); @@ -26,13 +27,26 @@ has to => ( required => 1, ); +sub _clone_address { + Email::Address->new( + $_[0]->phrase, + $_[0]->address, + $_[0]->comment, + $_[0]->original, + ); +} + +sub _clone_mail { + Email::MIME->new($_[0]->as_string); +} + sub clone { my ($self,$args) = @_; return ref($self)->new({ - map { - $_ => $args->{$_} // $self->$_, - } qw(mail from to), + from => $args->{from} || _clone_address($self->from), + to => $args->{to} || [ map { _clone_address($_) } @{$self->to} ], + mail => $args->{mail} || _clone_mail($self->mail), }); } |