Foros del Web » Programando para Internet » PHP »

preg_match extraer email del cuerpo del mensaje

Estas en el tema de preg_match extraer email del cuerpo del mensaje en el foro de PHP en Foros del Web. Hola, buen día: estoy redireccionando email a un script php para que lo procese y reenvié a una dirección de correo que extraiga del cuerpo ...
  #1 (permalink)  
Antiguo 18/07/2009, 11:08
 
Fecha de Ingreso: julio-2009
Mensajes: 1
Antigüedad: 15 años, 4 meses
Puntos: 0
preg_match extraer email del cuerpo del mensaje

Hola, buen día:

estoy redireccionando email a un script php para que lo procese y reenvié a una dirección de correo que extraiga del cuerpo del mensaje, la dirección de correo esta delimitada por la linea E-mail: nombre(at)dominio-com

Actualmente tengo un script que solo redirecciona los emails a una dirección predefinida.

Realmente no se sobe php y ya estoy en ello, pero he estado peleando con el código para extraer el email, crearlo como variable y aplicarlo como destinatario en mail()
El codigo actual es:
(en el regex sustituí el símbolo de arroba por la palabra "at" ya que el foro me lo tomaba como spam)
Código PHP:
#!/usr/bin/php -q
<?php
// read from stdin
$fd fopen("php://stdin""r");
$email "";
while (!
feof($fd)) {
$email .= fread($fd1024);
}
fclose($fd);

$lines explode("\n"$email);


$from "";
$subject "";
$headers "";
$message "";
$splittingheaders true;

for (
$i=0$i count($lines); $i++) {
if (
$splittingheaders) {
//  header
$headers .= $lines[$i]."\n";
if (
preg_match("/^Subject: (.*)/"$lines[$i], $matches)) {
$subject $matches[1];
}
if (
preg_match("/^From: (.*)/"$lines[$i], $matches)) {
$from $matches[1];
}
} else {


$message .= $lines[$i]."\n";
}
if (
trim($lines[$i])=="") {
// empty line, header section has ended
$splittingheaders false;
}
// buscar email no me esta extrayendo

 
if (preg_match("/^([^at]+)(at.*)$/"$lines[$i], $matches)) {
 
 
$matches[0];
}
}
mail("$emailextraido""$subject""From: $from  Message: $message""From: aa(a t)mail.com\n");

return 
NULL;

?>

Gracias
  #2 (permalink)  
Antiguo 19/07/2009, 09:34
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: preg_match extraer email del cuerpo del mensaje

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";

Última edición por abimaelrc; 19/07/2009 a las 09:40
  #3 (permalink)  
Antiguo 19/07/2009, 17:43
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años, 7 meses
Puntos: 33
Respuesta: preg_match extraer email del cuerpo del mensaje

xdatta:

Veo eso muy dificil.
Lo que si se puede hacer es ->
Utilizando la libreria imap.dll de php,
1.- Checar el correo en bandeja de entrada.
2.- Obtener el no leido
3.- desglosar el correo en ->
Cabecera:
fecha ...
origen (Quien envia) [email protected] (ejemplo!!!)
asunto ...
dominio que envia gmail.com
Cuerpo:
Mensaje
Adjunto(s)

Una vez que obtienes lo de arriba puedes
hacer lo que quieras como enviarlo a otra cuenta,
todo o parte del correo, etc etc etc.
ES FACIL DESCRIBIR PERO EL DISEÑO
ES UN TANTO MAS COMPLICADO Y LARGO.
Saludos
Franco
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 13:01.