return $ok;
является виновником ... это означает, что ваша функция возвращается после первого цикла, поэтому остальная ее часть никогда не выполняется.
Вместо этого вы, вероятно, захотите составить список результатов всех попыток электронной почты, чтобы вы могли увидеть, какие из них были успешными, а какие - нет. Затем вы можете вернуть этот список в самом конце вашей функции, после окончания цикла.
Что-то вроде этого (не проверено):
function send_mails($filename, $from){
$infos = combine_mails_to_passwords($filename);
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$headers .= "X-Mailer: PHP". phpversion() ."\r\n" ;
$headers .= "From: '$from'" . "\r\n";
$results = array(); //hold a list of results
foreach($infos as $key => $info){
$to = $info;
$subject = "TEST Mail";
$message = "<h2 style='font-size:18px;'>
Voici vos identifiants pour passer l'évaluation</h2>
<div style='text-align:center;'>
<table><tr><td><u>Login: </u></td> <td><b> ".$_SESSION['login']."</b><td></tr><br/>
<tr><td><u>Votre Mot de Passe: </u></td> <td><b> ".$key."</b></td></tr></table></div>";
$from = "From: Company Name <TEST>";
$results[$to] = mail($to,$subject,$message,$headers);
}
return $results;
}
и что-то подобное для обработки результата и предупреждения о сбоях:
$results = send_mails($file_path, checkInput($from));
foreach($results as $email => $result)
{
if ($result == false) echo "Alert: Email to $email failed<br/>";
}
echo "All mail sent successfully apart from any which are alerted above";