X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2FMisc.pm;h=2559fc3327675776e38505567807ed613d2e410f;hp=5e89abc0c6e08dd031265a0d58c3f595f910d31d;hb=40f25b8932a3e9830b688ee528ede1dad213c858;hpb=c3a7e8855edbe4f836543184d5a7543e04255a43 diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index 5e89abc0c..2559fc332 100644 --- a/FS/FS/Misc.pm +++ b/FS/FS/Misc.pm @@ -108,7 +108,7 @@ use Date::Format; use MIME::Entity; use Email::Sender::Simple qw(sendmail); use Email::Sender::Transport::SMTP; -use Email::Sender::Transport::SMTP::TLS; +use Email::Sender::Transport::SMTP::TLS 0.11; use FS::UID; FS::UID->install_callback( sub { @@ -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 = ''; @@ -260,7 +267,7 @@ sub send_email { } # Logging - if ( $conf->exists('log_sent_mail') and $options{'custnum'} ) { + if ( $conf->exists('log_sent_mail') ) { my $cust_msg = FS::cust_msg->new({ 'env_from' => $options{'from'}, 'env_to' => join(', ', @to), @@ -271,6 +278,7 @@ sub send_email { 'custnum' => $options{'custnum'}, 'msgnum' => $options{'msgnum'}, 'status' => ($error ? 'failed' : 'sent'), + 'msgtype' => $options{'msgtype'}, }); $cust_msg->insert; # ignore errors } @@ -330,7 +338,7 @@ sub generate_email { my $me = '[FS::Misc::generate_email]'; - my @fields = qw(from to bcc subject custnum msgnum); + my @fields = qw(from to bcc subject custnum msgnum msgtype); my %return; @return{@fields} = @args{@fields}; @@ -414,6 +422,20 @@ sub process_send_email { ''; } +=item process_send_generated_email OPTION => VALUE ... + +Takes arguments as per send_email() and sends the message. This +will die on any error and can be used in the job queue. + +=cut + +sub process_send_generated_email { + my %args = @_; + my $error = send_email(%args); + die "$error\n" if $error; + ''; +} + =item send_fax OPTION => VALUE ... Options: @@ -523,7 +545,7 @@ sub states_hash { #it could throw a fatal "Invalid country code" error (for example "AX") my $subcountry = eval { new Locale::SubCountry($country) } - or return ( '', '(n/a)' ); + or return (); # ( '', '(n/a)' ); #"i see your schwartz is as big as mine!" map { ( $_->[0] => $_->[1] ) } @@ -693,13 +715,16 @@ sub generate_ps { _pslatex($file); - system('dvips', '-q', '-t', 'letter', "$file.dvi", '-o', "$file.ps" ) == 0 + my $papersize = $conf->config('papersize') || 'letter'; + + system('dvips', '-q', '-t', $papersize, "$file.dvi", '-o', "$file.ps" ) == 0 or die "dvips failed"; open(POSTSCRIPT, "<$file.ps") or die "can't open $file.ps: $! (error in LaTeX template?)\n"; - unlink("$file.dvi", "$file.log", "$file.aux", "$file.ps", "$file.tex"); + unlink("$file.dvi", "$file.log", "$file.aux", "$file.ps", "$file.tex") + unless $FS::CurrentUser::CurrentUser->option('save_tmp_typesetting'); my $ps = ''; @@ -747,8 +772,10 @@ sub generate_pdf { my $sfile = shell_quote $file; #system('dvipdf', "$file.dvi", "$file.pdf" ); + my $papersize = $conf->config('papersize') || 'letter'; + system( - "dvips -q -t letter -f $sfile.dvi ". + "dvips -q -f $sfile.dvi -t $papersize ". "| gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$sfile.pdf ". " -c save pop -" ) == 0 @@ -757,7 +784,8 @@ sub generate_pdf { open(PDF, "<$file.pdf") or die "can't open $file.pdf: $! (error in LaTeX template?)\n"; - unlink("$file.dvi", "$file.log", "$file.aux", "$file.pdf", "$file.tex"); + unlink("$file.dvi", "$file.log", "$file.aux", "$file.pdf", "$file.tex") + unless $FS::CurrentUser::CurrentUser->option('save_tmp_typesetting'); my $pdf = ''; while () {