使用JavaMail API和IMAP,我想知道消息已經從文件夾a移動到b。我怎麼可以做到這一點,而無需添加監聽器?我的意思是當我登錄到帳戶並打開文件夾時,我想發現消息的變化。郵寄IMAP:如何檢測郵件已從一個文件夾移動到另一個文件夾?
問題是,如果在文件夾a中有3條消息,並帶有ID 1 2和3,並且將帶有ID 3的消息移動到文件夾B,則消息的ID會發生變化,並且我們在文件夾中會出現ID爲1的消息B.
我的目標是在同步郵件服務器的消息結構用我自己的本地服務器。我必須自己保留所有的消息信息,標誌等。因此,在每次登錄時,我都必須發現對郵件服務器中存儲的郵件所做的所有更改。
我可以得到新的或者未讀郵件:
Message messages[] = inbox.search(new FlagTerm(new Flags(Flag.RECENT), true));
或
Message messages[] = inbox.search(new FlagTerm(new Flags(Flag.SEEN), false));
,但我不感興趣的只是新郵件,我也想知道老所做的更改例如郵件我想了解的是:
已讀2個月前郵件,已被移動到另一個文件夾。
我的想法是,
因爲UID的改變,我無法使用用於識別郵件。 我想我必須使用郵件信息,如主題發件人接收日期,構建它們的哈希值並比較每個登錄信息的哈希值。但會造成性能問題。
準確地回答了這個問題。消息ID正好是正確的字段使用...當然,必須考慮郵件被複制到多個文件夾,並不是所有的郵件都有郵件ID(草稿...?) – rolfl 2013-04-28 18:27:59
並非所有的郵件有''Message-Id''標頭,可悲的是,這個標頭不能保證是唯一的。談到互聯網協議和RFC,你不能依賴「SHOULD」措辭。 – 2013-04-30 08:47:54
但本頁說: http://stackoverflow.com/questions/219343/get-uid-for-message-from-gmail-using-javax-mail-with-imap?rq=1 消息ID是大多數情況下都是獨一無二的,但不是所有情況下都是如此特別是自動發件人通常會生成相同的ID,或者根本沒有(我也看到空的 - 發件人ID:) – benchpresser 2013-04-30 11:02:03