aboutsummaryrefslogtreecommitdiff
path: root/lib/Sietima.pm
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2016-05-27 14:35:33 +0100
committerdakkar <dakkar@thenautilus.net>2016-05-27 14:35:33 +0100
commitcf1a7b1484cdd3a34eb215252cb20cea625861cb (patch)
treece0b85e8034392c5164f9ae5dc069cb7bbb78886 /lib/Sietima.pm
parentempty start (diff)
downloadSietima-cf1a7b1484cdd3a34eb215252cb20cea625861cb.tar.gz
Sietima-cf1a7b1484cdd3a34eb215252cb20cea625861cb.tar.bz2
Sietima-cf1a7b1484cdd3a34eb215252cb20cea625861cb.zip
some skeleton
Diffstat (limited to 'lib/Sietima.pm')
-rw-r--r--lib/Sietima.pm63
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/Sietima.pm b/lib/Sietima.pm
index 6c3e60c..85468bb 100644
--- a/lib/Sietima.pm
+++ b/lib/Sietima.pm
@@ -1,5 +1,68 @@
package Sietima;
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::Message;
+use Email::Sender::Simple qw(sendmail);
+use namespace::clean;
+
+has return_path => (
+ isa => Address,
+ is => 'ro',
+ required => 1,
+);
+
+has subscribers => (
+ isa => ArrayRef[Subscriber],
+ is => 'lazy',
+);
+sub _build_subscribers { +[] }
+
+has transport => (
+ isa => Maybe[Transport],
+ is => 'lazy',
+);
+sub _build_transport { }
+
+sub handle_message {
+ state $check = compile(Obect,EmailMIME);
+ my ($self,$incoming_message) = $check->(@_);
+
+ my (@outgoing_messages) = $self->munge_message($incoming_message);
+ 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->(@_);
+
+ return Sietima::Message->new({
+ mail => $incoming_message,
+ from => $self->return_path,
+ to => [
+ map { $_->address } @{$self->subscribers}
+ ],
+ });
+}
+
+sub send_message {
+ state $check = compile(Obect,Message);
+ my ($self,$outgoing_message) = $check->(@_);
+
+ sendmail(
+ $outgoing_message->mail,
+ {
+ %{$outgoing_message->envelope},
+ transport => $self->transport,
+ },
+ );
+
+ return;
+}
1;