0

私はApache POI APIを掘り下げて、MSGファイルから取得するすべてのプロパティを試していました。

を使用して 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 のすべてのアクセス可能なプロパティが一覧表示されました。それらの1つは次のように見えました:

__substg1.0_800A001F (32778) 04

HEX 800A ここでプロパティの意味を見つけようとしました。(このトピックのサブノードにはプロパティがリストされています。)

Q1. ただし、 に対応するプロパティが見つかりませんでしたHEX 800A。では、何を推測すればよいでしょうか?

また、他にも多少関連する質問があります。

Q2. Apache POI はすべてのプロパティを公開しMAPIMessageていますか?

Q3. そうでない場合、Apache POI の有無にかかわらず、Java のすべての MAPI プロパティにアクセスする他の方法はありますか。

4

1 に答える 1

0

まず、 Apache POI Dev Listに従っていない場合は、非常に低レベルの HSMF クラスを使用することに少し注意してください。最近、固定長プロパティのサポートを追加するために HSMF にいくつかの更新が行われましたが、さらに多くの更新が必要です。一般に、高レベルのクラスにはかなり安定した API があり (スクラッチパッドの警告があっても)、新しいサポートが追加されると、低レベルのクラスは変更される可能性があります (変更される場合もあります)。あなたが開発者リストに載っていない場合、これはショックかもしれません...

次は、何が何であるかを理解することです。ここでHSMF Dev Toolsの出番です。単純なTypesListerを使用すると、POI が認識しているすべてのタイプを確認できます (サポートされているタイプよりもわずかに多くなります)。一方、HSMFDumpは、ファイルをデコードするために最善を尽くします。チャンクが何らかの既知のタイプである場合、それら 2 つの間で、それが何であり、何が含まれているかを理解できることを願っています

最後に - すべてのプロパティを取得します。上記で示唆したように、Apache POI は .msg ファイルの可変長プロパティのみをサポートしていました。これは部分的に修正され、固定長もサポートされていますが、さらに作業が必要です。開発者リストにボランティアを歓迎します! MAPIMessageはすべての共通ビットを提供しますが、さまざまなチャンク グループへのアクセスも提供します。(特定のメッセージは、メイン、受信者、添付ファイルなど、いくつかの異なるチャンクに分散されます)。そこから、固定長プロパティへのアクセスを提供するPropertiesChunkとともに、すべてのプロパティを取得できます。

于 2014-05-06T21:42:06.673 に答える