chiaro
queste due stringhe che scrivi tu:
$stringa_destinatari=htmlspecialchars("<");
$stringa_destinatari.=$riga_mail["email"].htmlspecialchars(">");
diventano
$stringa_destinatari=""; // prima del while e non dentro
$stringa_destinatari.=" $riga_mail["email"], "; // dentro il while
vedrai che funziona
inoltre fra una email e l'altra va aggiunta la virgola e dopo che esci dal while togli l'ultima virgola

dopo il while: $stringa_destinatari = substr($stringa_destinatari, 0, -1);

quello di seguito se ti puo servire e il mio codice ripulito dalle schifezze


<?php
function pubblico()
{
// inizio
//
$connetti = connessione();
$db = scelta_db($connetti);
$all_email = "select email from utenti where ........ ";

$res = seleziona($all_email, $connetti);
$num_righe = numero_righe($res);

if($num_righe > 0)
{
$destinatari = "";
$mittente = "newsletter@falsa.it";
$oggetto = strtoupper("Newsletter ");

while($riga = cicla($res))
{
$email = $riga['email'];
$destinatari .= " $email, ";
}
$destinatari = substr($destinatari, 0, -1);
$mailstyle = "<!--
BODY {
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
color: #003366;
}
-->";
$subject=$oggetto;
$mbody="<html><body>";
$mbody .= "<style type=\"text/css\">";
$mbody .= $mailstyle;
$mbody .= "</style>";

$mbody .= "

Se non riesce a visualizzare la news allegata, verifichi che sia abilitata la ricezione di e-mail in formato HTML.</p>";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: ".$mittente."\r\n";
$headers .= "To: ".$mittente."\r\n";
$headers .= "bcc: ".$destinatari."\r\n";
$esito = @mail($destinatari, $subject, $mbody, $headers);
}
//
// fine
if($esito===false)
{
echo "

Attenzione!
";
echo "Non è stato possibile notificare agli utenti esterni la pubblicazione della nuova news
";
}
?>
</body>
</html>
<?
}
?>