如何使用输入流和弹簧发送带有附件的电子邮件?

2022-09-01 03:40:07

情况是这样的:

首先,我们在内存中生成一个文件,我们可以得到一个对象。其次,InputStream 对象必须作为电子邮件的附件发送。语言是Java,我们使用Spring发送电子邮件。InputStream

我找到了很多信息,但我找不到如何使用发送电子邮件附件。我试着这样做:InputStream

InputStreamSource iss= new InputStreamResource(new FileInputStream("c:\\a.txt"));
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
message.addAttachment("attachment", iss);

但我得到一个例外:

传入资源包含开放流:无效参数。JavaMail 需要一个 InputStreamSource,为每个调用创建一个新的流。


答案 1

对于在内存中生成的文件,可以使用 。只需使用Apache Commons IO库中的IOUtils转换您的对象即可。ByteArrayResourceInputStream

这很简单:

helper.addAttachment("attachement",
new ByteArrayResource(IOUtils.toByteArray(inputStream)));

答案 2

看看春季参考章节 24.3 使用 JavaMail MimeMessageHelper

这个例子是从那里开始的,我认为它确实希望你想要做:

JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost("mail.host.com");

MimeMessage message = sender.createMimeMessage();

// use the true flag to indicate you need a multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo("test@host.com");

helper.setText("Check out this image!");

// let's attach the infamous windows Sample file (this time copied to c:/)
FileSystemResource resource = new FileSystemResource(new File("c:/Sample.jpg"));

helper.addAttachment("CoolImage.jpg", resource );

sender.send(message);

如果要使用流,则可以使用

ByteArrayResource resource = new ByteArrayResource(IOUtils.toByteArray(inputStream)));

而不是 FileSystemResource


推荐