Correo electrónico en PHP, enhebrado de mensajes, probablemente se necesite regex

Estoy trabajando en algo que registra los mensajes de correo electrónico enviados a una determinada dirección. Tengo un script PHP que coloca la información en MySql, que funciona bien.

Necesito poder agrupar mensajes basados ​​en la 'conversación' similar a Gmail, y ya he leído un poco sobre esto. Esto no tiene por qué ser perfecto porque los mensajes se aprobarán manualmente antes de mostrarse en el sitio web, y los errores se pueden corregir en ese momento. Solo quiero que sea la menor cantidad de trabajo posible para que la vinculación de un nuevo correo electrónico al original se haga automáticamente.

Tengo entendido que el In-Reply-To El encabezado puede identificar el mensaje original, pero su uso no es estándar.

Encontré esto en otra página:

The most common forms of In-Reply-To seemed to be:

31%     NAME's message of TIME <ID@HOST>
22%     <ID@HOST>
9%      <ID@HOST> from NAME at "TIME"
8%      USER's message of TIME <ID@HOST>
7%      USER's message of TIME
6%      Your message of "TIME"
17%     hundreds of other variants (average 0.4% each?)

Sin embargo, esto parece indicar que no es descabellado asumir que, si hay un campo In-Reply-To, entonces el primer <> El texto entre corchetes que se encuentra allí es el ID de mensaje del mensaje principal.

Entonces, ¿cuál es la forma más fácil de obtener ese valor? ¿Existe una expresión regular que me permita tomar lo que sea que esté dentro del < y > si esta disponible? (De acuerdo con la publicación que encontré, ¿debería ser este el PRIMER valor dentro de un < y > ?)

Gracias por cualquier ayuda que usted nos pueda proporcionar.

preguntado el 08 de noviembre de 11 a las 17:11

1 Respuestas

Debería poder obtener la primera coincidencia en la referencia posterior:

<(.+)>

Explicación:

//    Match the character “<” literally «<»
//    Match the regular expression below and capture its match into backreference number 1 «(.+)»
//       Match any single character that is not a line break character «.+»
//          Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
//    Match the character “>” literally «>»

Según esta documentación podría escribir algo como lo siguiente para lograr lo que quiere hacer (perdóneme si esto no es un php válido):

$string ='blah blah blah <ID@HOST>';
preg_match('/<(.+)>/', $string, $match);
print_r($match);

respondido 09 nov., 11:06

Sin embargo, ¿cómo usaría eso, como qué comando de PHP obtendría los valores que necesito en una variable? - Vuelo de Sherwin

Oye, SO no envía notificaciones con mucha frecuencia, me acabo de dar cuenta de que se actualizó. Revisé tu código y funciona perfectamente. Muchas gracias. Aceptaremos tu respuesta a esta pregunta. - Vuelo de Sherwin

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.