我在 Java 应用程序中使用 JavaMailSender 发送带有附件的电子邮件。附件是位于网站上的文件(例如 http://example.com/technical_guide.pdf )
第一个简单的实现如下:
- 从 URL 中获取文件的字节并创建输入流
- 从该输入流创建文件
- 将文件作为附件添加到邮件消息
- 发送消息
这可行,但步骤 2 产生了在文件系统上创建物理文件的不幸副作用。我发现我还可以传递数据源,而不是(以编程方式)删除它们。所以现在我有以下实现:
- 从文件 URL 创建 URLDataSource
- 将数据源作为邮件附件添加
- 发送消息
这也很有效,我不再看到 servlet 容器根目录下的文件。但是 - 我担心 javaMail 可能仍然会在幕后的某个地方生成一些文件,但我只是没有意识到这一点。
任何人都可以确认在此过程中没有创建任何物理文件(甚至在 users/appdata/
、/catalina_home/
、windows/等隐藏文件夹下也没有创建) tmp/
等),如果是这样 - 解释一下 java 如何能够在不需要任何文件的情况下发送邮件?是因为它需要的只是发送到邮件服务器的“字节”并且它不关心字节来自哪里?
最佳答案
您可以使用MimeMessageHelper.addAttachment(String attachmentFilename, InputStreamSource inputStreamSource)
方法:
helper.addAttachment("attachement", yourStream);
基本上不需要物理文件。您还可以在内存中构建它并将其流式传输到助手。
关于java - 在 Java 中发送带有附件的邮件,而不需要物理附件文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39147188/