La mejor forma de validar un email es usando expresiones regulares, estas nos permitirán indicar de que forma está compuesta una dirección de correo y se intentará buscar un texto que coincida con lo que queremos. Para este ejemplo usaremos preg_match().

<email>

El código a primera vista se ve muy complejo pero ahora lo desglosaremos para poder analizarlo. Cada parte coloreada de la expresión regular será descrita a continuación.

^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,4}$

Nos dice que el correo debe comenzar (^) con uno o más caractéres alfanuméricos (\w+).

^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,4}$

Después del caractér alfanumérico puede o no (*) haber un punto o guión medio seguido de uno o más caractéres alfanuméricos (([.-]\w+)*).

^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,4}$

Después de lo anterior simplemente debe haber una arroba (@).

^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,4}$

En esta parte usaremos las mismas condiciones para el nombre, pero esta vez se usarán para el servidor de correo (hotmail, yahoo, etc). Algunos correos pueden indicar el país antes del servidor de correo (mx.servidor).

^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,4}$

Para terminar, nos dice que debe haber un punto seguido de una cadena de 2 a 4 caractéres alfanuméricos (\.\w{2,4}) sin permitir ningún caractér más ($) lo que nos indica el dominio del servidor de correo.

El uso de expresiones regulares es complicado al principio y es conveniente que tu mismo vayas modificando una expresión que ya está funcionando para que veas como se va comportando. Para más información sobre expresiones regulares puedes consultar la sección de Funciones de Expresiones Regulares (compatibles con PERL) en el manual de http://www.php.net.