[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