summaryrefslogtreecommitdiff
path: root/FS/FS/Misc.pm
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2019-09-25 10:40:47 -0700
committerIvan Kohler <ivan@freeside.biz>2019-09-25 10:40:47 -0700
commitd3a5ab84183f540715c7a02964a10d065562ce41 (patch)
tree7189f4fa60a096baf15d6055244816abf2409bc2 /FS/FS/Misc.pm
parentae1138aab04dbb2b84830cee9807bcb4a46987a2 (diff)
catch bad SMTP settings before they error out sending mail, RT#83775
Diffstat (limited to 'FS/FS/Misc.pm')
-rw-r--r--FS/FS/Misc.pm35
1 files changed, 22 insertions, 13 deletions
diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm
index a9d24c2..b787fb6 100644
--- a/FS/FS/Misc.pm
+++ b/FS/FS/Misc.pm
@@ -280,9 +280,15 @@ sub send_email {
my($port, $enc) = split('-', ($conf->config('smtp-encryption') || '25') );
$smtp_opt{'port'} = $port;
+ my $error = '';
my $transport;
if ( defined($enc) && $enc eq 'starttls' ) {
- $smtp_opt{$_} = $conf->config("smtp-$_") for qw(username password);
+ foreach (qw(username password)) {
+ $smtp_opt{$_} = $conf->config("smtp-$_");
+ $error = "SMTP settings misconfiguration: ".
+ "STARTTLS enabled in smtp-encryption but smtp-$_ missing"
+ if ! length($smtp_opt{$_});
+ }
$transport = Email::Sender::Transport::SMTP::TLS->new( %smtp_opt );
} else {
if ( $conf->exists('smtp-username') && $conf->exists('smtp-password') ) {
@@ -300,19 +306,21 @@ sub send_email {
push @env_to, map { $_->address } Email::Address->parse($dest);
}
- local $SIG{__DIE__}; # don't want Mason __DIE__ handler active
- local $@; # just in case
- eval { sendmail($message, { transport => $transport,
- from => $from,
- to => \@env_to }) };
+ unless ( length($error) ) {
+
+ local $SIG{__DIE__}; # don't want Mason __DIE__ handler active
+ local $@; # just in case
+ eval { sendmail($message, { transport => $transport,
+ from => $from,
+ to => \@env_to }) };
+
+ if (ref($@) and $@->isa('Email::Sender::Failure')) {
+ $error = $@->code.' ' if $@->code;
+ $error .= $@->message;
+ } else {
+ $error = $@;
+ }
- my $error = '';
- if(ref($@) and $@->isa('Email::Sender::Failure')) {
- $error = $@->code.' ' if $@->code;
- $error .= $@->message;
- }
- else {
- $error = $@;
}
# Logging
@@ -332,6 +340,7 @@ sub send_email {
my $log_error = $cust_msg->insert;
warn "Error logging message: $log_error\n" if $log_error; # at least warn
}
+
$error;
}