Search code examples
javagmail

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


I want to get the message number list that the content type is "multipart".I tried using javaxmail, it works but i don't want to get the messages and then do the filter.

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

How to do it. thanks for any help.


Solution

  • You can implement a new subclass of SearchTerm that does that, but the message would probably have to be fetched anyway. I don't think you can avoid it.

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

    UPDATE

    You could actually use a HeaderTerm:

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