Hola
¿con qué navegador estás intentando enviarlo?
Te recomiendo que hagas una prueba de envio con mozilla o firefox, puede que veas algunas cosas curiosas.
También hay unos cuantos errores de html, aunque esto no afecta al envio.
Sobre la validación, no deberías ver solo si está vacio o no, deberías revisar adecuadamente los campos, como mínimo cuando verifiques el mail revisa que haya una arroba y un punto.
Yo te recomendaría que el envio final del correo se realice en la misma función de javascript, puedes revisar un ejemplo
aquí .
Felicidad