aboutsummaryrefslogtreecommitdiff
path: root/lib/Sietima/Role/SubscriberOnly.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Sietima/Role/SubscriberOnly.pm')
-rw-r--r--lib/Sietima/Role/SubscriberOnly.pm23
1 files changed, 23 insertions, 0 deletions
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;