无法使用Aapche_poi_3.10 API跟踪和获取消息.msg文件的MAPI属性值

时间:2014-06-04 10:38:05

标签: java email apache-poi msg

我在使用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. 消息&#39>六 - 无法跟踪可以告诉消息大小的MAPI属性。消息的大小在Outlook消息列表窗口中可见。我发现邮件大小不同于.msg文件大小。

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

  5. 如果邮件通信发生在同一个Exchange服务器或同一个域内的用户之间,我希望发送以下格式的发件人和收件人的详细信息。 EX:" testUser1"

  6. 即使电子邮件ID可用于发件人和receipent(以及To和CC识别),也可以。我已经尝试了msg.getRecipientEmailAddressList()来获取重新接收的电子邮件地址,但在这种情况下,所有To和CC收件人被合并在一起,我们的要求是以不同的方式存储To和CC收件人的详细信息。

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

  8. 请帮助我将MAPI属性用于服务器目的以及如何获取与MAPI属性关联的值以满足服务器要求。

    提前致谢。

0 个答案:

没有答案