2012-04-14 51 views
1

我正在從PHP項目工作,應該從IMAP服務器獲取電子郵件,並將它們存儲在本地數據庫中。 相同的IMAP服務器可以被其他電子郵件客戶端使用,例如發件箱等。如何將IMAP消息標記爲已獲取?

問題是如何知道哪些消息我已經提取,哪些我沒有?我想按日期時間使用搜索,但它是可靠的(我會有cronjob,每分鐘訪問用戶郵箱,並檢查電子郵件,但不確定日期時間是否會導致一些問題,例如在幾乎同時到達短信和大附件留言)。

我在想系統標籤,但用戶可以通過電子郵件客戶端修改它們,所以我可以依賴它們,而不想修改它們並混淆客戶端。

接下來我想到的是自定義標籤,但並非所有IMAP服務器都支持它們(並且我們的軟件需要儘可能靈活)。

任何好主意我怎麼能解決這個問題?

回答

3

跟蹤您正在同步的文件夾的當前最高同步UID,並驗證該文件夾的UIDVALIDITY值是否匹配。

唯一標識符在郵箱中以嚴格遞增的方式分配;因爲每個郵件都添加到郵箱中,所以它被分配比先前添加的郵件更高的UID。與消息序列號不同,唯一標識符不一定是連續的。

+0

http://stackoverflow.com/questions/1084780/getting-only-new-mail-from-an-imap-server 我發現了另一個類似的帖子,和我的想法磨做的,如果沒有按UIDVALIDITY」 t匹配。謝謝! – Ivica 2012-04-14 06:33:06

+0

存在問題。 PHP imap_search函數不支持通過UID搜索消息,似乎我只能使用日期:( – Ivica 2012-04-16 11:03:47