使用ews下载带附件的邮件

时间:2017-04-24 12:38:05

标签: java exchangewebservices

我有一个要求,我需要下载电子邮件并将其保存(作为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

1 个答案:

答案 0 :(得分:1)

附件将在Mime内容中,因此如果您想提高效率,则应该能够在使用Mime解析器下载Mime内容后重新处理Mime内容并从中提取附件。此外,您的代码不能满足嵌套附加内容,例如附加消息的附件等。