2013-05-22 406 views
2

我正在構建PHP應用程序以將IMAP郵箱與本地副本同步。 我需要找到一種方法來只加載IMAP文件夾中的消息,我還沒有加載。PHP IMAP同步文件夾

PHP IMAP庫具有的功能imap_search做類似的事情。 例如,imap_search($ conn,'SINCE「2012年8月8日」',SE_UID);

但是,此解決方案無法正常工作。通常電子郵件有錯誤的日期(可能是未來的日期),同步工作不正確。

什麼是從PHP做IMAP服務器同步的最佳做法?如何加載我沒有加載的消息的真實列表? 現在我只能看到一種方法 - 在IMAP服務器上加載所有電子郵件的ID,並與ID列表進行比較,如果ID保存在本地。 有沒有更好的方法?謝謝。

回答

3

如果從最低的UID取到最高UID(和新郵件的文件夾中總是有比以往任何消息更高的UID),那麼你可以爲UID <uid>:*,其中uid是比你最高的UID多了一個做搜索目前有。

+0

+1我相信規範要求服務器上的UID單調遞增。 – tripleee

+0

你確定所有的IMAP服務器都有UID作爲整數嗎?對我來說,似乎有些服務器可以將ID作爲唯一的文本代碼。但我不確定這一點。 –

+0

不,IMAP規範指出UID始終是遞增整數。 POP3服務器可能具有文本uid。 – Max

0

我發現UID的在IMAP規格說明書

「分配給每個消息,該消息與該唯一的標識符的有效性值使用時,一個32位的值(見下文)形成一個64位的值,該值必須不請參閱郵箱中的任何其他郵件或任何後續永遠保持相同名稱的郵箱。唯一標識符在郵箱中嚴格按升序分配;每個郵件添加到郵箱時,將爲其分配比該郵件更高的UID(s ),這是以前添加的。與消息序號不同,唯一標識符不一定是連續的。「

所以我還記得上次處理的UID與更大UID只加載消息。

+0

您還必須考慮更改「UIDVALIDITY」。 –