2016-03-09 56 views
0

當我運行獲取命令UID FETCH 170930:170930 BODY[]時,我收到了響應88924 FETCH (UID 170920 FLAGS (\Seen))。我不希望檢索到UID超出指定範圍的消息。這是正常的IMAP行爲? 170930 UID來自於使用IdleManager觀看該文件夾的時刻,因此我沒有理由相信服務器上不存在具有該UID的消息。爲什麼Gmail會在UID FETCH命令指定的範圍之外返回一個UID?

我在這裏發佈的獲取請求是基於我用來執行它的Java代碼的猜測。至少,它應該仍然是範圍內只請求消息:

Argument args = new Argument(); 
args.writeString(Long.toString(start) + ":" + Long.toString(end)); 
args.writeString("BODY[]"); 
Response[] r = protocol.command("UID FETCH", args); 
Response response = r[r.length - 1]; 
+0

開始:和結束:是無效的語法。我很驚訝這個作品。 – Max

+0

我已經更新了這個問題,我實際上是從一些Java代碼發出請求,所以我猜測原始輸出。 – LaserJesus

+0

您可以打開[JavaMail會話調試](http://www.oracle.com/technetwork/java/javamail/faq/index.html#debug)併發布顯示此消息的調試輸出嗎? –

回答

2

IMAP服務器需要向您發送在某些情況下FETCH響應。有時服務器需要等待響應,但它從來沒有要求不是發送給你任何。

如果您發送需要兩個響應的命令,並且其他人執行了需要對您做出一個響應的操作,則會得到三個響應。這可能是改變郵件標誌(需要FETCH ... FLAGS ...給你,雖然沒有及時性要求)或發送給你一些郵件(需要EXISTS給你)。