Passed-in Resource contains an open stream: invalid argument. JavaMail requires an InputStreamSource that creates a fresh stream for every call.
时间: 2024-02-25 13:51:42 浏览: 37
这个错误通常发生在使用MimeMessageHelper的addAttachment()方法添加附件时,传递了一个已经打开的InputStream或Reader对象,而不是一个可以创建新流的InputStreamSource或ReaderSource对象。
JavaMail要求每次发送邮件时都使用新的流,以避免在多次发送邮件时出现问题。因此,MimeMessageHelper要求传递一个可以创建新流的InputStreamSource或ReaderSource对象。
要解决这个问题,你需要使用Spring的InputStreamResource或InputStreamSource类来包装你的InputStream对象,如下所示:
```java
InputStream inputStream = ...; // your input stream
String filename = ...; // your file name
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.addAttachment(filename, new InputStreamResource(inputStream));
```
在这个示例中,我们使用InputStreamResource类将inputStream包装为一个InputStreamSource对象,并将其作为参数传递给addAttachment()方法。这样,每次发送邮件时都会使用新的流。
如果你使用的是Reader对象,可以使用Spring的InputStreamResource或ReaderInputStream类来包装它。