情况是这样的:
首先,我们在内存中生成一个文件,我们可以得到一个InputStream
对象。其次,InputStream对象必须作为电子邮件的附件发送。语言是Java,我们使用Spring来发送电子邮件。
我找到了很多信息,但我找不到如何使用InputStream
发送电子邮件附件。我试着这样做:
InputStreamSource iss= new InputStreamResource(new FileInputStream("c:\a.txt"));
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
message.addAttachment("attachment", iss);
但我得到了一个例外:
传入的资源包含开放流:无效参数。JavaMail需要一个InputStreamSource来为每个调用创建一个新的流。
5条答案
按热度按时间hrysbysz1#
对于在内存中生成的文件,您可以使用
ByteArrayResource
。只需使用Apache Commons IO库中的IOUtils
转换InputStream
对象。这很简单:
snvhrwxg2#
使用Java Mail MimeMessageHelper查看Spring参考第24.3章
这个例子就是从那里开始的,我认为它确实想让您这样做:
如果要使用Stream,则可以使用
而不是文件系统资源
qnyhuwrf3#
您可以简单地实现InputStreamSource,并根据请求在其中传递新的InputStream:
x0fgdtte4#
//inlineFileObjectCreated--可以为示例创建StringBuilder对象
/
juud5qan5#
具体的工作示例包括:
1)附件为
InputStreamSource
接口2)附件为
DataSource
接口解释:
传入的资源包含开放流:无效参数。JavaMail需要一个InputStreamSource来为每个调用创建一个新的流。
如果开发人员使用在
isOpen()
方法中返回true
的InputStreamSource
实现,则可能会出现此消息。方法
MimeMessageHelper#addAttacment()
中有一个特殊检查:InputStreamResource#isOpen()
始终返回true
,这使得无法将此实现用作附件: