无法使用javamail api从hotmail帐户获取未读电子邮件

时间:2012-06-28 07:29:15

标签: java javamail pop3 hotmail

我正在尝试编写一个简单的java程序,它使用javamail api从我的hotmail帐户返回所有未读的电子邮件。这是我正在使用的代码:

        String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
    Properties props = new Properties();
    props.setProperty("mail.pop3.ssl.enable", "true");
    props.setProperty("mail.pop3s.socketFactory.class", SSL_FACTORY); 
    props.setProperty("mail.pop3s.socketFactory.fallback", "false"); 
    props.setProperty("mail.pop3s.port", "995"); 
    props.setProperty("mail.pop3s.socketFactory.port", "995");
    Session session = Session.getInstance(props,
        new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });
        Store store = session.getStore("pop3");
        store.connect("pop3.live.com", username, password);
        System.out.println(store);

        Folder inbox = store.getFolder("Inbox");
        inbox.open(Folder.READ_ONLY);
        FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
        Message messages[] = inbox.search(ft);

这段代码中我的错误是什么?因为我收到了所有邮件,而不仅仅是未读邮件。

1 个答案:

答案 0 :(得分:2)

引用Sun的文档介绍其捆绑的POP3提供程序(我假设您正在使用) - 该文档位于/ docs / sundocs

  

POP3不支持永久标志(请参阅Folder.getPermanentFlags())。在   特别是,永远不会为POP3设置Flags.Flag.RECENT标志   消息。应用程序可以确定哪些消息   POP3邮箱是“新”的。有几种策略可以实现   这取决于应用程序和环境的需求:A   简单的方法是跟踪看到的最新消息   应用程序。另一种方法是跟踪UID   所有已经看过的消息(见下文)。另一种方法是   将所有邮件下载到本地邮箱,以便将所有邮件中   根据定义,POP3邮箱是新的。所有方法都需要   与客户关联的一些永久存储。

我认为这几乎可以回答你的问题