2017-06-23 68 views
0

Outlook 2016で保存されたメッセージからすべての添付ファイルをネイティブメッセージ形式で抽出するJavaプログラムを作成する必要があります。プログラムはインラインイメージをスキップする必要があります。また、メールの中には、マルチパート/代替の部分があり、プログラムは「最良の」コンテンツタイプを取得する必要があります。 text/html over text/plain。Apache POI-HSMFを使用してoutlook msgファイルからContent-TypeおよびContent-Dispositionを取り出す方法は?

これを行うには、メッセージのすべての部分と添付ファイルのコンテンツタイプとコンテンツの配置を調べる必要があります。 「MIMEタグ」(すなわちコンテンツ・タイプ)は一部のみ添付のために返されること、

public static void main(String[] args) throws IOException { 
    String mfile = "test/test2.msg"; 
    MAPIMessage msg = new MAPIMessage(mfile); 

    AttachmentChunks[] attachments = msg.getAttachmentFiles(); 
    if (attachments.length > 0) { 
     for (AttachmentChunks attachment : attachments) { 
      System.out.println("long file name = " + attachment.getAttachLongFileName()); 
      System.out.println("content id = " + attachment.getAttachContentId()); 
      System.out.println("mime tag = " + attachment.getAttachMimeTag()); 
      System.out.println("embedded = " + attachment.isEmbeddedMessage()); 
     } 
    } 
    msg.close(); 
} 

問題であり、他のすべてのためにnullを返す:

私は次のことを試みました。コンテンツの配置は完全に欠落しているようです。

は、例えば、私はOL2016によって保存されたメールに次の出力を取得する(メールがPDFの添付ファイルとインラインロゴ画像が含まれています):

long file name = Vertretungsvollmacht Übersiedlung.pdf 
content id = null 
mime tag = null 
embedded = false 
long file name = image001.jpg 
content id = [email protected] 
mime tag = image/jpeg 
embedded = false 

は外にこれらの属性を取得する方法はありますmsgファイルか、より完全な& Apache POI-HSMF以外のライブラリでJavaで必要なものを実現する便利な方法はありますか?コンテンツ・処分(インラインまたは添付ファイル)を取得するために

答えて

0

、私は次のことをやった:

String disposition = "attachment"; 
    if (contentId != "") 
     if (body.contains(contentId.toString())) 
      disposition = "inline"; 

コンテンツタイプを取得するには、私は、添付ファイルのファイル拡張子から例えばそれを得ています:

 String ext = fileNameOri.substring(fileNameOri.lastIndexOf(".") + 1); 
     switch (ext.toLowerCase()) { 
     case "xlsx": 
      ct = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      break; 
     } 

メイムタイプのリストは、たとえばhttps://wiki.selfhtml.org/wiki/MIME-Type/%C3%9Cbersicht

もちろん、これはAttachmentChunks.getAttachMimeTag()が空の文字列を返す場合にのみ行う必要があります。

0

添付ファイルがcontent-idタグを持っていても、埋め込み画像ではありません。Lotus Notesはすべての添付ファイルにcontent-idを追加します。有効なチェックは、HTML本体をロードして、<img>タグが何を参照しているかを調べることです。

+0

これは当てはまります。実際には、私はcontent-idがHTML本文内に現れるかどうかをチェックしましたが、もちろんこのチェックはより洗練されたものでした。 –

関連する問題