2013-06-05 107 views
1

我正在處理一個可以管理多個郵箱的電子郵件管理器。 這是我的場景:我通過郵箱收到郵件,並將其屬性存儲在數據庫中,包括uid。郵箱可以配置爲使用imap或pop3協議下載,這取決於郵箱本身。不同的imap郵箱uid麻煩

POP3的UID:消息的唯一ID是一個任意的服務器確定的字符串,由一個70個字符的範圍內爲0x21到的0x7E,它唯一地標識一個信箱中的消息,並橫跨仍然存在會話。

IMAP的UID:分配給每個消息,該消息與該唯一的標識符的有效性值中使用時(見下文)一個32位的值形成一個64位的值,該值必須不參考任何其他消息中的郵箱或永久具有相同名稱的任何後續郵箱。

所以,這幾乎是不可能找到兩個相同的UID POP3,雖然不同郵箱之間。但更有可能發生在IMAP uid上。

所以,我需要確定的是,用戶都是不同的。 我不需要代碼來做到這一點,我只需要知道是否可以做到這一點,以及如何做到這一點,需要正確的推理。

+2

爲什麼不把id存儲在標識校正/服務器/用戶等的id旁邊。 –

+0

問題是我無法更改表結構,它是:timestamp,from,to,cc,subject,body,attachment。否則,這將是一個好主意。 @RowlandShaw – SamDroid

+1

SO,將授權與UID連接起來。 - - Max

回答

3

的POP3標準不保證的UID是唯一的 - 你可以看到一個共同的UID不同的消息。

IMAP沒有永久的UID這將在你想他們的工作方式工作。 UID在單個郵箱中保證是唯一的,但在某些情況下,它們可能會發生變化(請參閱RFC 3501和UIDVALIDITY響應)。簡而言之,IMAP提供的唯一保證是無論發生什麼情況,(mailbox name, UIDVALIDITY, UID)的三元組都將涉及單個消息。這對於例如緩存消息部分,因爲它們被保證是不可變的。請注意,而不是表示單個郵件將始終分配相同的三元組 - 即使它仍保留在同一郵箱中,也不會。

有它試圖爲你提供某種GUID的非標準擴展,但這些不同的IMAP服務器實現之間並沒有隨處可見。

+0

有可能是兩個不同的imap帳戶有重複的UID? – DS9

+1

@ DS9,當然可以! UID只在一個「郵箱」(也稱爲「文件夾」)內是唯一的,並且僅在相應的「UIDVALIDITY」值發生變化之前。這些UID不是全球唯一的。 –