#!/usr/bin/perl use strict; use warnings; package bh::image; sub get_valid_images { die "Incorrect number of arguments passed to get_valid_images.\n" unless @_== 1; my $dir = shift; my $pre = $dir; # get list of possible images. opendir(DIR, $dir) or die "Can't opendir $dir: $!\n"; my @tmp = grep { /\.jpg$/i or /\.jpeg$/i or /\.gif$/i or /\.png$/i } readdir(DIR); closedir(DIR); # make sure files are valid my @images; require Image::Info; foreach my $a (@tmp) { # is file readable? next unless ( -r "$dir/$a" ); # can we parse meta info from file? my $info = Image::Info::image_info("$dir/$a"); push @images, "$pre/$a" unless $info->{error}; } return @images; } package bh::email; sub email_images { die "Incorrect number of arguments passed to get_valid_images.\n" unless @_== 3; my ( $hdr, $smtp, $imgs ) = @_; require MIME::Lite; my $msg = MIME::Lite->new( From => $hdr->{from}, To => $hdr->{to}, Subject => $hdr->{subj}, Data => $hdr->{body}, Type => 'text' ); foreach my $item ( @$imgs ) { $msg->attach( Path => $item, Type => 'image/jpeg', ); } pop_first($smtp->{pop3},$smtp->{pop3user},$smtp->{pop3pass}) if $smtp->{popfirst}; $msg->send('smtp', $smtp->{smtp}); return 1; } sub pop_first { die "Incorrect number of arguments passed to get_valid_images.\n" unless @_== 3; my ($srvr,$user,$pass) = @_; require Net::POP3; my $pop = Net::POP3->new($srvr); if ($pop->login($user,$pass)) { my $msgnums = $pop->list; return 1; }else{ return undef; } } package main; my $time = 5; local $SIG{ALRM} = sub { print '.'; alarm $time; }; $|=1; # turn off buffering. alarm $time; my @images = bh::image::get_valid_images('.'); my $hdr = { from => 'test@test.com', to => 'test@test.com', subj => 'Test message', body => "Here is the test message body.\n\n\ntester\n" }; my $srvr = { smtp => 'smtp.test.net', popfirst => 1, pop3 => 'pop3.test.net', pop3user => 'test', pop3pass => 'test' }; bh::email::email_images ( $hdr, $srvr, \@images ) or die "Error sending email message.\n"; alarm 0;