我在Java应用程序中使用JavaMailSender发送带附件的电子邮件。附件是位于网站的文件(例如,http://example.com/technical_guide.pdf)
第一个天真的实施如下:
这很有效,但第2步有一个不幸的副作用,就是在文件系统上创建物理文件。我发现我也可以传递一个数据源,而不是删除它们(以编程方式)。所以现在我有以下实现:
这也很好用,我不再在servlet容器的根目录下看到这些文件。但是 - 我担心javaMail可能仍会在某个地方制作一些文件,但我还没有意识到它。
任何人都可以确认在此过程中没有创建任何专业文件(甚至在users/appdata/
,/catalina_home/
,windows/tmp/
之类的隐藏文件夹下也没有。)如果是这样的话 - 解释java是怎样的能够发送邮件而不需要任何文件?是因为它需要的是"字节"要发送到邮件服务器,并不关心字节来自哪里?
答案 0 :(得分:2)
您可以使用MimeMessageHelper.addAttachment(String attachmentFilename, InputStreamSource inputStreamSource)
方法:
helper.addAttachment("attachement", yourStream);
基本上不需要有一个物理文件。您也可以在内存中构建它并将其流式传输给帮助程序。