Java 从响应对象生成ImapMessage

Java 从响应对象生成ImapMessage,java,jakarta-mail,imap,Java,Jakarta Mail,Imap,我创建了一个自定义命令来检索同一请求中的多个对象(以解决一些性能问题),而不是使用文件夹方法.getMessage(..),在我的示例中,该方法检索了ImapMessage对象: Argument args = new Argument(); args.writeString(Integer.toString(start) + ":" + Integer.toString(end)); args.writeString("BODY[]"); FetchRespo

我创建了一个自定义命令来检索同一请求中的多个对象(以解决一些性能问题),而不是使用文件夹方法
.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++) {
            ...
        }
    }
我的问题是,如何将此响应转换为
ImapMessage


谢谢。

是否要同时下载多封邮件的全部邮件内容?你试过使用吗?这将导致Folder.fetch下载整个邮件内容,然后您可以使用邮件对象访问这些内容。

我尚未成功将其转换为IMAPMessage,但现在我可以将其转换为MIME邮件。它并不完美,但我想它现在必须起作用:

FetchResponse fetch = (FetchResponse) r[i];
BODY body = (BODY) fetch.getItem(0);
ByteArrayInputStream is = body.getByteArrayInputStream();
MimeMessage mm = new MimeMessage(session, is);
然后,它可以用来获取如下信息:

    if (r[i] instanceof IMAPResponse) {
       IMAPResponse imr = (IMAPResponse)r[i];
String contentType = mm.getContentType();
Object contentObject = mm.getContent();

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

据我所知,提取要求我已经下载了消息信息,因为其中一个参数是消息数组。我想在一次通话中列出并携带所有信息。我创建的自定义命令可以做到这一点,但我找不到将其转换为IMAPMessage的方法。谢谢,你误会了。返回消息对象的getMessage方法根本不下载任何内容。它们只返回本地消息对象,这些对象是服务器上可用信息的代理。当您对消息对象调用其中一个方法时,如果服务器还没有信息,它会从服务器获取信息。通过使用fetch方法,JavaMail会预取信息,以便在调用Message对象上的方法时信息可用。