JavaMail - 多个和搜索词的问题

JavaMail - Issue with Multiple And Search Terms

我想从我的 gmail 帐户的特定文件夹中获取最近未读的具有特定主题的电子邮件。我正在使用 JavaMail API 如下,但结果为 returns 0。但是,如果我只单独使用 subjectTerm,我会看到结果。请让我知道我哪里出错了。谢谢。

请注意,为了代码简单,我在下面使用了 messages[0] 而不是遍历 messages 数组以将其粘贴到此处。

     public void openMailBox(String hostname, String username, String password, String folderName, String subject) throws MessagingException, GeneralSecurityException, IOException{
        props = System.getProperties();
        props.setProperty("mail.store.protocol", "imaps");
        props.setProperty("mail.imaps.host", "imap.gmail.com");
        props.setProperty("mail.imaps.port", "993");
        props.setProperty("mail.imaps.ssl.enable", "true");
        props.put("mail.imaps.ssl.socketFactory", new MailSSLSocketFactory()); 
        session = Session.getInstance(props);
        store = session.getStore();
        store.connect(username, password);
        folder = store.getFolder(folderName);
        folder.open(Folder.READ_ONLY);
        messages = folder.search(getSearchTerm(subject));
        if (messages[0].isMimeType("multipart/*")){
             Multipart multipart = (Multipart) messages[0].getContent();
             for(int i=0;i<multipart.getCount();i++) {
                BodyPart bodyPart = multipart.getBodyPart(0);
                if (bodyPart.isMimeType("text/*")) {
                    msg = msg+bodyPart.getContent().toString();
                }
             }
        }else{
            msg = messages[0].getContent().toString();
        }
        System.out.println(msg);
        folder.close(true);
        store.close();
    }

     public SearchTerm getSearchTerm(String subject){
         subjectTerm = new SubjectTerm(subject);
         unseenFlagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
         recentFlagTerm; = new FlagTerm(new Flags(Flags.Flag.RECENT), true);
         return new AndTerm(subjectTerm, new AndTerm(unseenFlagTerm, recentFlagTerm));    
     } 
}

您使用的是什么邮件服务器?

一些邮件服务器没有以任何有用的方式实现 RECENT 标志,因此邮件可能不会被标记为 RECENT。尝试省略最近的字词,看看是否能得到更多结果。

如果这没有帮助,请添加代码以转储所有消息的标志,然后 post JavaMail debug output 显示所有消息的标志以及搜索请求和响应。

另请注意,某些 IMAP 服务器没有完全或正确地执行 SEARCH 命令,因此无法处理您正在进行的搜索。

最后,请注意您不需要设置 socketFactory 属性 除非您以比上面示例代码中显示的更有趣的方式使用 MailSSLSocketFactory。