1

Apache POI 3.10 jar ファイルを使用して .msg ファイルの一部の MAPI プロパティを読み取る際に問題が発生しています。

以下にコードを書きます。

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import org.apache.poi.hsmf.MAPIMessage;
import org.apache.poi.hsmf.datatypes.AttachmentChunks;

public class MessageReader {
  public static void main(String[] args) {
    try {
        FileInputStream  file = new FileInputStream("C:\\testMail_1.msg");

        MAPIMessage msg = new MAPIMessage(file);

        HashMap  msg_aspect = new HashMap();

        msg_aspect.put("attachment_count",msg.getAttachmentFiles().length);

        msg_aspect.put("from_addr", msg.getDisplayFrom());

        msg_aspect.put("i_partition", 0);

        msg_aspect.put("is_signed", false);

        msg_aspect.put("message_class", msg.getMessageClass() );

        msg_aspect.put("message_subject",msg.getSubject());

        msg_aspect.put("receive_date", msg.getMessageDate().getTime());

        msg_aspect.put("send_date", msg.getMessageDate().getTime());

        ArrayList attchChk = new ArrayList();

        for(AttachmentChunks atchChk :msg.getAttachmentFiles()){

            String attachFileName = String.valueOf(((atchChk.attachLongFileName == null)?(atchChk.attachFileName+".msg"):atchChk.attachLongFileName));

            attchChk.add(attachFileName);

        }

        msg_aspect.put("attachment_names", attchChk);

        ArrayList toAddr = new ArrayList();

        for(String user: msg.getDisplayTo().split(";")){

            if(!user.trim().equals("")){

                toAddr.add(user.trim());

            }
        }
        msg_aspect.put("to_addr", attchChk);

        ArrayList ccAddr = new ArrayList();

        for (String user : msg.getDisplayCC().split(";")) {

            if(!user.trim().equals("")){

                ccAddr.add(user.trim());

            }

        }


        msg_aspect.put("cc_addr", ccAddr);
                  }catch (Exception e) {
                                   e.printStackTrace();
              }
   }
}

次の MAPI プロパティと MAPI プロパティの値を読み取るのが困難です。

  1. メッセージのパーティション - メッセージがパーティション化されているかどうかを示す MAPI 属性を見つけることができません。

  2. 署名されたメッセージ - メッセージの署名ステータスを伝えることができる MAPI プロパティを追跡できません。

  3. メッセージのシックス - メッセージのサイズを伝えることができる MAPI プロパティを追跡できません。Outlook メッセージ リスト ウィンドウに表示されるメッセージのサイズ。メッセージのサイズが .msg ファイルのサイズと異なることがわかりました。

  4. メッセージの受信日 - MAPI プロパティを追跡できません。メッセージの送信日とは異なります。msg.getMessageDate() が返すのは、メッセージの送信日です。メッセージヘッダーで利用できることがわかりましたが、メッセージヘッダーは受信メールでのみ利用でき、送信メールでは利用できません。

  5. 同一Exchangeサーバーまたは同一ドメイン内のユーザー間でメール通信が行われた場合、送信者と受信者の詳細が次の形式で必要です。例:"testUser1"

  6. メール ID が送信者と受信者の両方で利用できる場合でも (To と CC の識別と共に)、それも問題ありません。受信者の電子メール アドレスを取得するために msg.getRecipientEmailAddressList() を試しましたが、この場合、To と CC の受信者はすべて結合されており、To と CC の受信者の詳細を別々に保存する必要があります。

  7. 送信者のメールアドレスを取得できません。

サーバーの目的で使用できる MAPI プロパティと、要件を満たすために MAPI プロパティに関連付けられた値を取得する方法を教えてください。

前もって感謝します。

4

0 に答える 0