diff options
author | ivan <ivan> | 2008-06-17 03:35:56 +0000 |
---|---|---|
committer | ivan <ivan> | 2008-06-17 03:35:56 +0000 |
commit | 7153190ee1bfeb6d3ad9e6da270a41a949333a7e (patch) | |
tree | 4f3f13115ed182e1d219c136f559eb2fa04a1183 /FS/FS/Misc.pm | |
parent | 97c8cbe1a7645ecce1192a1c3c20807e428f907c (diff) |
finish adding a feature to easily list all email addresses for an agent & send them email
Diffstat (limited to 'FS/FS/Misc.pm')
-rw-r--r-- | FS/FS/Misc.pm | 164 |
1 files changed, 154 insertions, 10 deletions
diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index 1f6eece..936f94a 100644 --- a/FS/FS/Misc.pm +++ b/FS/FS/Misc.pm @@ -12,7 +12,7 @@ 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 @@ -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 <BODY> tag. + +=item text_body + +Email body (Text alternative). Arrayref of lines, or scalar. + +=back + +Returns an argument list to be passsed to L<send_email>. + +=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' => [ '<html>', + ' <head>', + ' <title>', + ' '. encode_entities($return{'subject'}), + ' </title>', + ' </head>', + ' <body bgcolor="#e8e8e8">', + @html_data, + ' </body>', + '</html>', + ], + '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<from> - (required) +=over 4 + +=item from + +(required) + +=item to + +(required) comma-separated scalar or arrayref of recipients + +=item subject -I<to> - (required) comma-separated scalar or arrayref of recipients +(required) -I<subject> - (required) +=item content-type -I<content-type> - (optional) MIME type for the body +(optional) MIME type for the body -I<body> - (required unless I<nobody> is true) arrayref of body text lines +=item body -I<mimeparts> - (optional, but required if I<nobody> 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<nobody> is true) arrayref of body text lines -I<nobody> - (optional) when set true, send_email will ignore the I<body> option and simply construct a message with the given I<mimeparts>. In this case, +=item mimeparts + +(optional, but required if I<nobody> 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<body> option and simply construct a message with the given I<mimeparts>. In this case, I<content-type>, if specified, overrides the default "multipart/mixed" for the outermost MIME container. -I<content-encoding> - (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<type> - (optional) type parameter for multipart/related messages +=item type + +(optional) type parameter for multipart/related messages + +=back =cut |