我创建了一个自定义命令来检索同一请求中的多个对象(为了解决一些性能问题),而不是使用文件夹方法[^']*
,在我的案例中检索.getMessage(..)
对象:
ImapMessage
目前,我正在验证对象是否为 Argument args = new Argument();
args.writeString(Integer.toString(start) + ":" + Integer.toString(end));
args.writeString("BODY[]");
FetchResponse fetch;
BODY body;
MimeMessage mm;
ByteArrayInputStream is = null;
Response[] r = protocol.command("FETCH", args);
Response status = r[r.length-1];
if(status.isOK()) {
for (int i = 0; i < r.length - 1; i++) {
...
}
}
,如下所示:
ImapResponse
我的问题是,如何将此回复转换为 if (r[i] instanceof IMAPResponse) {
IMAPResponse imr = (IMAPResponse)r[i];
?
谢谢。
答案 0 :(得分:1)
您是否尝试一次下载多封邮件的整个邮件内容?您是否尝试过使用IMAPFolder.FetchProfileItem.MESSAGE?这将导致Folder.fetch下载整个邮件内容,然后您可以使用Message对象访问它。
答案 1 :(得分:1)
我还没有成功将其转换为IMAPMessage,但我现在能够将其转换为MIME消息。它并不完美,但我想它现在必须起作用:
FetchResponse fetch = (FetchResponse) r[i];
BODY body = (BODY) fetch.getItem(0);
ByteArrayInputStream is = body.getByteArrayInputStream();
MimeMessage mm = new MimeMessage(session, is);
然后,它可以用来获取这样的信息:
String contentType = mm.getContentType();
Object contentObject = mm.getContent();
还有其他方法可以获取发件人,日期等信息。