コメントを回答に昇格させる。埋め込まれた Outlook メッセージを新しいファイルに抽出する方法を説明できます。このファイルは、Apache POI で問題なく開くことができます。あまり確信が持てないのは、埋め込みメッセージに、Outlook がスタンドアロン メッセージで検出することを期待するすべてのものが含まれているかどうかです。したがって、結果のファイルが問題なく Outlook で開くとは約束できません...
まず、Outlook に埋め込まれたリソースです。その種類に応じて、通常のバイト チャンク、他の種類の特別なチャンク (圧縮 RTF など) に格納されるか、ファイル内の自己完結型サブディレクトリに格納される場合があります。埋め込みメッセージは後者の方法で保存されます。
埋め込まれたメッセージを抽出する場合は、新しい OLE2 ファイル コンテナーを作成し、次を使用しPOIFSFileSystem
ます (すべての 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.POIFSLister
、org.apache.poi.poifs.dev.POIFSDump
outlook で抽出されたファイルと POI で抽出されたファイルを比較し、変更を見つけられるかどうかを確認してください。その見通しは....