Вы в цикле меняете boundary, а он должен быть одинаковым между всеми частями. HTML-часть тоже должно быть только одна. Чтобы исправить, вот эту часть
$boundary = "--" . md5(uniqid(time()));
$headers = "MIME-Version: 1.0;\r\n";
$headers .= "From: Robot\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$multipart = "--$boundary\r\n";
$multipart .= "Content-Type: text/html; charset=UTF-8\r\n";
$multipart .= "Content-Transfer-Encoding: base64\r\n";
$multipart .= "\r\n";
$multipart .= chunk_split(base64_encode($html));
надо поднять выше, оставить внутри else но вынести из цикла по файлам, т.к. она должна выполняться только один раз.