2012-02-23 17 views
0

POI hsmfを使用してOutlookの.msgファイルからBillingInformationフィールドを抽出しようとしていますが、ChunkNotFoundExceptionが発生するたびにそのフィールドが抽出されます。私はフィールドにコンテンツがあることをOutlookで検証しました。Apache POIで共通プロパティを読み取る方法HSMF

public class MessageReader { 
    private static final int SUBJECT_CHUNK = 0x0037; 
    private static final int BILLING_INFORMATION_CHUNK = 0x00008535; 
    public static void main(String[] argv) { 
     try { 
      MAPIMessage mapiMessage = new MAPIMessage("MessageWithBillingInformation.msg"); 
      System.out.println(mapiMessage.getStringFromChunk(new StringChunk(SUBJECT_CHUNK, true))); 
      System.out.println(mapiMessage.getStringFromChunk(new StringChunk(BILLING_INFORMATION_CHUNK, true))); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (ChunkNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

私は情報を課金のための右のIDとしてリスト0x00008535を見つけたすべてのドキュメント: http://msdn.microsoft.com/en-us/library/cc765867.aspx

はそう、0x800AのchunkIDを使用して

+0

チャンクがルートにあることは確かですか?他のセクションの1つの下に格納すると、チャンクが見つからない理由を説明できます。私は、org.apache.poi.poifs.dev.POIFSListerとorg.apache.poi.hsmf.dev.HSMFDumpを使って、どこに住んでいるかを正確に確認してみることをお勧めします。 – Gagravarr

+0

HSMFDumpはそれを「Chunks」セクションの下に、名。しかし、idNameは、MAPIProperty.UNKNOWNに等しいことに基づいて(不明)としてリストします。 –

+0

あなたはPOIFSListerでそれを見ることができますか? (チャンクIDとタイプは名前に含める必要があります) – Gagravarr

答えて

1

は、課金情報フィールドを読み取るための作品をありがとうをコードは次のようになります。

public class MessageReader { 
private static final int SUBJECT_CHUNK = 0x0037; 
private static final int BILLING_INFORMATION_CHUNK = 0x800A; 
public static void main(String[] argv) { 
    try { 
     MAPIMessage mapiMessage = new MAPIMessage("MessageWithBillingInformation.msg"); 
     System.out.println(mapiMessage.getStringFromChunk(new StringChunk(SUBJECT_CHUNK, true))); 
     System.out.println(mapiMessage.getStringFromChunk(new StringChunk(BILLING_INFORMATION_CHUNK, true))); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (ChunkNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

}

関連する問題