[freeside-commits] branch master updated. 3adb46fccf9f631e188ea5383bd147b340477639
Ivan Kohler
ivan at freeside.biz
Sat Feb 13 10:27:09 PST 2021
The branch, master has been updated
via 3adb46fccf9f631e188ea5383bd147b340477639 (commit)
from 103dfde149eec5034696d073253255f508a1be78 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 3adb46fccf9f631e188ea5383bd147b340477639
Author: Ivan Kohler <ivan at freeside.biz>
Date: Sat Feb 13 10:27:06 2021 -0800
eliminate some false laziness in FS::Misc::send_email vs. msg_template/email.pm send_prepared :/
diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm
index 5eba874ff..1c100eacd 100644
--- a/FS/FS/Misc.pm
+++ b/FS/FS/Misc.pm
@@ -16,6 +16,7 @@ use Encode;
@ISA = qw( Exporter );
@EXPORT_OK = qw( send_email generate_email send_fax
+ email_sender_transport_or_error
states_hash counties cities state_label
card_types
pkg_freqs
@@ -272,28 +273,6 @@ sub send_email {
#send the email
- my %smtp_opt = ( 'host' => $conf->config('smtpmachine'),
- 'helo' => $domain,
- );
-
- my($port, $enc) = split('-', ($conf->config('smtp-encryption') || '25') );
- $smtp_opt{'port'} = $port;
-
- my $error = '';
- if ( $conf->exists('smtp-username') && $conf->exists('smtp-password') ) {
- $smtp_opt{"sasl_$_"} = $conf->config("smtp-$_") for qw(username password);
- } elsif ( defined($enc) && $enc eq 'starttls') {
- $error = "SMTP settings misconfiguration: STARTTLS enabled in ".
- "smtp-encryption but smtp-username or smtp-password missing";
- }
-
- if ( defined($enc) ) {
- $smtp_opt{'ssl'} = 'starttls' if $enc eq 'starttls';
- $smtp_opt{'ssl'} = 1 if $enc eq 'tls';
- }
-
- my $transport = Email::Sender::Transport::SMTP->new( %smtp_opt );
-
push @to, $options{bcc} if defined($options{bcc});
# fully unpack all addresses found in @to (including Bcc) to make the
# envelope list
@@ -302,7 +281,10 @@ sub send_email {
push @env_to, map { $_->address } Email::Address->parse($dest);
}
- unless ( length($error) ) {
+ my $transport = email_sender_transport_or_error($domain);
+
+ my $error = '';
+ if ( ref($transport) ) {
local $SIG{__DIE__}; # don't want Mason __DIE__ handler active
local $@; # just in case
@@ -317,6 +299,8 @@ sub send_email {
$error = $@;
}
+ } else {
+ $error = $transport;
}
# Logging
@@ -341,6 +325,32 @@ sub send_email {
}
+sub email_sender_transport_or_error {
+ my $domain = shift;
+
+ my %smtp_opt = ( 'host' => $conf->config('smtpmachine'),
+ 'helo' => $domain,
+ );
+
+ my($port, $enc) = split('-', ($conf->config('smtp-encryption') || '25') );
+ $smtp_opt{'port'} = $port;
+
+ if ( $conf->exists('smtp-username') && $conf->exists('smtp-password') ) {
+ $smtp_opt{"sasl_$_"} = $conf->config("smtp-$_") for qw(username password);
+ } elsif ( defined($enc) && $enc eq 'starttls') {
+ return "SMTP settings misconfiguration: STARTTLS enabled in ".
+ "smtp-encryption but smtp-username or smtp-password missing";
+ }
+
+ if ( defined($enc) ) {
+ $smtp_opt{'ssl'} = 'starttls' if $enc eq 'starttls';
+ $smtp_opt{'ssl'} = 1 if $enc eq 'tls';
+ }
+
+ Email::Sender::Transport::SMTP->new( %smtp_opt );
+
+}
+
=item generate_email OPTION => VALUE ...
Options:
diff --git a/FS/FS/msg_template/email.pm b/FS/FS/msg_template/email.pm
index 53a13aebc..aebac74b7 100644
--- a/FS/FS/msg_template/email.pm
+++ b/FS/FS/msg_template/email.pm
@@ -16,10 +16,9 @@ use HTML::TreeBuilder;
use Encode;
# needed to send email
-use FS::Misc qw( generate_email );
+use FS::Misc qw( generate_email email_sender_transport_or_error );
use FS::Conf;
use Email::Sender::Simple qw( sendmail );
-use Email::Sender::Transport::SMTP;
use FS::Record qw( qsearch qsearchs );
@@ -544,41 +543,28 @@ sub send_prepared {
# through Email::Address to make sure
my @env_to = map { $_->address } Email::Address->parse($cust_msg->env_to);
- my %smtp_opt = ( 'host' => $conf->config('smtpmachine'),
- 'helo' => $domain );
+ my $transport = email_sender_transport_or_error($domain);
- my($port, $enc) = split('-', ($conf->config('smtp-encryption') || '25') );
- $smtp_opt{'port'} = $port;
-
- if ( $conf->exists('smtp-username') && $conf->exists('smtp-password') ) {
- $smtp_opt{"sasl_$_"} = $conf->config("smtp-$_") for qw(username password);
- } elsif ( defined($enc) && $enc eq 'starttls') {
- $error = "SMTP settings misconfiguration: STARTTLS enabled in ".
- "smtp-encryption but smtp-username or smtp-password missing";
- }
-
- if ( defined($enc) ) {
- $smtp_opt{'ssl'} = 'starttls' if $enc eq 'starttls';
- $smtp_opt{'ssl'} = 1 if $enc eq 'tls';
- }
-
- my $transport = Email::Sender::Transport::SMTP->new( %smtp_opt );
-
- warn "$me sending message\n" if $DEBUG;
- my $message = join("\n", $cust_msg->header, $cust_msg->body);
- local $@;
- eval {
- sendmail( $message, { transport => $transport,
- from => $cust_msg->env_from,
- to => \@env_to })
- };
my $error = '';
- if(ref($@) and $@->isa('Email::Sender::Failure')) {
- $error = $@->code.' ' if $@->code;
- $error .= $@->message;
- }
- else {
- $error = $@;
+ if ( ref($transport) ) {
+
+ warn "$me sending message\n" if $DEBUG;
+ my $message = join("\n", $cust_msg->header, $cust_msg->body);
+
+ local $SIG{__DIE__}; # don't want Mason __DIE__ handler active
+ local $@;
+ eval { sendmail( $message, { transport => $transport,
+ from => $cust_msg->env_from,
+ to => \@env_to })
+ };
+ if (ref($@) and $@->isa('Email::Sender::Failure')) {
+ $error = $@->code.' ' if $@->code;
+ $error .= $@->message;
+ } else {
+ $error = $@;
+ }
+ } else {
+ $error = $transport;
}
$cust_msg->set('error', $error);
-----------------------------------------------------------------------
Summary of changes:
FS/FS/Misc.pm | 56 ++++++++++++++++++++++++++-------------------
FS/FS/msg_template/email.pm | 56 +++++++++++++++++----------------------------
2 files changed, 54 insertions(+), 58 deletions(-)
More information about the freeside-commits
mailing list