package LIMS::Model::Email; use Moose; extends 'LIMS::Model::Base'; with ( 'LIMS::Model::Roles::SessionData', # provides $self->user_profile 'LIMS::Model::Roles::HistoryAction', ); use namespace::clean -except => 'meta'; has form_data => ( is => 'rw', isa => 'HashRef', default => sub { {} } ); __PACKAGE__->meta->make_immutable; use LIMS::Local::Mail qw(dispatch); #------------------------------------------------------------------------------- sub diagnosis_status_alert { my $self = shift; my $data = shift; # hashref of: recipients (arrayref), settings (hashref), # message (str), subject (str) my $recipients = $data->{all_recipients}; # arrayref my $db = $self->lims_db; # ie LIMS::DB->new_or_cached; for my $contact (@$recipients) { $data->{recipient} = $contact; # forward $data to send_messsage() - will ignore $data->{all_recipients}: if ( my $rtn = $self->send_message($data) ) { # returns error or empty return $rtn; } $self->add_to_actions('e-mailed diagnosis status alert to ' . $contact); } $self->do_request_history(); return 0; } #------------------------------------------------------------------------------- sub send_message { my $self = shift; my $data = shift; # hashref of: recipient (str), config (hashref), # message (str), subject (str) my %mail = ( to => $data->{recipient}, from => $data->{config}->{email_from}, smtp => $data->{config}->{smtp}, subject => $data->{subject}, message => $data->{message}, _app_cfg => $data->{config}, # ignored by Mail::Sendmail::sendmail ); # $self->debug(\%mail); my $rtn = LIMS::Local::Mail::dispatch(\%mail); # returns error or empty return $rtn || 0; } #------------------------------------------------------------------------------- sub send_attachment { my $self = shift; my $data = shift; # hashref of: recipient (str), config (hashref), # message (str), subject (str), attachment (binary) my %mail = ( to => $data->{recipient}, from => $data->{config}->{email_from}, smtp => $data->{config}->{smtp}, subject => $data->{subject}, message => $data->{message}, file => $data->{attachment}, filename => $data->{filename}, _app_cfg => $data->{config}, # filtered out by send_attachment() ); # $self->debug(\%mail); my $rtn = LIMS::Local::Mail::send_attachment(\%mail); # returns hasheref return $rtn; } #------------------------------------------------------------------------------- sub add_new_address { my ($self, $recipient) = @_; # add address if not exists: my $o = LIMS::DB::EmailAddress->new(address => $recipient)->load_or_insert; } #------------------------------------------------------------------------------- sub set_request_id { my ($self, $request_id) = @_; # set form_data params for do_request_history(): $self->form_data({ _request_id => $request_id }); } 1;