通过电子邮件发送邮件文件附件在内存中

时间:2014-03-18 18:54:34

标签: java javamail

我有一个新的要求,在发送附件之前(单独地,而不是分组)压缩附件。我认为目前正在使用的代码是典型代码:

    for (final File attachment : this.files()) {
        final BodyPart attachmentPart = new MimeBodyPart();
        final DataSource source = new FileDataSource(attachment);
        attachmentPart.setDataHandler(new DataHandler(source));
        attachmentPart.setFileName(attachment.getName());
        multipart.addBodyPart(attachmentPart);
    }

我想在内存中压缩文件而不是按磁盘。不幸的是,在MimeBodyPart上,我看到附加文件的唯一方法是使用attachFile()setDataHandler()attachFile()仅适用于已在磁盘上的文件,采用FileString文件名参数。

DataHandler是我的另一种选择。一个构造函数需要DataSource,但FileDataSource实现没有压缩选项(并不奇怪)。另一个构造函数允许我传入Object和MIME类型,但我确实没有内存中的对象,只有ZipOutputStream

那我该怎么做?我可以依赖于将临时文件写入磁盘,但我真的不愿意。我应该尝试编写自己的FileCompressionDataSource实现吗?怎么可能接近这个?

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

在内存中执行此操作的一种方法可能是使用MimeBodyPart和自定义DataContentHandler实现,该实现知道如何将对象转换为字节。