2009-08-28 13 views
6

Pracuję na kliencie IMAP przy użyciu poczty Java. Obecnie istnieje wymóg utworzenia funkcji "grupuj według rozmowy", w której użytkownik może wyświetlać wiadomości jako konwersację (zobacz, jak adresy e-mail w Gmailu są wysyłane i przekazywane)Czy mogę śledzić odpowiedź pocztową IMAP?

Jestem w stanie pobrać wiadomości z serwera, ale w części poczty, które otrzymuję, , otrzymana poczta jest "połączona" z rzeczywistą pocztą i jest traktowana jak rzeczywista treść poczty.

np: początkowy mail:

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

odpowiedział 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> 

jak wykazano powyżej, nic nie wskazuje na to, co było rzeczywiste i co odpowiedział poczty, jak wtedy możliwe jest zapewnić grupowanie, takie jak Gmail (niezależnie od serwera, z którego odczytuje się pocztę)?

+1

Zobacz http://www.jwz.org/doc/threading.html dla działającego algorytmu i statystyki. –

Odpowiedz

8

Jeśli masz surowy źródłem wiadomości można odnosić wiadomości do siebie, patrząc na następujących nagłówków:

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

Patrzyłem na to samo w moim polu Gmail; Myślę, że tak to działa, ponieważ "czasami" rozmowa jest zerwana. Jest to zdecydowanie sposób, w jaki bym użył do tego celu. – Aif

+0

To nie jest poprawne, ponieważ tylko niektórzy klienci poczty umieszczają opcję In-Reply-To nie wszystkie, jedyną najlepszą metodą jest wykonanie warunku ograniczenia łańcucha. –

+0

Klasa IMAPMessage rzeczywiście ma metodę getInReplyTo() http://www.j2ee.me/products/javamail/javadocs/com/sun/mail/imap/IMAPMessage.html#getInReplyTo() Biorąc pod uwagę, że mam Obiekt IMAPFolder, w jaki sposób mogę pobrać z niego obiekty IMAPMessage? to: Wiadomości IMAP [] messages = (IMAPMessage []) userFolder.getMessages(); robi to: ma wyjątek: [Ljavax.mail.Message; java.lang.ClassCastException: [Ljavax.mail.Message; –

1

utwór Przedmioty tylko

Większość Outlook i innych e-mail klienci grupują tylko według wierszy tematu, na przykład odrywają FW: RE: itd od początku obiektu i porównują je bez rozróżniania wielkości liter i zaznaczają je jako tę samą grupę. Przeważnie w odpowiedziach/naprzód ludzie nie zmieniają tematu i wątpię, żeby był jakikolwiek inny najprostszy sposób.

Innym sposobem, aby to zrobić (bardzo drogie), musisz wyodrębnić czysty tekst z zawartości HTML, a następnie dla tych samych e-maili od odbiorców/nadawców w ciągu ostatnich kilku dni, możesz sprawdzić, czy stary e-mail czysta treść tekstowa istnieje w dowolnej nowej wiadomości e-mail, a następnie oznacz je jako rozmowę.

getInReplyTo zwraca tylko identyfikator wiadomości, będziesz musiał ręcznie załadować każdą wiadomość z każdego folderu i znaleźć właściwy ID wiadomości, musisz również przesłać folder do IMAPFolder, zrobiłeś to?

Powiązane problemy