aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Sietima/Message.pm20
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),
});
}