summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2021-02-13 16:09:11 -0800
committerIvan Kohler <ivan@freeside.biz>2021-02-13 16:09:11 -0800
commitf9f1313aed3c86fe4287c4d978b4981d574c9917 (patch)
treeb4b94d9da6a70b614a15ac22c3b6f84e9d1897f7 /FS
parente35f3c4160cbd2cc952411f7fc3ba97a36f61e6d (diff)
eliminate some false laziness in FS::Misc::send_email vs. msg_template/email.pm send_prepared :/
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/Misc.pm51
-rw-r--r--FS/FS/msg_template/email.pm30
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');