package Sietima::Role::Headers;
use Moo::Role;
use Try::Tiny;
use Sietima::Policy;
use Types::Standard qw(Str);
use namespace::clean;
has name => (
isa => Str,
is => 'ro',
required => 0,
);
sub _add_headers_to($self,$message) {
my $addresses = $self->list_addresses;
my $mail = $message->mail;
my $return_path = delete $addresses->{return_path};
if (my $name = $self->name) {
$mail->header_str_set(
'List-Id',
sprintf '%s <%s>', $name,$return_path->address =~ s{\@}{.}r,
);
}
$addresses->{post} //= $return_path;
for my $name (sort keys $addresses->%*) {
my $header_name = 'List-' . ucfirst($name =~ s{[^[:alnum:]]+}{-}gr);
my $address = $addresses->{$name};
$mail->header_str_set(
$header_name => try {
sprintf '<mailto:%s>',$address->address
} catch { "<$address>" },
);
}
return;
}
around munge_mail => sub ($orig,$self,$mail) {
my @messages = $self->$orig($mail);
$self->_add_headers_to($_) for @messages;
return @messages;
};
1;