我在使用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属性。
消息&#39>六 - 无法跟踪可以告诉消息大小的MAPI属性。消息的大小在Outlook消息列表窗口中可见。我发现邮件大小不同于.msg文件大小。
邮件的接收日期 - 无法跟踪MAPI属性。它与消息的发送日期不同。 msg.getMessageDate()返回的是消息发送日期。我发现它在邮件标题中可用,但邮件标题仅适用于收到的邮件,不适用于已发送的邮件。
如果邮件通信发生在同一个Exchange服务器或同一个域内的用户之间,我希望发送以下格式的发件人和收件人的详细信息。 EX:" testUser1"
即使电子邮件ID可用于发件人和receipent(以及To和CC识别),也可以。我已经尝试了msg.getRecipientEmailAddressList()来获取重新接收的电子邮件地址,但在这种情况下,所有To和CC收件人被合并在一起,我们的要求是以不同的方式存储To和CC收件人的详细信息。
我无法提取发件人的电子邮件地址。
请帮助我将MAPI属性用于服务器目的以及如何获取与MAPI属性关联的值以满足服务器要求。
提前致谢。