Para saber si es un email puedes usar este codigo
Código PHP:
preg_match("/\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2,6}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum))/", $lines[$i], $matches)
El codigo tuyo puede funcionar pero, debes quitarle al principio ^ y al final $. Esos simbolo lo que estan indicando es que lo que esta bascando en la variable debe ser lo que te estoy mencionando desde el principio al final . Pero si en el principio existe texto, luego la direccion de email y luego texto no va a encontrar el email porque al principio hay texto y al final. Esa expresion regular que tu hiciste funciona de esta forma
$email = "
algo @ a.net";
Pero no funciona de esta forma
$email = "text text text
algo @ a.net texto texto";