2012-03-31 84 views
11

我正在實施IMAP客戶端,並且IMAP郵箱同步存在問題。IMAP同步

首先,從IMAP服務器獲取新郵件是可以的,但我不知道如何從郵箱中找到已刪除的郵件。

我應該從服務器獲取所有消息並將其與本地數據進行比較以進行同步?

回答

21

通常的方法是執行用於每個文件夾以下兩個命令:

. EXAMINE "<foldername>" 
. FETCH 1:* (UID FLAGS) 

第一命令選擇的文件夾返回該文件夾的UIDVALIDITY。如果此值與先前爲此文件夾返回的UIDVALIDITY相匹配,則可以依靠UID。第二個命令針對所選文件夾中的每封郵件(至少)返回UID和全部FLAGS

  • 您應該使用UID來檢測哪些郵件已被添加或刪除。請注意,如果不更改UID,則無法更改電子郵件的內容。
  • 在基本的IMAP中,FLAGS是可以爲電子郵件更改的唯一屬性。這些標誌包含有關已閱讀郵件(\Seen)和已刪除郵件(\Deleted)的信息。

大多數客戶端都使用此方法,並且大多數IMAP服務器都針對它們進行了優化。限制因素通常是客戶端和服務器之間的可用帶寬。

下列情形是有點複雜:

  • 如果UIDVALIDITY不匹配,應該怎樣做? IMAP規範要求服務器盡最大努力避免對此值進行不必要的更改。
  • 是否應該對移動的郵件進行優化(實際上是複製的郵件)?在基本的IMAP中,無論源文件夾中的電子郵件是否仍然存在,或者它是否已被刪除並清除,都無法檢測到電子郵件是其他電子郵件的副本。
+1

UIDPLUS擴展可以幫助移動/複製電子郵件。 發現已刪除郵件的另一種方法是使用UID SEARCH:「EXAMINE」文件夾「」,然後「UID SEARCH 1:*'。這將提供郵箱中當前所有UID的列表,可以將其與本地緩存進行比較。 – Max 2012-07-30 19:01:41