2009-08-28 18 views
6

Estoy trabajando en un cliente IMAP usando correo de Java. Actualmente tenemos el requisito de crear una función "agrupar por conversación" donde el usuario puede ver los correos como conversación (Consulte cómo gmail agrupa los correos respondidos y reenviados)¿Puedo rastrear una respuesta de correo IMAP?

Soy capaz de recuperar correos del servidor, pero en las partes del correo que recibo, el correo contestado está "fusionado" con el correo real y se trata como el contenido real del correo.

por ejemplo: electrónico inicial:

<div>This is the initial mail.</div> 

respondió mail:

This is the response Mail<br><br> 
<div class="gmail_quote"> 
On Wed, Aug 26, 2009 at 4:26 PM, [censored] 
<span dir="ltr">&lt; 
<a href="mailto:[censored]@[censored].com"> 
[censored]@[censored].com 
</a> 
&gt; 
</span> wrote:<br> 
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"> 
    <div>This is the initial mail.</div> 
    <div></div> 
</blockquote> 
</div> 
<br> 

como se muestra anteriormente, no hay ninguna indicación de lo que era real y lo que se replicó electrónico, cómo entonces es posible proporcionar una agrupación como gmail (independientemente del servidor desde donde se lee el correo)

+1

Consulte http://www.jwz.org/doc/threading.html para ver el algoritmo que funciona y algunas estadísticas. –

Respuesta

8

Si obtiene la fuente cruda de los mensajes que se pueden relacionar mensajes entre sí al mirar los siguientes encabezados:

Message-ID: <[email protected]> 
References: <[email protected]> 
In-Reply-To: <[email protected]> 
+1

Estaba viendo lo mismo en mi caja de gmail; Creo que esta es la forma en que funciona, ya que "a veces" la conversación se rompe. Esta es definitivamente la manera que usaría para este propósito. – Aif

+0

Esto no es correcto porque solo ciertos clientes de correo ponen In-Reply-To no todos, la única mejor manera es hacer una condición de contención de cadena. –

+0

La clase IMAPMessage tiene el método getInReplyTo() http://www.j2ee.me/products/javamail/javadocs/com/sun/mail/imap/IMAPMessage.html#getInReplyTo() Dado que tengo el Objeto IMAPFolder, ¿cómo recupero los Objetos IMAPMessage de él? esto: IMAPMessage [] messages = (IMAPMessage []) userFolder.getMessages(); hace esto: obtuvo la excepción: [Ljavax.mail.Message; java.lang.ClassCastException: [Ljavax.mail.Message; –

1

pista solamente por asunto

La mayoría de Outlook y otra de correo electrónico los clientes solo agrupan por las líneas de asunto, por ejemplo, retiran FW: RE: etc. del principio del sujeto y los comparan sin sensibilidad de mayúsculas y minúsculas, y los marcan como el mismo grupo. Principalmente en respuesta/reenviar personas no cambian de tema, y ​​dudo que haya otra manera más fácil.

La otra forma de hacer esto es (muy caro), tiene que extraer texto puro de contenido html, y luego para los mismos correos electrónicos de destinatario/remitente en los últimos días, puede averiguar si un correo electrónico antiguo existe contenido de texto puro en cualquier correo electrónico nuevo y luego márcalos como conversación.

getInReplyTo solo devuelve ID de mensaje, tendrá que cargar manualmente cada mensaje de cada carpeta y encontrar el ID de mensaje correcto, también debe convertir su carpeta a IMAPFolder, ¿lo hizo?

Cuestiones relacionadas