2012-05-21 67 views
1

我有一個IMAP帳戶,(例如[email protected]),我知道與我可以連接和複製的訊息傳回我的目的地很多圖書館。我想達到以下,同步(複製)IMAP郵件

  1. 第一次,我想下載所有郵件(包括髮送文件夾),並且當我下載的第一次,我會在一些數據庫在本地保存消息ID和UID。
  2. 第二次,我不想查詢下載的郵件,即使他們的讀/未讀狀態或任何標記或刪除標識被改變或者被清除。
  3. 我們的目標是下載和每一個消息在本地同步,一次且僅一次。

現在我對IMAP消息知之甚少,他們有一些名爲ID,UID和MessageID的東西。 ID可能是當前文件夾中的偏移量,UID是當前帳戶中的數字ID,而MessageID是唯一字符串。

現在我想知道,在查詢文件夾,這樣的消息被下載一次,不會被返回給我,我應該用什麼搜索。

我打算使用http://mailsystem.codeplex.com/庫,並給出了自定義字符串搜索能力,並返回int數組。

假設我有,一個MaxID,我想只下載具有ID或UID比MaxID更大的消息。我應該使用哪一個? UID或ID?

回答

3

你應該結合UIDVALIDITY使用UID。兩個值都是文件夾特定的。

存在描述IMAP客戶端應該怎麼做同步(RFC-4549,第4.3節)的信息RFC。文本建議發出以下兩個命令:

tag1 UID FETCH <lastseenuid+1>:* <descriptors> 
tag2 UID FETCH 1:<lastseenuid> FLAGS 

第一命令用於獲取所有未知郵件所需的信息(在不知道多少郵件有)。第二個命令用於同步已經看到的郵件的標誌。

AFAIK這種方法被廣泛使用。因此,許多IMAP服務器都包含優化功能,以便快速提供這些信息。通常,網絡帶寬是限制因素。

+0

假設兩個文件夾,收件箱和垃圾郵件,與1000和100最大UID在他們的文件夾。現在,如果在兩個同步時間之間,如果在垃圾郵件中收到帶有UID 101的郵件,並且用戶將其移入收件箱,則UID會發生什麼變化?這個消息是否會獲得1001的新UID? –

+0

IMAP不支持移動操作,而不是電子郵件都將被複制到目標文件夾以及從源文件夾中刪除。 UID是一個文件夾中是唯一的,並且當電子郵件被附加或複製到文件夾,電子郵件獲得一個UID比這個文件夾中使用的所有以前的UID更大。 – nosid

+0

另外我發現有關搜索既然,最好每天同步?我想盡量減少服務器行程,爲什麼我需要關心UIDVALIDITY? –