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