X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FMisc.pm;h=bf286c0773d26569eebe4032296b83f3b1a7c4ae;hb=4b5d4c82766ef1869d03df63fa1e2f0dd050cb6a;hp=9198c75ab149483a840954e7e6011005b98b153a;hpb=773dc8ba7af4d895e0347ebfa59a340f268fd10b;p=freeside.git
diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm
index 9198c75ab..bf286c077 100644
--- a/FS/FS/Misc.pm
+++ b/FS/FS/Misc.pm
@@ -12,13 +12,13 @@ use IPC::Run3; # for do_print... should just use IPC::Run i guess
#instead
@ISA = qw( Exporter );
-@EXPORT_OK = qw( send_email send_fax
+@EXPORT_OK = qw( generate_email send_email send_fax
states_hash counties state_label
card_types
generate_ps generate_pdf do_print
);
-$DEBUG = 1;
+$DEBUG = 0;
=head1 NAME
@@ -40,29 +40,173 @@ but are collected here to elimiate code duplication.
=over 4
+=item generate_email OPTION => VALUE ...
+
+Options:
+
+=item from
+
+Sender address, required
+
+=item to
+
+Recipient address, required
+
+=item subject
+
+email subject, required
+
+=item html_body
+
+Email body (HTML alternative). Arrayref of lines, or scalar.
+
+Will be placed inside an HTML
tag.
+
+=item text_body
+
+Email body (Text alternative). Arrayref of lines, or scalar.
+
+=back
+
+Returns an argument list to be passsed to L.
+
+=cut
+
+#false laziness w/FS::cust_bill::generate_email
+
+use MIME::Entity;
+use HTML::Entities;
+
+sub generate_email {
+ my %args = @_;
+
+ my $me = '[FS::Misc::generate_email]';
+
+ my %return = (
+ 'from' => $args{'from'},
+ 'to' => $args{'to'},
+ 'subject' => $args{'subject'},
+ );
+
+ #if (ref($args{'to'}) eq 'ARRAY') {
+ # $return{'to'} = $args{'to'};
+ #} else {
+ # $return{'to'} = [ grep { $_ !~ /^(POST|FAX)$/ }
+ # $self->cust_main->invoicing_list
+ # ];
+ #}
+
+ warn "$me creating HTML/text multipart message"
+ if $DEBUG;
+
+ $return{'nobody'} = 1;
+
+ my $alternative = build MIME::Entity
+ 'Type' => 'multipart/alternative',
+ 'Encoding' => '7bit',
+ 'Disposition' => 'inline'
+ ;
+
+ my $data;
+ if ( ref($args{'text_body'}) eq 'ARRAY' ) {
+ $data = $args{'text_body'};
+ } else {
+ $data = [ split(/\n/, $args{'text_body'}) ];
+ }
+
+ $alternative->attach(
+ 'Type' => 'text/plain',
+ #'Encoding' => 'quoted-printable',
+ 'Encoding' => '7bit',
+ 'Data' => $data,
+ 'Disposition' => 'inline',
+ );
+
+ my @html_data;
+ if ( ref($args{'html_body'}) eq 'ARRAY' ) {
+ @html_data = @{ $args{'html_body'} };
+ } else {
+ @html_data = split(/\n/, $args{'html_body'});
+ }
+
+ $alternative->attach(
+ 'Type' => 'text/html',
+ 'Encoding' => 'quoted-printable',
+ 'Data' => [ '',
+ ' ',
+ ' ',
+ ' '. encode_entities($return{'subject'}),
+ ' ',
+ ' ',
+ ' ',
+ @html_data,
+ ' ',
+ '',
+ ],
+ 'Disposition' => 'inline',
+ #'Filename' => 'invoice.pdf',
+ );
+
+ #no other attachment:
+ # multipart/related
+ # multipart/alternative
+ # text/plain
+ # text/html
+
+ $return{'content-type'} = 'multipart/related';
+ $return{'mimeparts'} = [ $alternative ];
+ $return{'type'} = 'multipart/alternative'; #Content-Type of first part...
+ #$return{'disposition'} = 'inline';
+
+ %return;
+
+}
+
=item send_email OPTION => VALUE ...
Options:
-I - (required)
+=over 4
+
+=item from
+
+(required)
+
+=item to
+
+(required) comma-separated scalar or arrayref of recipients
+
+=item subject
-I - (required) comma-separated scalar or arrayref of recipients
+(required)
-I - (required)
+=item content-type
-I - (optional) MIME type for the body
+(optional) MIME type for the body
-I - (required unless I is true) arrayref of body text lines
+=item body
-I - (optional, but required if I is true) arrayref of MIME::Entity->build PARAMHASH refs or MIME::Entity objects. These will be passed as arguments to MIME::Entity->attach().
+(required unless I is true) arrayref of body text lines
-I - (optional) when set true, send_email will ignore the I option and simply construct a message with the given I. In this case,
+=item mimeparts
+
+(optional, but required if I is true) arrayref of MIME::Entity->build PARAMHASH refs or MIME::Entity objects. These will be passed as arguments to MIME::Entity->attach().
+
+=item nobody
+
+(optional) when set true, send_email will ignore the I option and simply construct a message with the given I. In this case,
I, if specified, overrides the default "multipart/mixed" for the outermost MIME container.
-I - (optional) when using nobody, optional top-level MIME
+=item content-encoding
+
+(optional) when using nobody, optional top-level MIME
encoding which, if specified, overrides the default "7bit".
-I - (optional) type parameter for multipart/related messages
+=item type
+
+(optional) type parameter for multipart/related messages
+
+=back
=cut
@@ -601,8 +745,7 @@ sub _pslatex {
for ( 1, 2 ) {
local($SIG{CHLD}) = sub {};
- #run( \@cmd, '>'=>'/dev/null', '2>'=>'/dev/null', timeout($timeout) )
- run( \@cmd, timeout($timeout) )
+ run( \@cmd, '>'=>'/dev/null', '2>'=>'/dev/null', timeout($timeout) )
or die "pslatex $file.tex failed; see $file.log for details?\n";
}