Thanks for posting your working code!
some minor suggestions:
....
eval
{
local $SIG{ALRM} = sub { die "MailFile Timeout\n" };
alarm $mailfiletimeout; #20 seconds
$sender->MailFile(...);
alarm 0;
};
if ($@)
{
die unless $@ eq "MailFile Timeout\n"; # propagate
# unexpected errors
logerror("Timeout ....);
return 0;
}
# no else{} is required, what "else" ????
# Simplify the logic - reduduce levels of indendation
# if there is a serious error we don't get here...
# there is no "else"
# proceed with more code...