X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FMisc.pm;h=3cc920f3b76f48fa5b333e6368d050332bd6355f;hb=80511cb4158b98db01deec317e5408675487bc6e;hp=d5f02de1d5422780397ae00984f31f97fc9d41a1;hpb=bb119c4cc86e906f698a205437790bd8f96bb3d0;p=freeside.git diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index d5f02de1d..3cc920f3b 100644 --- a/FS/FS/Misc.pm +++ b/FS/FS/Misc.pm @@ -9,6 +9,7 @@ use IPC::Run qw( run timeout ); # for _pslatex use IPC::Run3; # for do_print... should just use IPC::Run i guess use File::Temp; use Tie::IxHash; +use Encode; #do NOT depend on any FS:: modules here, causes weird (sometimes unreproducable #until on client machine) dependancy loops. put them in FS::Misc::Something #instead @@ -89,10 +90,14 @@ encoding which, if specified, overrides the default "7bit". (optional) type parameter for multipart/related messages -=item cust_msg +=item custnum -(optional) L object. If provided, it will be updated -with the message envelope information, contents, and server response. +(optional) L key; if passed, the message will be logged +(if logging is enabled) with this custnum. + +=item msgnum + +(optional) L key, for logging. =back @@ -183,7 +188,7 @@ sub send_email { 'Sender' => $options{'from'}, 'Reply-To' => $options{'from'}, 'Date' => time2str("%a, %d %b %Y %X %z", $time), - 'Subject' => $options{'subject'}, + 'Subject' => Encode::encode('MIME-Header', $options{'subject'}), 'Message-ID' => "<$message_id>", @mimeargs, ); @@ -255,18 +260,20 @@ sub send_email { } # Logging - my $cust_msg = $options{'cust_msg'}; - if ( $cust_msg ) { - $cust_msg->env_from($options{from}); - $cust_msg->env_to(join(",", @to)); - $cust_msg->header($message->header_as_string); - $cust_msg->body($message->body_as_string); - $cust_msg->_date($time); - $cust_msg->error($error); - $cust_msg->status( $error ? 'failed' : 'sent' ); - $cust_msg->replace; - }; - return $error; + if ( $conf->exists('log_sent_mail') and $options{'custnum'} ) { + my $cust_msg = FS::cust_msg->new({ + 'env_from' => $options{'from'}, + 'env_to' => join(', ', @to), + 'header' => $message->header_as_string, + 'body' => $message->body_as_string, + '_date' => $time, + 'error' => $error, + 'custnum' => $options{'custnum'}, + 'msgnum' => $options{'msgnum'}, + 'status' => ($error ? 'failed' : 'sent'), + }); + $cust_msg->insert; # ignore errors + } } @@ -302,9 +309,9 @@ Will be placed inside an HTML tag. Email body (Text alternative). Arrayref of lines, or scalar. -=item cust_msg (optional) +=item custnum, msgnum (optional) -An L object. Will be passed through to send_email. +Customer and template numbers, passed through to send_email for logging. =back @@ -322,21 +329,9 @@ sub generate_email { my $me = '[FS::Misc::generate_email]'; - my %return = ( - 'from' => $args{'from'}, - 'to' => $args{'to'}, - 'bcc' => $args{'bcc'}, - 'subject' => $args{'subject'}, - 'cust_msg'=> $args{'cust_msg'}, - ); - - #if (ref($args{'to'}) eq 'ARRAY') { - # $return{'to'} = $args{'to'}; - #} else { - # $return{'to'} = [ grep { $_ !~ /^(POST|FAX)$/ } - # $self->cust_main->invoicing_list - # ]; - #} + my @fields = qw(from to bcc subject custnum msgnum); + my %return; + @return{@fields} = @args{@fields}; warn "$me creating HTML/text multipart message" if $DEBUG; @@ -358,8 +353,8 @@ sub generate_email { $alternative->attach( 'Type' => 'text/plain', - #'Encoding' => 'quoted-printable', - 'Encoding' => '7bit', + 'Encoding' => 'quoted-printable', + #'Encoding' => '7bit', 'Data' => $data, 'Disposition' => 'inline', ); @@ -703,7 +698,8 @@ sub generate_ps { 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 = ''; @@ -761,7 +757,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 () {