You need more subs, less global variables, subs that take arguments and return values, subs with meaningful names, with no numbers in the name
When you write programs like this they're easy to read and "loop issues" solve themselves
while( $row = $sth->fetchrow_hashref) {
my($con, $job, $pic) = GetContactJobPic( $dbh, $row->{jobtype} );
MailNotifyConJobPic( $row->{email}, $con, $job, $pic, ... );
}
...
sub GetContactJobPic {
my( $dbh, $jobtype ) = @_;
my $hashref = $dbh->selectrow_hashref(
q{Select * from database where jobtype=? AND active='yes' ORDER BY
+ RAND() LIMIT 1}m
{},
$jobtype
);
return @{$hashref}{qw' contact jobnum picture'};
}
sub MailNotifyConJobPic {
my( $mail, $con, $job, $pic, ... ) = @_;
... ## Mail::Sendmail or ...
}
Also placeholders are always a good idea bobby-tables.com: A guide to preventing SQL injection in Perl
Also because that sendmail stuff is still part of the code you posted, others who read this node should also heed caution