2

Apache POI パッケージを使用して Outlook .msg メール ファイルを読み取るコードを作成しようとしています。

ディレクトリ内のすべての .msg ファイルのメッセージ ID を取得しようとしています。ただし、一部の .msg ファイルでは、これらの messageId は null です。いくつかの観察の後、これらは返信メッセージ (テキスト本文の最初の単語として「返信」という単語が含まれるメッセージ) であることに気付きました。他の To および From メッセージについては、メッセージ ID を正しく取得しています。これはなぜですか?

コード

private String getMsgIds(String srcDir) throws IOException
{
    String cfile; //current files - temporary string to hold file name in for loop
    String msgIds = ""; //message Ids for all messages
    MAPIMessage msg = null; //temporary message variable to hold message while iterating        
    String msgId = "";

    File folder = new File(srcDir);
    File[] listOfFiles = folder.listFiles();


    for (int i = 0; i < listOfFiles.length; i++) 
    {

      if (listOfFiles[i].isFile())  
      {           
          cfile = listOfFiles[i].getName();
          if (cfile.endsWith(".msg") || cfile.endsWith(".MSG"))
          {
              msg = new MAPIMessage(srcDir + "\\" + cfile);
          }
          try
          {
              Chunks chks = msg.getMainChunks();
              StringChunk strMsgId = chks.messageId;

              if(strMsgId != null)
              {
                  msgId = strMsgId.getValue();
                  msgIds += cfile+": "+msgId+"\n";
              }
              else
                  msgIds += cfile+": \n";
          }
          catch(NullPointerException e)
          {
              //ignore
          }

      }
    }

    return msgIds;
}

出力

12.msg: 
Brand ABC.msg: <093F1AED3DF94C4D878DBB625FC76805FFA809@xyz.abc.com>
RE  Test sent mail rule sent on behalf 1.msg: 
RE  Test sent mail rule sent on behalf 2.msg: 
Test mail to check sent rule on Ramprasad 2.msg: <2909CF96D97FDD43BC5EF34B2E2B8A317E5C3A@xyz.abc.com>
Test sent mail rule 1.msg: <B9EF3A9EC5BE2E4297FB08558016D9510F1B2A@xyz.abc.com>
Test sent mail rule 2.msg: <B9EF3A9EC5BE2E4297FB08558016D9510F1B3F@xyz.abc.com>
Test sent mail rule sent on behalf 1.msg:      <B9EF3A9EC5BE2E4297FB08558016D9510F1B51@xyz.abc.com>
Test sent mail rule sent on behalf 2.msg: <B9EF3A9EC5BE2E4297FB08558016D9510F1B6D@xyz.abc.com>
Test wth CC.msg: <EE6C216DE13B484EB4D860361A19C1D7D47905@xyz.abc.com>
test.msg: <EE6C216DE13B484EB4D860361A19C1D7D4780F@xyz.abc.com>

上記の注意事項 1、3、4 番目のメッセージの messageId は取得されません。 返信メッセージのファイルに MessageIds がないかどうかを知ることはできますか? または、Apache POI が返信メッセージからメッセージ ID を読み取ることができない場合は?

アップデート

BufferedReader と InputStream を使用して生の文字ストリームを取得しようとしました。文字ストリームを観察すると、これらのファイルには MessageId がありませんが、他のファイルにはあります。では、何が問題なのだろうか?

4

0 に答える 0