gpt4 book ai didi

java - 如何使用 Apache POI - HSMF 提取嵌套到另一个 Outlook 消息中?

转载 作者:行者123 更新时间:2023-11-30 07:21:05 24 4
gpt4 key购买 nike

我正在使用 Apache POI - HSMF 从 Outlook 消息文件中提取附件。除了嵌套消息外,它工作正常。如果一条消息附加到另一条消息,我就可以获取这些文件。如果消息是嵌套的,我会得到信息,但我需要文件。

MAPIMessage msg = new MAPIMessage(fileName)
for(AttachmentChunks attachment : msg.getAttachmentFiles()) {
if(attachment.attachmentDirectory!=null){
MAPIMessage nestedMsg attachment.attachmentDirectory.getAsEmbededMessage();
// now save nestedMsg as a msg-file
}
}

是否可以将嵌套消息文件保存为常规消息文件?

最佳答案

将评论提升为答案。我可以告诉您如何将嵌入的 Outlook 消息提取到一个新文件中,然后 Apache POI 将愉快地打开该文件。我不太确定的是,嵌入式邮件是否包含 Outlook 期望在独立邮件中找到的所有内容,因此我不能保证生成的文件将在 Outlook 中正常打开...

首先,Outlook 中的嵌入式资源。根据它的种类,它可能存储在一个常规字节 block 中,在一些其他类型的特殊 block 中(例如压缩 RTF),或者它可能是文件中的一个自包含子目录。嵌入式消息以后一种方式存储。

如果您想提取嵌入的消息,您需要做的是使用 POIFSFileSystem 创建一个新的 OLE2 文件容器(所有 Outlook 消息都存储在 OLE2 容器中)。然后,您需要将源 OLE2 容器中嵌入消息目录的内容复制到新容器的根目录中。最后,将该 POIFSFileSystem 写入一个新文件,您的提取就完成了!

您可能想要执行以下操作:

 MAPIMessage msg = new MAPIMessage(new NPOIFSFileSytem(new File("test.msg")));
if (msg.attachmentChunks != null) {
int number = 0;
for (AttachmentChunk att : msg.attachmentChunks) {
if (att.attachmentDirectory != null) {
number++;
POIFSFileSystem newMsg = new POIFSFileSystem();
EntryUtils.copyNodes( att.attachmentDirectory, newMsg.getRoot() );
FileOutputStream out = new FileOutputStream("embedded-" + number + ".msg");
newMsg.write(out);
out.close();
}
}
}

如果 Outlook 出现问题,请尝试在 Outlook 中打开源文件,将嵌入的消息保存到新文件,然后使用 org.apache.poi.poifs.dev.POIFSListerorg.apache.poi.poifs.dev.POIFSDump 来比较 outlook 提取的文件和 POI 提取的文件,看看您是否可以发现 outlook 所做的任何更改....

关于java - 如何使用 Apache POI - HSMF 提取嵌套到另一个 Outlook 消息中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com