我有一个要求,我需要下载电子邮件并将其保存(作为eml文件),并使用java和ews managed api将其每个附件作为单独的文件保存。在互联网上进行了一些搜索后,我编写了以下java代码,它似乎正在做我想要的。但是我对它的效率有一些疑问,因为我认为在这种方法中,每个附件都是从远程下载两次。该评论是否正确,如果有,是否有办法更有效地做到这一点?
item.load(new PropertySet(ItemSchema.MimeContent,ItemSchema.Attachments));
MimeContent mc = item.getMimeContent();
try(FileOutputStream fs = new FileOutputStream("d:\\emailtmp\\"+ Utils.cleanFileName(item.getId().getUniqueId())+".eml");){
fs.write(mc.getContent());
}
AttachmentCollection attachments = item.getAttachments();
if(attachments == null )
return ;
for(Attachment a : attachments){
if (a instanceof FileAttachment){
try(FileOutputStream stream = new FileOutputStream("d:\\emailtmp\\"+Utils.cleanFileName(((FileAttachment) a).getName()));){
FileAttachment fileAttachment = (FileAttachment)a;
fileAttachment.load(stream);
}
}
}
PS:使用EWS托管Api 2.0-Java8
答案 0 :(得分:1)
附件将在Mime内容中,因此如果您想提高效率,则应该能够在使用Mime解析器下载Mime内容后重新处理Mime内容并从中提取附件。此外,您的代码不能满足嵌套附加内容,例如附加消息的附件等。