Ciao,
se il navigatore non scrive niente nel campo email, chiaramente non potrà arrivarti la sua email (mi sarei aspettato che la funzione mail segnalasse un errore o che il server la cestinasse però evidentemente non è così) però si può impostare un indirizzo di default in modo che a te arrivi col mittente impostato, dovrebbe bastare inserire questa riga subito dopo le istruzioni di caricamento delle variabili a partire dai dati del $_POST:
codice:
if ($email == "") {$email = "xxx@yyy.it";}
Al posto di xxx@yyy.it metti l'indirizzo mail che vuoi usare come default.
Chiaramente anche questa variabile dovrà essere uguale alle altre per quanto riguarda maiuscole e minuscole.
Questo dovrebbe risolvere il caso in cui l'utente non imposta nulla.
Se invece il navigatore compila il campo email del form ciò che ci scrive dentro, qualunque cosa sia, dovrebbe arrivarti sia nel messaggio sia nel nel campo from della email.
Se non è così vuol dire che c'è qualche problema ma per ora posso fare solo delle ipotesi.
La prima è che il name dato al campo email del form sia diverso dalla variabile letta dal $_POST, questa è una verifica che puoi fare facilmente, guarda nel form, il campo in cui viene scritta l'email deve avere un attributo name="un_certo_nome" e lo stesso nome, identico e senza spazi, deve essere usato nel php per leggere il $_POST e caricare la variabile $email:
codice:
$email = htmlspecialchars($_POST['un_certo_nome']);
Un'altra ipotesi è che la htmlspecialchars inserita, come ti ho detto, in tutti i campi (anche l'indirizzo email), possa disturbare la funzione mail.
Per toglierci il dubbio prova a toglierla, giusto per una prova, e vedi se il problema si risolve, però poi, in ogni caso rimetticela, eventualmente riscrivi e proviamo a cercare una soluzione diversa.
Ciao