从响应对象生成 ImapMessage

Generate ImapMessage from Response Object

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

我的问题是,如何将此回复转换为 ImapMessage

谢谢。

您是否尝试一次下载多条消息的完整消息内容?您是否尝试过使用 IMAPFolder.FetchProfileItem.MESSAGE?这将导致 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);

然后,它可以用来获取这样的信息:

String contentType = mm.getContentType();
Object contentObject = mm.getContent();

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