From 561dcb678dd6e8520e927365f3737315c0fe0577 Mon Sep 17 00:00:00 2001 From: dakkar Date: Fri, 24 Mar 2017 16:32:52 +0000 Subject: allow List-Post: NO --- lib/Sietima/Role/Headers.pm | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'lib/Sietima') diff --git a/lib/Sietima/Role/Headers.pm b/lib/Sietima/Role/Headers.pm index fe3f8a5..5ab0d58 100644 --- a/lib/Sietima/Role/Headers.pm +++ b/lib/Sietima/Role/Headers.pm @@ -61,6 +61,15 @@ sub _normalise_address($self,$address) { } @items; } +sub _set_header($self,$mail,$name,$value) { + my $header_name = 'List-' . ucfirst($name =~ s{[^[:alnum:]]+}{-}gr); + my @items = $self->_normalise_address($value); + + $mail->header_raw_set( + $header_name => join ', ', map { $_->as_header_raw } @items, + ); +} + sub _add_headers_to($self,$message) { my $addresses = $self->list_addresses; my $mail = $message->mail; @@ -77,15 +86,19 @@ sub _add_headers_to($self,$message) { # if nobody declared a "post" address, let's guess it's the same # as the address we send from - $addresses->{post} //= $return_path; + if (not exists $addresses->{post}) { + $self->_set_header( $mail, post => $return_path ); + } + # but if they explicitly set a false value, this list does not + # allow posting, so we need to set the special value 'NO' + elsif (not $addresses->{post}) { + delete $addresses->{post}; + $mail->header_raw_set('List-Post','NO'); + } + # otherwise we can treat 'post' as normal for my $name (sort keys $addresses->%*) { - my $header_name = 'List-' . ucfirst($name =~ s{[^[:alnum:]]+}{-}gr); - my @items = $self->_normalise_address($addresses->{$name}); - - $mail->header_raw_set( - $header_name => join ', ', map { $_->as_header_raw } @items, - ); + $self->_set_header( $mail, $name => $addresses->{$name} ); } return; } -- cgit v1.2.3