aboutsummaryrefslogtreecommitdiff
path: root/lib/Sietima.pm
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2016-06-10 13:13:24 +0100
committerdakkar <dakkar@thenautilus.net>2016-06-10 13:13:24 +0100
commitbbc8e2aaab621464c0530d613b18cb5ee8c13290 (patch)
treefa2e3a58292d198c22865d1fdf6b396b6ac47acb /lib/Sietima.pm
parentsome skeleton (diff)
downloadSietima-bbc8e2aaab621464c0530d613b18cb5ee8c13290.tar.gz
Sietima-bbc8e2aaab621464c0530d613b18cb5ee8c13290.tar.bz2
Sietima-bbc8e2aaab621464c0530d613b18cb5ee8c13290.zip
passes its first test!
Diffstat (limited to 'lib/Sietima.pm')
-rw-r--r--lib/Sietima.pm56
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;
}