2012-10-30 114 views
2

我正在嘗試訪問Gmail帳戶以在PHP應用程序中導入已發送和已接收的郵件。 每次導入後,我都會存儲當前日期,以便每次都不導入所有郵件。imap_search SINCE標準從不返回結果

// $this->dateLastSynchro is a DateTime object 
$searchCriteria = 'NEW UNDELETED SINCE "' . $this->dateLastSynchro->format('r') . '" '; 
$return = imap_search($this->mailBoxHandle, $searchCriteria); 

第一個導入工作正常(當我使用"ALL UNDELETED"),但是當我使用,因爲我從來沒有效果(即使我已發送或接收新的電子郵件)。

我已經嘗試過使用格式Y-m-d作爲日期,但是當我這樣做時它有一個PHP通知(它表示類似無法識別的標準)。

感謝您的幫助。

編輯

解決方案由Max建議工作正常,但因爲它是一個評論,我不能接受的答案。

+0

也許你應該存儲你得到的最後一個UID。隨着郵件添加到郵箱,UID保證會增加。 – Max

+0

@Max:我無法在UID上找到搜索條件。我是否必須檢索所有郵件,通過它們循環並在'UID> ref UID'時開始導入? – Elorfin

+0

更改爲解答。我不確定你的庫,但協議允許UID SEARCH UID [uid]:*搜索從UID到郵箱末尾的郵件。 – Max

回答

0

也許你應該存儲你得到的最後一個UID。隨着郵件添加到郵箱,UID保證會增加。

1

以下爲我工作得很好:

$imap = imap_open('{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX', "[email protected]", "qqqqqqqqqqqqqqqqqq"); 
$search = imap_search($conn, 'ALL UNDELETED SINCE "28-OCT-12"', SE_UID); 

(請注意,PHP的IMAP API只使用在C客戶端庫mail_criteria()函數,因而使用IMAP2式「搜索」命令而不是IMAP4,因爲c-client維護人員提供了一個通用API來解析SEARCH命令到SEARCHPGM。)

+0

是的,這也適用於我,但是當我這樣做時,我從所有日期都取消了所有未刪除的郵件,而不僅僅是新郵件。 – Elorfin