Questo
Codice PHP:
if( isset($_POST['invia']) ) { //se si preme INVIA si puó andare avanti 
che è nel codice php non ha motivo di esistere in quanto, quando premi il tasto invio o submit
come vuoi chiamarlo,automaticamente nella action del codice html già lo istruisci verso una
pagina,in questo caso mail.php,quindi che motivo hai di controllare il tasto?non ci vedo il nesso;poi,nel tuo caso non hai bisogno delle sessioni perchè chiami una pagina con il metodo $_POST passandogli dei parametri,piuttosto ricontrollerei tutto il codice magari un pezzo per volta per capire dove possa essere l'errore.