2009-08-28 6 views
6

Je travaille sur un client IMAP utilisant le courrier java. Nous avons actuellement l'obligation de créer une fonction «groupe par conversation» où l'utilisateur peut voir les mails comme une conversation (voir comment les groupes Gmail répondent et sont renvoyés)Puis-je suivre une réponse de messagerie IMAP?

Je peux récupérer des mails depuis le serveur, mais dans les pièces de courrier je reçois, le courrier répondu est "fusionné" avec le courrier réel et est traité comme le contenu réel de courrier.

par exemple: courrier initial:

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

a répondu 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> 

comme indiqué ci-dessus, il n'y a aucune indication de ce qui était réel et ce qui a été répondu courrier, comment est-il alors possible de fournir un groupage comme Gmail (quel que soit le serveur d'où le courrier est lu)?

+1

Voir http://www.jwz.org/doc/threading.html pour un algorithme qui fonctionne et quelques statistiques. –

Répondre

8

Si vous obtenez la source première des messages que vous pouvez rapporter des messages les uns aux autres en regardant les en-têtes suivants:

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

Je regardais la même chose dans ma boîte de gmail; Je pense que c'est comme ça que ça marche puisque "parfois" la conversation est cassée. C'est certainement la façon dont je voudrais utiliser à cet effet. – Aif

+0

Ce n'est pas correct car seuls certains clients de messagerie ont mis In-Reply-To pas tous, la seule meilleure façon est de faire une condition de confinement de chaîne. –

+0

La classe IMAPMessage a en effet la méthode getInReplyTo() http://www.j2ee.me/products/javamail/javadocs/com/sun/mail/imap/IMAPMessage.html#getInReplyTo() étant donné que je la Objet IMAPFolder, comment puis-je récupérer les objets IMAPMessage? this: IMAPMessage [] messages = (IMAPMessage []) userFolder.getMessages(); fait ceci: a obtenu l'exception: [Ljavax.mail.Message; java.lang.ClassCastException: [Ljavax.mail.Message; –

1

piste uniquement les objets

La plupart d'entre Outlook et autres messages électroniques les clients ne sont groupés que par les lignes d'objet, par exemple ils retirent FW: RE: etc du début du sujet et les comparent sans distinction de casse, et ils les marquent comme le même groupe. La plupart du temps en réponse/avant les gens ne changent pas de sujet, et je doute qu'il y ait un autre moyen plus facile. L'autre moyen de le faire est (très cher), vous devez extraire du texte pur TEXT de contenu HTML, et ensuite pour les mêmes e-mails de destinataire/expéditeur dans les deux derniers jours, vous pouvez savoir si un ancien e-mail Le contenu en texte pur existe dans tout nouvel e-mail, puis marquez-les comme une conversation. GetInReplyTo ne renvoie que l'ID du message, vous devrez charger manuellement chaque message de chaque dossier et trouver le bon ID de message, vous devez également cast votre dossier dans IMAPFolder, avez-vous fait cela?

Questions connexes