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.