无法使用JavaMail POP获取Gmail收件箱

时间:2015-09-30 14:34:58

标签: java java-8 javamail

我正在尝试使用Javamail从Gmail收件箱中获取未读邮件,但我不能。我只检索存档的消息(从2011年开始!!!),我不知道为什么或如何做。

这是我的代码:

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);

1 个答案:

答案 0 :(得分:1)

检查Gmail settings是否有POP3。

此外,您可以在代码中改进很多内容,尽管它们不是您问题的根源。首先修复所有common JavaMail mistakes

您不应该直接创建POP3SSLStore。使用Gmail example code in the JavaMail FAQ

相关问题