2013-03-13 78 views
1

我正在編寫一個腳本,通過IMAP從電子郵件地址獲取所有電子郵件。IMAP郵箱標識

目前我正在提取每個文件夾(郵箱)並保存每個文件夾中最高(獲取)的UID,所以我在下次同步時開始在最高UID + 1處獲取。但是,如果單個文件夾被刪除並且某人創建了一個具有相同名稱的新文件夾會怎麼樣? UID僅適用於單個文件夾並將被重置。

我似乎無法找到任何方式來找到郵箱(文件夾)的任何唯一標識符。

回答

1

這正是UIDVALIDITY的用途。這是一個標識文件夾名稱化身的'cookie'。它是當你SELECT文件夾發送給你的。你應該保存它,如果它改變了,你會丟掉你對該文件夾的所有知識。

如果您需要更詳細的信息,請參閱RFC 3501。

+0

因此,UIDVALIDITY返回一個字符串或int,它將爲該文件夾提供一個UNIQUE標識符? – Floris 2013-03-15 21:59:01

+0

這是一個整數,是的,如果它是具有相同名稱的文件夾的新化身,則應該改變它。 – Max 2013-03-16 04:48:46

0

我會建議你存儲mail size也對應uids。如果您的cient上存儲的最大uid大於服務器返回的最大uid(文件夾刪除案例),則比較uid和相應的郵件大小。

UID+1獲取的電子郵件本身已經有洙許多缺陷.... (網絡/ POP),如果有什麼一組特定的郵件從服務器通過一些其他的接口被刪除或通過其他客戶的想法,那麼你將如何在imap客戶端上同步它?我想你會爲此調用一個uid fetch命令......如果你這樣做,那麼你可以比較uids和郵件大小進行交叉驗證。

爲了獲得更好的效果,您還可以使用UIDVALIDITY的概念。但是你不能太依賴,因爲我看到一些imap服務器沒有正確使用它。