diff options
Diffstat (limited to 'lib/Sietima.pm')
-rw-r--r-- | lib/Sietima.pm | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/lib/Sietima.pm b/lib/Sietima.pm index 85468bb..2049d2c 100644 --- a/lib/Sietima.pm +++ b/lib/Sietima.pm @@ -3,46 +3,60 @@ use 5.020; use Moo; use Types::Standard qw(ArrayRef Object FileHandle Maybe); use Type::Params qw(compile); -use Sietima::Types qw(Address EmailMIME Message Subscriber Transport); +use Sietima::Types qw(Address AddressFromStr + EmailMIME Message + Subscriber SubscriberFromAddress SubscriberFromStr + Transport); use Sietima::Message; -use Email::Sender::Simple qw(sendmail); +use Sietima::Subscriber; +use Email::Sender::Simple qw(); +use Email::Sender; +use Email::Address; use namespace::clean; has return_path => ( isa => Address, is => 'ro', required => 1, + coerce => AddressFromStr, ); +my $subscribers_array = ArrayRef[ + Subscriber->plus_coercions( + SubscriberFromAddress, + SubscriberFromStr, + ) +]; has subscribers => ( - isa => ArrayRef[Subscriber], + isa => $subscribers_array, is => 'lazy', + coerce => $subscribers_array->coercion, ); sub _build_subscribers { +[] } has transport => ( - isa => Maybe[Transport], + isa => Transport, is => 'lazy', ); -sub _build_transport { } +sub _build_transport { Email::Sender::Simple->default_transport } -sub handle_message { - state $check = compile(Obect,EmailMIME); - my ($self,$incoming_message) = $check->(@_); +sub handle_mail { + state $check = compile(Object,EmailMIME); + my ($self,$incoming_mail) = $check->(@_); - my (@outgoing_messages) = $self->munge_message($incoming_message); + my (@outgoing_messages) = $self->munge_mail($incoming_mail); for my $outgoing_message (@outgoing_messages) { $self->send_message($outgoing_message); } return; } -sub munge_message { - state $check = compile(Obect,EmailMIME); - my ($self,$incoming_message) = $check->(@_); +sub munge_mail { + state $check = compile(Object,EmailMIME); + my ($self,$incoming_mail) = $check->(@_); return Sietima::Message->new({ - mail => $incoming_message, + mail => $incoming_mail, from => $self->return_path, to => [ map { $_->address } @{$self->subscribers} @@ -51,16 +65,16 @@ sub munge_message { } sub send_message { - state $check = compile(Obect,Message); + state $check = compile(Object,Message); my ($self,$outgoing_message) = $check->(@_); - sendmail( - $outgoing_message->mail, - { - %{$outgoing_message->envelope}, - transport => $self->transport, - }, - ); + my $envelope = $outgoing_message->envelope; + if ($envelope->{to} && @{$envelope->{to}}) { + $self->transport->send( + $outgoing_message->mail, + $envelope, + ); + } return; } |