Innanzitutto dopo la chiamata header("Location:.....") devi usare la funzione die();
senno non termina l'esecuzione dello script. E vai ad eseguire cosice che non dovrebbe essere esgeuito.
Inoltre ti consiglio di stampare a video con un echo/var_dump/print_r il valore delle variabili che usi per controllare se inviare la mail oppure no.
Cosi' vedi subito se lo stato di qualche variabile che supponevi corretto invecer e' errato a causa di qualche errore.

