1
0
mirror of https://gitlab.com/depesz/explain.depesz.com.git synced 2025-07-05 00:58:52 +02:00
Files
explain.depesz.com/lib/Explain/Plugin/MailSender.pm

84 lines
2.1 KiB
Perl
Raw Normal View History

package Explain::Plugin::MailSender;
use Mojo::Base 'Mojolicious::Plugin';
use Mail::Sender;
__PACKAGE__->attr( config => sub { {} } );
sub register {
my ( $self, $app, $config ) = @_;
# save settings
$self->config( $config );
# register helper
$app->helper(
send_mail => sub {
my ( $controller, $mail ) = @_;
# update mail params with config values
for ( qw( smtp port subject from to cc bcc replyto confirm ) ) {
# skip if not set in config
next unless $self->config->{ $_ };
# update mail unless value not set directly
$mail->{ $_ } ||= $self->config->{ $_ };
}
# set default smtp
$mail->{ smtp } ||= '127.0.0.1';
# set mail charset and content type
$mail->{ charset } = 'utf-8';
$mail->{ ctype } = 'text/plain';
# log debug message
$controller->app->log->debug(
sprintf "Sending mail:\n%s", $controller->dumper( $mail )
);
# create Mail::Sender instance
my $sender = Mail::Sender->new( {
smtp => delete $mail->{ smtp },
from => delete $mail->{ from }
} );
# unable to create instance
unless ( ref $sender ) {
# error message
my $message = qq|Can't create Mail::Sender instance, reason: [$sender] "$Mail::Sender::Error"|;
# log error message
$controller->app->log->fatal( $message );
# die
die $message;
}
# send mail
my $result = $sender->MailMsg( $mail );
# unable to sent mail
unless ( ref $result ) {
# error message
my $message = qq|Mail send failed, reason: [$result] "$Mail::Sender::Error"|;
# log error message
$controller->app->log->fatal( $message );
# die
die $message;
}
# success
return 1;
}
);
}
1;