Dividir encabezados de correo usando preg_match
Frecuentes
Visto 1,643 veces
2
Tengo que enviar encabezados de correo electrónico y quiero extraer los diferentes datos: de, asunto, fecha, etc.
$mail1 = 'From: <encuestas@despegar.com>
To: 4fb661d55e409@ventas.ciudades.com
Subject: Califique nuestro servicio
Date: Sat, 19 May 2012 10:39:04 -0400
Message-ID: <3b6401cd35cd$23d08b90$0c01010a@despexds.net>
MIME-Version: 1.0';
$mail2 = 'Date: Fri, 21 Oct 2011 13:42:46 +0000 (GMT)
From: "Decolar.com" <non-reply@despegar.com>
To: 4ea15be894aca@ventas.ciudades.com
Message-ID: <2009175400.15674.1319204566275.JavaMail.root@uns02>
Subject: =?UTF-8?Q?Decolar.com_-_Solicita=C3=A7=C3=A3o_?=
=?UTF-8?Q?de_compra_-_N=C3=BAmero:10603789?=
MIME-Version: 1.0';
preg_match("/Subject: (.)*(Date|Message-ID|From|To|MIME-Version):/s",$mail1,$m);
print_r($m);
Estoy usando el código anterior para obtener solo el tema, pero el resultado no es el esperado.
Para mail1 obtengo:
Array
(
[0] => Subject: Califique nuestro servicio
Date: Sat, 19 May 2012 10:39:04 -0400
Message-ID: <3b6401cd35cd$23d08b90$0c01010a@despexds.net>
MIME-Version:
[1] =>
[2] => MIME-Version
)
Para mail2 obtengo:
Array
(
[0] => Subject: =?UTF-8?Q?Decolar.com_-_Solicita=C3=A7=C3=A3o_?=
=?UTF-8?Q?de_compra_-_N=C3=BAmero:10603789?=
MIME-Version:
[1] =>
[2] => MIME-Version
)
En ambos casos, el asunto está vacío.
2 Respuestas
5
Probablemente haría algo como:
function normalize_array($arr) {
for ($res = array(), $i = 0; $i < count($arr); $i+=2) {
$key = strtr($arr[$i],array(': '=>'','-'=>'_'));
$res[$key] = $arr[$i+1];
}
return $res;
}
$mailData = normalize_array(preg_split('~([\w-]+: )~',$mail1,-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY));
print_r($mailData);
que volverá:
Matriz ( [Desde] => [Para] => 4fb661d55e409@ventas.ciudades.com [Asunto] => Califique nuestro servicio [Fecha] => Sáb, 19 Mayo 2012 10:39:04 -0400 [Message_ID] => <3b6401cd35cd$23d08b90$0c01010a@despexds .net> [MIME_Version] => 1.0 )
contestado el 22 de mayo de 12 a las 18:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php pcre or haz tu propia pregunta.
Esto no es lo que estaba buscando, ¡pero es incluso una mejor solución! muchas gracias inhan - cápsula
De nada. Es posible que desee eliminar nuevas líneas en el campo de asunto (ya que no pueden existir) agregando
'\r\n'=>'','\n'=>'','\r'=>''
en la matriz de reemplazos. - Inhansí, no estaba seguro de si podrían existir, creo que solo están allí debido a un envoltorio cuando guardé el correo electrónico. De todos modos, es una buena limpieza para hacer. - cápsula