I'm implementing a IMAP client, and I have a problem with IMAP mailbox synchronization.
First, it is okay to fetch new mails from IMAP server, but I don't know how to find deleted messages from a mailbox.
Should I fetch all messages from the server and compare it with local data to synchronize?
Maybe too late for your app, but you can find a complete IMAP sync strategy in this RFC: http://tools.ietf.org/html/rfc4549 !
The usual approach is to execute the following two IMAP commands for each folder:
The first command selects a folder and returns the UIDVALIDITY of this folder. If this value matches the previously returned UIDVALIDITY for this folder, you can rely on the UIDs. The second command returns (at least) the UID and all FLAGS for each mail in the selected folder.
\Seen
) and deleted mails (\Deleted
).This approach is used by many IMAP clients, and most IMAP servers are optimized for them. The limiting factor is usually the available network bandwidth between client and server.
The following situations are a bit more complicated: