【发布时间】:2017-11-27 00:21:50
【问题描述】:
我需要编写一个 Java 程序来从 Outlook 2016 以本机 msg 格式保存的邮件中提取所有附件。该程序应跳过内联图像。此外,一些邮件具有多部分/替代部分,程序应在其中检索“最佳”内容类型,例如text/html 覆盖 text/plain。
为此,我需要找出消息的所有部分和附件的内容类型和内容配置。
我尝试了以下方法:
public static void main(String[] args) throws IOException {
String mfile = "test/test2.msg";
MAPIMessage msg = new MAPIMessage(mfile);
AttachmentChunks[] attachments = msg.getAttachmentFiles();
if (attachments.length > 0) {
for (AttachmentChunks attachment : attachments) {
System.out.println("long file name = " + attachment.getAttachLongFileName());
System.out.println("content id = " + attachment.getAttachContentId());
System.out.println("mime tag = " + attachment.getAttachMimeTag());
System.out.println("embedded = " + attachment.isEmbeddedMessage());
}
}
msg.close();
}
问题是,“mime 标记”(即内容类型)仅针对某些附件返回,而对所有其他附件返回 null。内容配置似乎完全丢失了。
例如,我在 OL2016 保存的邮件中得到以下输出(邮件包含 PDF 附件和内联徽标图像):
long file name = Vertretungsvollmacht Übersiedlung.pdf
content id = null
mime tag = null
embedded = false
long file name = image001.jpg
content id = image001.jpg@01D2E697.12EC9370
mime tag = image/jpeg
embedded = false
有没有办法从 msg 文件中获取这些属性,或者有没有更完整、更方便的方法来使用 Apache POI-HSMF 以外的其他库在 Java 中实现我想要的?
【问题讨论】:
标签: java outlook apache-poi