Mailing with IMAP: How to detect that a message has been moved from one folder to another?

泄露秘密 提交于 2019-12-21 21:46:30

问题


Using JavaMail API and IMAP, i want to learn that a message has been moved from folder a to b. how can i do that without adding listeners? i mean i want to discover the changes of messages when i login to the account and open the folder.

The problem is if you have 3 messages in folder a with ids 1 2 and 3 and you move the message with id 3 to the folder B, the id of the message changes and we have a message with id 1 in folder B.

My goal is synchronizing the message structure in mail server with my own local server. I have to keep all message information, flags etc on my own. So on each login, i have to discover all the changes made to the messages stored in mail server.

I can get new or unread mails by:

Message messages[] = inbox.search(new FlagTerm(new Flags(Flag.RECENT), true));

or by

Message messages[] = inbox.search(new FlagTerm(new Flags(Flag.SEEN), false));

but i am not interested only to new mails, i also want to know the changes made to the old mails for example i want to get informed about that:

a mail which has been read 2 months ago, has been moved to another folder.

my idea is,

because the uids change, i can not use that for identifying mails. i think i have to use mail infos such as subject sender receive date, build an hashvalue of them and compare the hash values of messages on each login. but it will cause performance problems.


回答1:


You cannot do that in IMAP. Tracking the Message-Id header might get you half way there, but you will have to add all sorts of checks for corner cases like duplicate message IDs (yes, they are supposed to be unique) etc. Also keep in mind that what baseline IMAP gives you is a well-synchronized view to a single mailbox, not an atomic view on a set of mailboxes when combined. This means that even though a user has "moved" a message between folder A and B, it could very well be visible in both A and B for your script for a longer time period.

Some IMAP servers have added non-standard fields that you can FETCH which contain a cryptographic hash of the message payload. These are still non-standard, though.




回答2:


you can try using the rfc822-header information it contains a message-id like blablabla@mail.gmail.com which should not change when mails are moved into folders. but you will have to crawl all the mail-headers of the user to sync this, at least i don't know of a way to retrieve moved messages



来源:https://stackoverflow.com/questions/16265703/mailing-with-imap-how-to-detect-that-a-message-has-been-moved-from-one-folder-t

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!