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. Message's Sixe - 无法跟踪可以告诉 Message 大小的 MAPI 属性。Outlook 消息列表窗口中可见的消息大小。我发现消息大小与 .msg 文件大小不同。

  4. 邮件的接收日期 - 无法跟踪 MAPI 属性。它与消息的发送日期不同。msg.getMessageDate() 返回的是消息发送日期。我发现它在邮件标题中可用,但邮件标题仅适用于收到的邮件,不适用于已发送的邮件。

  5. 如果邮件通信发生在同一 Exchange 服务器或同一域中的用户之间,我想要以下格式的发件人和收件人的详细信息。例如:“testUser1”

  6. 即使发件人和收件人都可以使用电子邮件 ID(以及收件人和抄送标识),也可以。我尝试过 msg.getRecipientEmailAddressList() 来获取收件人电子邮件地址,但在这种情况下,所有收件人和抄送收件人都组合在一起,我们的要求是以不同方式存储收件人和抄送收件人的详细信息。

  7. 我无法获取发件人的电子邮件地址。

请帮助我哪些 MAPI 属性可用于服务器目的,以及如何获取与 MAPI 属性关联的值来满足需求。

提前致谢。

4

0 回答 0