如何从 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);
我想获取内容类型为"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);