如何从 gmail 中获取内容类型为 "multipart" 的邮件编号?

how to get message number that content type 's "multipart" from gmail?

我想获取内容类型为"multipart"的消息编号列表。我尝试使用javaxmail,它有效,但我不想获取消息然后进行过滤。

 try {
  Session emailSession = Session.getDefaultInstance(this.setPropertiesParams());
  Store store = emailSession.getStore("imaps");
  store.connect(host, email, emailPassword);
  Folder emailFolder;
  emailFolder = store.getFolder("Documents");      
  emailFolder.open(Folder.READ_ONLY);
  SearchTerm andTerm = searchMessageByDate(fromDate, toDate);      
  Message[] messages = emailFolder.search(andTerm);
  Message[] finalMessages = emailFolder.search(new SubjectTerm("Scan de votre document"), messages);   

  for (Message message : finalMessages) {
        String contentType = message.getContentType();
        if (contentType.contains("multipart")) {
          Integer messageNumber = message.getMessageNumber();
          numberList.add(messageNumber);
        }
  }
  emailFolder.close(false);
  store.close();

怎么做。感谢您的帮助。

您可以实现一个新的 SearchTerm 子类来执行此操作,但无论如何都可能必须获取消息。我不认为你可以避免它。

public class ContentTypeTerm extends SearchTerm {
    @Override
    public boolean match(Message msg) {
        try {
            return msg.isMimeType("multipart/*");
        } catch (MessagingException ex) {
            throw new RuntimeException(ex.getMessage());
        }
    }
}

更新

你实际上可以使用 HeaderTerm:

SearchTerm[] terms = {
        searchMessageByDate(fromDate, toDate),
        new HeaderTerm("Content-Type", "multipart/.*")
    };
SearchTerm andTerm = new AndTerm(terms);