Mira no soy muy experto en expresiones regulares pero entendería que con esta parte "@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})" le dices que despues de la arroba puede llevar cualquier dominio (no solo hotmail y yahoo) con letras y numeros luego un punto "." y luego cualquier letra de 2 a 4 caracteres, la expresion está correcta por lo tanto el ejemplo que tu mensionas de
[email protected] no te marcará el error porque cumple los requisitos de la expresion regular puedes verlo si fragmentas la direccion "fkfddfj" es texto luego lleva la "@" luego "prodigy" que es un dominio, luego "mx", luego "net", posiblemente te diras que eso talvez no exista, pero eso ya no es trabajo de la expresion regular, ya que ella no valida existencia de dominios únicamente valida estructura... ya si lo que quieres es que te valide que ingresen dominios reales ahi tienes que buscar otra forma....