0

我正在挖掘 Apache POI API,尝试从 MSG 文件中提取的所有属性。

我使用POIFSChunkParser.

这是代码:

try
{
    InputStream is = new     FileInputStream("C:\\path\\email.msg");
    POIFSFileSystem poifs = new POIFSFileSystem(is);
    POIFSChunkParser poifscprsr = new POIFSChunkParser();
    ChunkGroup[] chkgrps = poifscprsr.parse(poifs);
    for(ChunkGroup chunkgrp : chkgrps )
    {
        for(Chunk chunk : chunkgrp.getChunks())
        {
            System.out.println(chunk.getEntryName() + " ("
                    + chunk.getChunkId() + ") " + chunk);
        }
    }           
}
catch(FileNotFoundException fnfe)
{
    System.out.println(fnfe.getMessage());
}
catch(IOException ioe)
{
    System.out.println(ioe.getMessage());
}

在输出中,它列出了 MSG 的所有可访问属性。其中一个看起来像这样:

__substg1.0_800A001F (32778) 04

我试图找到HEX 800A 这里的财产有什么意义。(本主题的子节点列出了属性。)

Q1。但是我没有找到对应的属性HEX 800A。那我应该推断什么?

另外,我还有一些其他但有些相关的问题:

Q2。Apache POI 是否通过MAPIMessage(我也尝试探索 MAPIMessage 的所有方法并开始认为它没有)公开所有属性?

Q3。如果没有,是否有任何其他方法可以使用或不使用 Apache POI 访问 Java 中的所有 MAPI 属性。

4

1 回答 1

0

首先,如果您不遵循Apache POI 开发列表,请对使用非常低级别的 HSMF 类有点警惕。最近对 HSMF 进行了一些更新,以开始添加对固定长度属性的支持,并且还需要更多。通常,高级类将具有相当稳定的 API(即使有暂存器警告),较低级别的类可以(有时会)随着新支持的添加而改变。如果您不在开发列表中,这可能会令人震惊......

接下来 - 弄清楚什么是东西。这就是HSMF 开发工具的用武之地。简单的TypesLister将让您检查 POI 知道的所有类型(略多于它支持的类型),而HSMFDump会尽力为您解码文件。如果您的块属于任何已知类型,那么在这两者之间您可以希望找出它是什么以及它包含什么

最后 - 获取所有属性。如上所述,Apache POI 过去仅支持 .msg 文件中的可变长度属性。这部分已得到纠正,其中也有一些固定长度的支持,但还需要做更多的工作。欢迎志愿者加入开发列表MAPIMessage将为您提供所有公共位,但也将让您访问不同的块组。(给定的消息将分布在几个不同的块中,例如主块、收件人块、附件块等)。从那里,您可以获得所有属性,以及可以访问固定长度属性的PropertiesChunk 。

于 2014-05-06T21:42:06.673 回答