我在使用 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 属性值时遇到了困难。
消息的分区 - 我无法找出哪个 MAPI 属性会告诉我消息是否已分区。
已签名的消息 - 无法跟踪可告知消息签名状态的 MAPI 属性。
Message's Sixe - 无法跟踪可以告诉 Message 大小的 MAPI 属性。Outlook 消息列表窗口中可见的消息大小。我发现消息大小与 .msg 文件大小不同。
邮件的接收日期 - 无法跟踪 MAPI 属性。它与消息的发送日期不同。msg.getMessageDate() 返回的是消息发送日期。我发现它在邮件标题中可用,但邮件标题仅适用于收到的邮件,不适用于已发送的邮件。
如果邮件通信发生在同一 Exchange 服务器或同一域中的用户之间,我想要以下格式的发件人和收件人的详细信息。例如:“testUser1”
即使发件人和收件人都可以使用电子邮件 ID(以及收件人和抄送标识),也可以。我尝试过 msg.getRecipientEmailAddressList() 来获取收件人电子邮件地址,但在这种情况下,所有收件人和抄送收件人都组合在一起,我们的要求是以不同方式存储收件人和抄送收件人的详细信息。
我无法获取发件人的电子邮件地址。
请帮助我哪些 MAPI 属性可用于服务器目的,以及如何获取与 MAPI 属性关联的值来满足需求。
提前致谢。