diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Sietima.pm | 4 | ||||
-rw-r--r-- | lib/Sietima/Role/SubscriberOnly.pm | 23 | ||||
-rw-r--r-- | lib/Sietima/Role/SubscriberOnly/Drop.pm | 9 |
3 files changed, 36 insertions, 0 deletions
diff --git a/lib/Sietima.pm b/lib/Sietima.pm index 2049d2c..fbf0566 100644 --- a/lib/Sietima.pm +++ b/lib/Sietima.pm @@ -14,6 +14,8 @@ use Email::Sender; use Email::Address; use namespace::clean; +with 'MooX::Traits'; + has return_path => ( isa => Address, is => 'ro', @@ -79,4 +81,6 @@ sub send_message { return; } +sub _trait_namespace { 'Sietima::Role' } + 1; diff --git a/lib/Sietima/Role/SubscriberOnly.pm b/lib/Sietima/Role/SubscriberOnly.pm new file mode 100644 index 0000000..4dcb66c --- /dev/null +++ b/lib/Sietima/Role/SubscriberOnly.pm @@ -0,0 +1,23 @@ +package Sietima::Role::SubscriberOnly; +use Moo::Role; +use Email::Address; +use List::AllUtils qw(any); +use namespace::clean; + +requires 'munge_mail_from_non_subscriber'; + +around munge_mail => sub { + my ($orig,$self,$mail) = @_; + + my $from = (Email::Address->parse( + $mail->header_str('from'), + ))[0]->address; + if ( any { $_->address eq $from } @{$self->subscribers} ) { + $self->$orig($mail); + } + else { + $self->munge_mail_from_non_subscriber($mail); + } +}; + +1; diff --git a/lib/Sietima/Role/SubscriberOnly/Drop.pm b/lib/Sietima/Role/SubscriberOnly/Drop.pm new file mode 100644 index 0000000..91354e5 --- /dev/null +++ b/lib/Sietima/Role/SubscriberOnly/Drop.pm @@ -0,0 +1,9 @@ +package Sietima::Role::SubscriberOnly::Drop; +use Moo::Role; +use namespace::clean; + +with 'Sietima::Role::SubscriberOnly'; + +sub munge_mail_from_non_subscriber { } + +1; |