Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^3: count multiple variables in a single array.

by holli (Abbot)
on Feb 29, 2020 at 14:13 UTC ( [id://11113577]=note: print w/replies, xml ) Need Help??


in reply to Re^2: count multiple variables in a single array.
in thread count multiple variables in a single array.

It's a good idea to separate the output from the logic if you can, especially if that output is HTML. Consider this:
use Modern::Perl; use Email::Send::SMTP::Gmail; use POSIX qw(strftime); use File::Find::Rule; use Template; my $subject = "ICS -- Files in the Error Folder"; my $email = 'bflieck@xxx.com'; my @bad_files = File::Find::Rule ->file() ->relative ->maxdepth( 1 ) ->name( '*.jpg', '*.tif', '*.tiff', '*.psd' ) ->in( '/Volumes/photorepos/Partners/WorkHorse/ERROR/PhotographyDro +p_ERROR' ); # Group files per user my %bad_files_per_user; foreach my $file ( @bad_files ) { my $user = (split /-/, $file)[0]; $bad_files_per_user{ $user } = $file; } # Prepare the email text my $body = Template->new->process( \*DATA, { subject => $subject, files => \%bad_files_per_user, date => strftime( "%m-%d-%y", localtime ), time => strftime( "%I:%M:%S", localtime ), }); # Prepare sender my ( $sender, $error ) = Email::Send::SMTP::Gmail->new ( -subject => $subject, -to => $email, -from => $email, -body => $body, # Better to put these in some kind of configuration file # -debug => 1, -smtp => 'smtp.gmail.com', -login => 'kopautomation1@xxx.com', -pass => 'xxx', -layer => 'ssl', -port => '465', -timeout => 1000 ); die "session error: $error" unless ref $sender; # Off we go $sender->send; $sender->bye; __DATA__ <h1>[% subject %]</h1> <p class="date">[% date %] - [% time %]</p> <p>Please fix and redrop or delete the following errors</p> <div class="bad_format"> <h2>Files with bad format</h2> [% FOREACH user IN files.keys %] <h3>User: [% user %] ([% files.$user.size %] files)</h3> <ul class="files"> [% FOREACH file IN files.$user %] <li>[% file %]</li> [% END %] </ul> [% END %] </div>
I am using the Template Toolkit and a template stored in the __DATA__ section of the script to generate the mail. Because the output is now separated from the code, I (you) can make the email arbitrarily complex (like adding images or styles or whatnot) without having to change or clutter the the code with print statement.

Also, I am sure you know this already, whitespace is <s>cheap</s> free!


holli

You can lead your users to water, but alas, you cannot drown them.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11113577]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (5)
As of 2024-03-29 15:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found