lemonldap-ng/lemonldap-ng-common/lib/Lemonldap/NG/Common/EmailTransport.pm

119 lines
3.6 KiB
Perl

package Lemonldap::NG::Common::EmailTransport;
use strict;
use Email::Sender::Transport::SMTP qw();
use MIME::Entity;
use Email::Sender::Simple qw(sendmail);
use Email::Date::Format qw(email_date);
our $VERSION = '2.1.0';
sub new {
my ( $class, $conf ) = @_;
my $transport;
my $smtpTls = $conf->{SMTPTLS};
return undef
unless ( $conf->{SMTPServer} );
if ( $smtpTls
and $Email::Sender::Transport::SMTP::VERSION < 1.300027 )
{
# Try to use Email::Sender::Transport::SMTPS
eval { require Email::Sender::Transport::SMTPS; };
# fall back to Email::Sender::Transport::SMTP if not available
unless ($@) {
$transport = Email::Sender::Transport::SMTPS->new(
host => $conf->{SMTPServer},
( $conf->{SMTPPort} ? ( port => $conf->{SMTPPort} ) : () ),
(
$conf->{SMTPAuthUser}
? (
sasl_username => $conf->{SMTPAuthUser},
sasl_password => $conf->{SMTPAuthPass}
)
: ()
),
ssl => $smtpTls,
);
return $transport;
}
else {
if ( $smtpTls and $smtpTls eq "ssl" ) {
$smtpTls = 1;
}
else {
$smtpTls = 0;
}
}
}
$transport = Email::Sender::Transport::SMTP->new(
host => $conf->{SMTPServer},
( $conf->{SMTPPort} ? ( port => $conf->{SMTPPort} ) : () ),
(
$conf->{SMTPAuthUser}
? (
sasl_username => $conf->{SMTPAuthUser},
sasl_password => $conf->{SMTPAuthPass}
)
: ()
),
( $smtpTls ? ( ssl => $smtpTls ) : () ),
(
$conf->{SMTPTLSOpts} ? ( ssl_options => $conf->{SMTPTLSOpts} )
: ()
),
);
return $transport;
}
sub configTest {
my ( $class, $conf ) = @_;
my $res = 1;
my $message;
if ( $Email::Sender::Transport::SMTP::VERSION < 1.300027 ) {
if ( $conf->{SMTPTLS} ) {
$message = "Email::Sender < 1.3.00027 does not validate"
. " server identity when using SMTPS, use at your own risks";
}
if ( $conf->{SMTPTLSOpts} and keys %{ $conf->{SMTPTLSOpts} } ) {
$message =
( $message ? "$message. " : "" )
. "Setting TLS parameters is not supported on "
. "Email::Sender < 1.3.00027";
}
eval { require Email::Sender::Transport::SMTPS; };
if ($@) {
if ( $conf->{SMTPTLS} and $conf->{SMTPTLS} eq "starttls" ) {
$message =
( $message ? "$message. " : "" )
. "StartTLS is not supported, "
. "install Email::Sender::Transport::SMTPS";
}
}
}
return $res, $message;
}
sub sendTestMail {
my ($conf, $dest) = @_;
my $transport = Lemonldap::NG::Common::EmailTransport->new($conf);
my $message = MIME::Entity->build(
From => $conf->{mailFrom},
To => $dest,
Subject => 'LemonLDAP::NG test email',
Type => 'TEXT',
Data => 'This test message was sent from the LemonLDAP::NG Manager',
Type => 'text/plain',
Date => email_date,
);
# Send the mail
eval { sendmail( $message->stringify, { transport => $transport } ); };
if ($@) {
my $error = ( $@->isa('Throwable::Error') ? $@->message : $@ );
die $error;
}
}
1;