使用JavaMail API无法获取Hotmail帐户中的未读电子邮件

3

我正在尝试编写一个简单的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);

在这段代码中我的错误是什么?因为我得到的是所有邮件而不是只有未读邮件。

你是否找到类似于Inbox文件夹中的getUnread()方法的方法? - Alpesh Prajapati
是的,有一个方法可以被称为inbox.getUnreadMessageCount()。 - yashdosi
1个回答

2
引用Sun公司关于他们内置的POP3提供程序的文档(我假设你正在使用) - 文档位于/docs/sundocs中。
POP3不支持永久标志(请参见Folder.getPermanentFlags())。 特别是,Flags.Flag.RECENT标志将永远不会设置为POP3消息。 应用程序需要确定在POP3邮箱中哪些邮件是“新邮件”。 有几种策略可以实现这一点,具体取决于应用程序和环境的需求:一种简单的方法是跟踪应用程序看到的最新消息。 另一种方法是跟踪已经看到的所有邮件的UID(请参见下文)。 另一种方法是下载所有邮件到本地邮箱中,以便POP3邮箱中的所有邮件都是新邮件。 所有方法都需要与客户端相关联的某些永久存储。
我认为这基本上回答了你的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接