diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Sietima/Role/NoSpoof.pm | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/Sietima/Role/NoSpoof.pm b/lib/Sietima/Role/NoSpoof.pm new file mode 100644 index 0000000..ba703cb --- /dev/null +++ b/lib/Sietima/Role/NoSpoof.pm @@ -0,0 +1,41 @@ +package Sietima::Role::NoSpoof; +use Moo::Role; +use Sietima::Policy; +use Email::Address; +use namespace::clean; + +# VERSION +# ABSTRACT: never sends out messages from subscribers' addresses + +=head1 SYNOPSIS + + my $sietima = Sietima->with_traits('NoSpoof')->new(\%args); + +=head1 DESCRIPTION + +A L<< C<Sietima> >> list with this role applied will replace the +`From` address with its own L<< +C<post_address>|Sietima::Role::WithPostAddress >> (this is a +"sub-role" of L<< C<WithPostAddress>|Sietima::Role::WithPostAddress +>>). + +This will make the list DMARC-compliant. + +=cut + +with 'Sietima::Role::WithPostAddress'; + +around munge_mail => sub ($orig,$self,$incoming_mail) { + my $sender = $self->post_address->address; + my ($from) = Email::Address->parse($incoming_mail->header_str('From')); + + $from->address($sender); + + $incoming_mail->header_str_set( + From => $from, + ); + + return $self->$orig($incoming_mail); +}; + +1; |