summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2013-05-20 12:36:06 -0700
committerMark Wells <mark@freeside.biz>2013-05-20 12:36:06 -0700
commiteef99d4b1595d23b73f8800900ba984fe242b8c4 (patch)
treea4f38fa6f8b24b8e53f45a96c6a9e14ca3e446ff
parent508756cf10352b6cf54a32fbce18ec57121214ce (diff)
allow friendly from: addresses on email notices, #22962
-rw-r--r--FS/FS/Misc.pm11
-rw-r--r--FS/FS/UI/Web.pm4
-rw-r--r--FS/FS/cust_main_Mixin.pm1
-rw-r--r--httemplate/misc/email-customers.html31
4 files changed, 37 insertions, 10 deletions
diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm
index dbebf33..9c18961 100644
--- a/FS/FS/Misc.pm
+++ b/FS/FS/Misc.pm
@@ -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 = '';
diff --git a/FS/FS/UI/Web.pm b/FS/FS/UI/Web.pm
index f63854c..ccba1de 100644
--- a/FS/FS/UI/Web.pm
+++ b/FS/FS/UI/Web.pm
@@ -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)) );
diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm
index a067706..212c04e 100644
--- a/FS/FS/cust_main_Mixin.pm
+++ b/FS/FS/cust_main_Mixin.pm
@@ -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;
}
diff --git a/httemplate/misc/email-customers.html b/httemplate/misc/email-customers.html
index fcd79d7..ad67b8d 100644
--- a/httemplate/misc/email-customers.html
+++ b/httemplate/misc/email-customers.html
@@ -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') || '';