从响应对象生成ImapMessage

时间:2015-10-23 19:01:19

标签: java javamail imap

我创建了一个自定义命令来检索同一请求中的多个对象(为了解决一些性能问题),而不是使用文件夹方法[^']*,在我的案例中检索.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];

谢谢。

2 个答案:

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

还有其他方法可以获取发件人,日期等信息。