2012-06-28 55 views
2

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

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

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

+0

你觉得像getUnread任何方法()收件箱文件夹中。 –

+0

是的,有一种方法可以调用inbox.getUnreadMessageCount(); – yashdosi

回答

2

从Sun的关于他们的捆绑POP3提供程序文档(这我假设你正在使用)报价 - 文件位于/文档/ sundocs

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

我觉得非常回答您的问题

相关问题