使用EWS下载带有附件的邮件



我有一个要求我需要下载电子邮件并保存(作为eml文件(,并使用Java和EWS托管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

附件将在MIME内容中那里。另外,您的代码不能满足嵌套的附件,例如附件等。

最新更新