En primer lugar, para poder trabajar correctamente necesitás HTML válido. De otra forma, podés encontrarte errores extraños sin motivo aparente. Además, siempre es recomendable hacer las cosas bien, ¿no? Y esto tiene el valor agregado de que lográs entender cómo funcionan las cosas.
 
Dicho esto, te recomiendo que pases tus páginas por 
http://validator.w3.org, ese sitio te dirá si tu página tiene HTML válido o tiene errores. A primera vista se notan varios errores, como el hecho de que estás usando 2 etiquetas form, o el atributo "span" dentro de los "input", que nada tiene que hacer ahí (de hecho, no existe un atributo con ese nombre). 
Segundo punto: El código PHP es correcto (al menos así lo parece), pero es vulnerable a un ataque de inyección de cabeceras. Un spammer podría sin demasiada facilidad usarlo para enviar correo basura. 
Tercer punto: para saber si quien falla es tu formulario o la página php, podés usar 
print_r($_POST) 
en form.php, eso te mostrará todo lo que se envió por el formulario. Si lo ves vacío, quiere decir que hay algo mal en el formulario, y si ves todos los datos, el problema está con tu PHP. 
Sobre el tema de la seguridad, podés leer esto: 
http://aitorserra.es/evitar-spam-en-formularios-php/  
Saludos.