java - 发送电子邮件之前将文件附件压缩到内存中

标签 java jakarta-mail

我有一个新要求,即在发送附件之前先对其进行压缩(单独压缩,而不是分组压缩)。我认为我当前使用的代码是典型的:

    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 实现吗?还有什么办法可以解决这个问题?

最佳答案

关于java - 发送电子邮件之前将文件附件压缩到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22488515/

相关文章:

Javamail IMAP 检索特定日期时间内的最新电子邮件

java - 为什么 SimpleDateFormat 需要时区设置来解析 UTC 时间

java - Pi 与 Nilakantha 方法

java - 你在子类中调用 super.finalize() 吗?

Android发送带附件的邮件

java - 使用javamail api从地址获取?

java - Google App Engine 项目可以在开发环境中运行,但在部署时不能运行

java - Android 在最小化时复制 Activity,然后最大化

java - 在不使用默认/内置应用程序的情况下使用 JavaMail API 在 Android 中发送电子邮件

Java 电子邮件 - 异常服务器不受信任