Ci sono due problemi qui:
- Non stai rimuovendo l'indirizzo dalla posta, quindi quando ne aggiungi un secondo, il primo è ancora lì ed entrambi vedranno l'altro indirizzo.
- Stai utilizzando un
header
reindirizza nel tuo ciclo senza terminare lo script. Ciò può causare l'esecuzione del codice dopo il reindirizzamento, ma non vi è alcuna garanzia per quanto e per quanto tempo.
Il primo problema che puoi risolvere cancellando i destinatari alla fine del ciclo:
$mail->ClearAllRecipients();
Per quanto riguarda il secondo problema, non dovresti reindirizzare da nessuna parte all'interno del loop e quando reindirizzi dopo che tutti i messaggi sono stati inviati, dovresti uscire dal tuo script usando exit;
in modo che nulla venga eseguito dopo.