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

Java 无法使用Aapche_poi_3.10 API跟踪和获取message.msg文件的MAPI属性值,java,email,apache-poi,msg,Java,Email,Apache Poi,Msg,我在使用ApachePOI3.10JAR文件读取.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 Mes

我在使用ApachePOI3.10JAR文件读取.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属性值时遇到困难

  • 邮件的分区-我无法找出哪个MAPI属性将告诉我邮件是否已分区

  • 邮件已签名-无法跟踪可以显示邮件签名状态的MAPI属性

  • 邮件的六个-无法跟踪可以确定邮件大小的MAPI属性。邮件大小在outlook邮件列表窗口中可见。我发现消息大小与.msg文件大小不同

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

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

  • 即使电子邮件id可用于发件人和收件人(以及收件人和抄送标识),也可以。我已尝试使用msg.getRecipientEmailAddressList()获取最近的电子邮件地址,但在本例中,所有收件人和抄送收件人都组合在一起,我们的要求是以不同的方式存储收件人和抄送收件人的详细信息

  • 我无法获取发件人的电子邮件地址

  • 请帮助我将哪个MAPI属性用于服务器用途,以及如何获取与MAPI属性关联的值以满足要求


    提前感谢。

    您是否尝试获取所有MAPI属性,而不仅仅是具有帮助获取程序的属性?打电话给?谢谢你的回复。是的,我尝试使用Set entry=msg.getMainChunks().getProperties().entrySet();但指定的属性在属性列表中仍然不可见。其中一些属性可能会出现在收件人区块上-您也检查了那里的属性了吗?我面临同样的问题:我无法读取接收日期;调用msg.getMessageDate()会得到异常ChunkNotFound异常。查看其他块,我只看到标题中的日期。这可能是一个bug,如本文所述:在ApachePOI3.11中修复