From f9f1313aed3c86fe4287c4d978b4981d574c9917 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sat, 13 Feb 2021 16:09:11 -0800 Subject: [PATCH] eliminate some false laziness in FS::Misc::send_email vs. msg_template/email.pm send_prepared :/ --- FS/FS/Misc.pm | 51 ++++++++++++++++++++++----------------------- FS/FS/msg_template/email.pm | 30 +++++++------------------- 2 files changed, 32 insertions(+), 49 deletions(-) diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index 1c100eacd..139f05ddf 100644 --- a/FS/FS/Misc.pm +++ b/FS/FS/Misc.pm @@ -15,8 +15,7 @@ use Encode; #instead @ISA = qw( Exporter ); -@EXPORT_OK = qw( send_email generate_email send_fax - email_sender_transport_or_error +@EXPORT_OK = qw( send_email generate_email send_fax _sendmail states_hash counties cities state_label card_types pkg_freqs @@ -281,27 +280,11 @@ sub send_email { push @env_to, map { $_->address } Email::Address->parse($dest); } - 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 - 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 = $@; - } - - } else { - $error = $transport; - } + my $error = _sendmail( $message, { 'from' => $from, + 'to' => \@env_to, + 'domain' => $domain, + } + ); # Logging if ( $conf->exists('log_sent_mail') ) { @@ -325,8 +308,9 @@ sub send_email { } -sub email_sender_transport_or_error { - my $domain = shift; +sub _sendmail { + my($message, $options) = @_; + my $domain = delete $options->{'domain'}; my %smtp_opt = ( 'host' => $conf->config('smtpmachine'), 'helo' => $domain, @@ -347,7 +331,22 @@ sub email_sender_transport_or_error { $smtp_opt{'ssl'} = 1 if $enc eq 'tls'; } - Email::Sender::Transport::SMTP->new( %smtp_opt ); + $options->{'transport'} = Email::Sender::Transport::SMTP->new( %smtp_opt ); + + my $error = ''; + + local $SIG{__DIE__}; # don't want Mason __DIE__ handler active + local $@; # just in case + eval { sendmail($message, $options) }; + + if (ref($@) and $@->isa('Email::Sender::Failure')) { + $error = $@->code.' ' if $@->code; + $error .= $@->message; + } else { + $error = $@; + } + + $error; } diff --git a/FS/FS/msg_template/email.pm b/FS/FS/msg_template/email.pm index aebac74b7..8fb81f677 100644 --- a/FS/FS/msg_template/email.pm +++ b/FS/FS/msg_template/email.pm @@ -16,7 +16,7 @@ use HTML::TreeBuilder; use Encode; # needed to send email -use FS::Misc qw( generate_email email_sender_transport_or_error ); +use FS::Misc qw( generate_email _sendmail ); use FS::Conf; use Email::Sender::Simple qw( sendmail ); @@ -543,29 +543,13 @@ sub send_prepared { # through Email::Address to make sure my @env_to = map { $_->address } Email::Address->parse($cust_msg->env_to); - my $transport = email_sender_transport_or_error($domain); + my $message = join("\n", $cust_msg->header, $cust_msg->body); - my $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; - } + my $error = _sendmail( $message, { 'from' => $cust_msg->env_from, + 'to' => \@env_to, + 'domain' => $domain, + } + ); $cust_msg->set('error', $error); $cust_msg->set('status', $error ? 'failed' : 'sent'); -- 2.11.0