allow friendly from: addresses on email notices, #22962
authorMark Wells <mark@freeside.biz>
Mon, 20 May 2013 19:36:06 +0000 (12:36 -0700)
committerMark Wells <mark@freeside.biz>
Mon, 20 May 2013 19:36:06 +0000 (12:36 -0700)
FS/FS/Misc.pm
FS/FS/UI/Web.pm
FS/FS/cust_main_Mixin.pm
httemplate/misc/email-customers.html

index dbebf33..9c18961 100644 (file)
@@ -171,8 +171,15 @@ sub send_email {
 
   }
 
+  my $from = $options{from};
+  $from =~ s/^\s*//; $from =~ s/\s*$//;
+  if ( $from =~ /^(.*)\s*<(.*@.*)>$/ ) {
+    # a common idiom
+    $from = $2;
+  }
+
   my $domain;
-  if ( $options{'from'} =~ /\@([\w\.\-]+)/ ) {
+  if ( $from =~ /\@([\w\.\-]+)/ ) {
     $domain = $1;
   } else {
     warn 'no domain found in invoice from address '. $options{'from'}.
@@ -247,7 +254,7 @@ sub send_email {
   push @to, $options{bcc} if defined($options{bcc});
   local $@; # just in case
   eval { sendmail($message, { transport => $transport,
-                              from      => $options{from},
+                              from      => $from,
                               to        => \@to }) };
 
   my $error = '';
index f63854c..ccba1de 100644 (file)
@@ -678,6 +678,10 @@ sub start_job {
   
   #warn 'froze string of size '. length(nfreeze(\%param)). " for job args\n"
   #  if $DEBUG;
+  #
+  #  XXX FS::queue::insert knows how to do this.
+  #  not changing it here because that requires changing it everywhere else,
+  #  too, but we should eventually fix it
 
   my $error = $job->insert( '_JOB', encode_base64(nfreeze(\%param)) );
 
index a067706..212c04e 100644 (file)
@@ -539,6 +539,7 @@ sub process_email_search_result {
   die "error loading FS::$table: $@\n" if $@;
 
   my $error = "FS::$table"->email_search_result( $param );
+  dbh->commit; # save failed jobs before rethrowing the error
   die $error if $error;
 
 }
index fcd79d7..ad67b8d 100644 (file)
@@ -104,13 +104,19 @@ Template:
               )
     %><BR>
   <TABLE BGCOLOR="#cccccc" CELLSPACING=0 WIDTH="100%" id="table_no_template">
-    <% include('/elements/tr-input-text.html',
-                 'field' => 'from',
-                 'label' => 'From:',
-                 'size'  => 50,
-              )
-    %>
-
+    <& /elements/tr-td-label.html, 'label' => 'From:' &>
+      <TD><& /elements/input-text.html,
+              'field' => 'from_name',
+              'value' => $conf->config('company_name'), #?
+              'size'  => 20,
+          &>&nbsp;&lt;\
+          <& /elements/input-text.html,
+              'field' => 'from_addr',
+              'type'  => 'email', # HTML5, woot
+              'value' => $conf->config('invoice_from'),
+              'size'  => 20,
+          &>&gt;</TD>
     <% include('/elements/tr-input-text.html',
                  'field' => 'subject',
                  'label' => 'Subject:',
@@ -151,6 +157,7 @@ Template:
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right('Bulk send customer notices');
 
+my $conf = FS::Conf->new;
 my $table = $cgi->param('table') or die "'table' required";
 my %search;
 if ( $cgi->param('search') ) {
@@ -169,7 +176,15 @@ else {
 my $title = 'Send customer notices';
 
 my $num_cust;
-my $from = $cgi->param('from') || '';
+my $from = '';
+if ( $cgi->param('from') ) {
+  $from = $cgi->param('from');
+} elsif ( $cgi->param('from_name') ) {
+  $from = ($cgi->param('from_name') . ' <' . $cgi->param('from_addr') . '>');
+} elsif ( $cgi->param('from_addr') ) {
+  $from = $cgi->param('from_addr');
+}
+
 my $subject = $cgi->param('subject') || '';
 my $html_body = $cgi->param('html_body') || '';