2015-09-30 40 views
0

我正嘗試使用Javamail從Gmail收件箱取回未讀郵件,但我無法取得。我只檢索歸檔郵件(從2011年起),我不知道爲什麼或如何去做。無法使用JavaMail取回Gmail收件箱POP

這裏是我的代碼:

public List<DefaultMessage> getLatestNthMessages(Integer numberOfMessages) throws Exception { 
    URLName url = new URLName("pop3", "pop.gmail.com", 995, "",username, password); 
    Store store = new POP3SSLStore(pullSession, url); 
    store.connect(); 
    Folder inbox = store.getFolder("INBOX"); 

    inbox.open(Folder.READ_WRITE); 

    SearchTerm st = new FlagTerm(new Flags(Flags.Flag.SEEN), false); 
    List<Message> msgs = Arrays.asList(inbox.search(st)).stream() 
                 .sorted((m1, m2) -> m2.getMessageNumber() - m1.getMessageNumber()) 
                 .limit(numberOfMessages) 
                 .collect(Collectors.toList()); 
    List<DefaultMessage> listOfMessages = new ArrayList<>(); 
    for (Message message : msgs) { 
     listOfMessages.add(wrapperToMessage(message)); 
    } 

    return listOfMessages; 
} 

pullSession如下實例:

Properties pullProps = new Properties(); 

    pullProps.put("mail.pop3.host", pullHost); 
    pullProps.put("mail.pop3.username", username); 
    pullProps.put("mail.pop3.port", pullPort); 
    pullProps.put("mail.pop3.socketFactory.port", pullPort); 
    pullProps.put("mail.pop3.socketFactory.fallback", "false"); 
    pullProps.put("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    pullProps.put("mail.pop3.auth", "true"); 

    pullSession = Session.getInstance(pullProps, null); 

    pullSession.setDebug(true); 
+0

不應該將'mail.store.protocol'設置爲'pop3s'而不是'imaps'? –

+0

@JozefChocholacek我現在看到了,哈哈。我更新了我的帖子(但不幸的是,沒有問題) –

回答

1

檢查Gmail settings爲POP3。

此外,您可以在代碼中改進很多東西,儘管它們不是問題的根源。從修復所有common JavaMail mistakes開始。

您不應該直接創建POP3SSLStore。使用Gmail example code in the JavaMail FAQ

+0

Thanks @bBillShannon!我會做的。這段代碼是第一個版本,我想爲我的團隊解決問題,之後,我想重構它......不像你提到的那樣是最好的:)。我會檢查演示,並在幾分鐘內告訴你! –