java从虚拟文件系统附加文件到电子邮件

标签 java jakarta-mail nio jimfs

我正在使用虚拟文件系统,我想将其中的文件附加到电子邮件中。然而,MimeBodyPart 对象只接受文件,它不能在像 jimfs 这样的默认文件系统上工作。请参阅下面的代码,当我尝试转换为文件时出现 UnsupportedOperation 异常。

public Email attach(Path file){
    MimeBodyPart attachment = new MimeBodyPart()
    attachment.attachFile(file.toFile())
    attachments.add(attachment)
    return this
}

最佳答案

由于 jimfs 文件不是真正的文件,您不能使用文件 API。

一个简单的解决方法是使用 ByteArrayDataSource ,这将复制数据。

更好的方法是编写您自己的类似于 FileDataSource 的 PathDataSource但使用 Files.newInputStream而不是 FileInputStream。然后使用附加文件:

MimeBodyPart mbp = new MimeBodyPart();
mbp.setDataHandler(new DataHandler(new PathDataSource(path)));
mbp.setFileName(path.getFileName().toString());
mbp.setDisposition(Part.ATTACHMENT);

关于java从虚拟文件系统附加文件到电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44392639/

相关文章:

java - 如何阻止用户生成更多事件?

javamail不发送邮件内容

Java I/O 与 NIO : Quick Benchmark Comparison

java - 如何在电子邮件中设置 "name"属性

java - 使用 javax.mail 在邮件正文中发送编码图像

java - 我应该有两个线程用于输入/输出还是使用 NIO?

java - Java 7 WatchService 对其他人来说很慢吗?

64位的java字节码

java - 如果输入一个数字,同时将每个数字加上 n 次幂,对应于下面给出的公式,如何对数字进行求和?

java - Drools - 比较不涉及主要数据类型的字段的最佳实践