2012-10-19 59 views
0

這是我的代碼,它應該會得到未讀消息。不過,它正在返回收件箱中的最後一條消息。有什麼建議麼?Javamail未讀消息返回最後一條消息而不是未讀

import javax.mail.*; 
import javax.mail.internet.*; 
import javax.mail.search.*; 
import java.util.*; 
import com.sun.mail.pop3.POP3SSLStore; 

public class MailClient { 
public static void main(String[] args) { 
    try { 
     Properties props = new Properties(); 
     props.setProperty("mail.pop3.connectionpooltimeout", "3000"); 
     props.setProperty("mail.pop3.connectiontimeout", "3000"); 
     props.setProperty("mail.pop3.timeout", "3000"); 

     Session session; 

      URLName url = new URLName("pop3","pop.gmail.com",995,"","[email protected]","pwd"); 
    session = Session.getInstance(props, null); 
    Store store = new POP3SSLStore(session,url); 
    store.connect(); 

    Folder folder = store.getFolder("INBOX"); 
    folder.open(Folder.READ_ONLY); 

    Flags seen = new Flags(Flags.Flag.SEEN); 
    FlagTerm unseenFlagTerm = new FlagTerm(seen,false); 
    Message message[] = folder.search(unseenFlagTerm); 

    for (int i=0, n = message.length;i<20;i++) { 
     System.out.println("Message " + (i + 1)); 
        System.out.println("From : " + message[i].getFrom()[0]); 
        System.out.println("Subject : " + message[i].getSubject()); 
        System.out.println("Sent Date : " + message[i].getSentDate()); 
    } 
    folder.close(false); 
    store.close(); 
    } 
    catch (MessagingException e) { 
      System.out.println("Error: " + e); 
     } 
    } 
} 
+0

我想你可能會在這裏反對POP3的限制。 – EJP

回答

0

你可以嘗試使用如下,並試試看;

int messageCount = folder.getUnreadMessageCount(); 

if(messageCount>0){ 
Message[] messages = folder.getMessages(); 
} 
+0

剛剛嘗試過,它輸出了相同的東西。我不知道發生了什麼。所有這些正常的解決方案都不會改變任何東西。 – eatonphil

+0

當你說最後的消息,這是否意味着最後一條未讀消息?你是否想要閱讀收到的郵件或者通過使用標誌設置爲未讀的郵件? – dinukadev

+0

我正嘗試在我的收件箱中閱讀未讀郵件。最後,我指的是收件箱中絕對最舊的郵件。 – eatonphil