Attento!!!
Codice PHP:
($nome!="") ? $compilato=true : print 'il campo nome è vuoto
'
;
   (
$cognome!="") ? $compilato=true : print 'il campo cognome è vuoto
'
;
   (
$indirizzoEmail!="") ? $compilato=true : print 'il campo Indirizzo email è vuoto
'
;
   if (
$at ==false || $dot==false) { print 'mail non inserita correttamente
'
; }
  (
$soggetto!="") ? $compilato=true : print 'il campo soggetto è vuoto
'
;
  (
$messaggio!="") ? $compilato=true : print 'il campo messaggio è vuoto
'

non è efficente!!!

Ipotesi: nome, cognome e indirizzo email sono compilati.
Il primo controllo (quello sul nome) imposta a "true" compilato...ma quando arrivi a soggetto e a messaggio, compilato vale ancora true!!!

Comincia a sistemare questo, poi per vedere dov'è l'errore devi cercare nel file di log del server web, dato che è un 500, ed eventualmente nel errorlog di php.