diff options
author | dakkar <dakkar@thenautilus.net> | 2016-05-27 14:35:33 +0100 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2016-05-27 14:35:33 +0100 |
commit | cf1a7b1484cdd3a34eb215252cb20cea625861cb (patch) | |
tree | ce0b85e8034392c5164f9ae5dc069cb7bbb78886 /lib | |
parent | empty start (diff) | |
download | Sietima-cf1a7b1484cdd3a34eb215252cb20cea625861cb.tar.gz Sietima-cf1a7b1484cdd3a34eb215252cb20cea625861cb.tar.bz2 Sietima-cf1a7b1484cdd3a34eb215252cb20cea625861cb.zip |
some skeleton
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Sietima.pm | 63 | ||||
-rw-r--r-- | lib/Sietima/Message.pm | 47 |
2 files changed, 110 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; diff --git a/lib/Sietima/Message.pm b/lib/Sietima/Message.pm new file mode 100644 index 0000000..547077a --- /dev/null +++ b/lib/Sietima/Message.pm @@ -0,0 +1,47 @@ +package Sietima::Message; +use 5.020; +use Moo; +use Types::Standard qw(ArrayRef Object); +use Sietima::Types qw(Address EmailMIME); +use Email::MIME; +use namespace::clean; + +has mail => ( + is => 'ro', + isa => EmailMIME, + required => 1, +); + +has from => ( + is => 'ro', + isa => Address, + required => 1, +); + +has to => ( + is => 'ro', + isa => ArrayRef[Address], + required => 1, +); + +sub clone { + my ($self,$args) = @_; + + return ref($self)->new({ + map { + $_ => $args->{$_} // $self->$_, + } qw(mail from to), + }); +} + +sub envelope { + my ($self) = @_; + + return { + map { + $_ => $self->$_, + } qw(from to), + } +} + +1; |