Java を使用して Gmail からメールを取得しようとしています。私は java-gmail-imap ライブラリを使用しています。message.getContent() を取得しようとすると、常に Inputstream が返されます。パーツを解析するのに十分な情報が得られません。私のコードは次のようになります。何が足りないのか教えてください。
IMAPStore imapStore = OAuth2Authenticator.connectToImap(
"imap.gmail.com", 993, email, token, false);
Folder folder = imapStore.getFolder("Inbox");
if (folder.isOpen()) {
if ((folder.getMode() & Folder.READ_WRITE) != 0) {
folder.close(false);
folder.open(Folder.READ_ONLY);
}
} else {
try {
folder.open(Folder.READ_ONLY);
} catch (Exception e) {
e.printStackTrace();
}
}
Message[] messages = null;
SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT, lastDate);
messages = folder.search(newerThan);
FetchProfile fp = new FetchProfile();
fp.add("X-GM-MSGID");
fp.add(UIDFolder.FetchProfileItem.UID);
fp.add(IMAPFolder.FetchProfileItem.X_GM_MSGID);
//fp.add(FetchProfile.Item.ENVELOPE);
//fp.add(FetchProfileItem.FLAGS);
//fp.add(FetchProfileItem.CONTENT_INFO);
// fp.add("X-mailer");
folder.fetch(messages, fp);
for (Message message : messages) {
if (message != null) {
Object o = message.getContent();
if (o instanceof String) {
logger.info("Message content is string");
} else if (o instanceof Multipart) {
logger.info("Message content is multipart");
} else if (o instanceof Message) {
logger.info("Nested Message");
} else if (o instanceof InputStream) {
logger.info("Message content is inputstream");
}
}
}
編集: メールキャップを追加することで問題が修正されます
CommandMap.setDefaultCommandMap(new com.google.code.javax.activation.MailcapCommandMap(this.getClass().getClassLoader().getResourceAsStream("mailcap")));