在Java中发送带附件的邮件,无需物理附件文件

时间:2016-08-25 13:51:27

标签: java email email-attachments

我在Java应用程序中使用JavaMailSender发送带附件的电子邮件。附件是位于网站的文件(例如,http://example.com/technical_guide.pdf

第一个天真的实施如下:

  1. 从网址中获取文件的字节并创建输入流
  2. 从该输入流创建文件
  3. 将该文件添加为mailmessage的附件
  4. 发送消息
  5. 这很有效,但第2步有一个不幸的副作用,就是在文件系统上创建物理文件。我发现我也可以传递一个数据源,而不是删除它们(以编程方式)。所以现在我有以下实现:

    1. 从文件网址
    2. 创建一个URLDataSource
    3. 将数据源作为附件添加到mailmessage
    4. 发送消息
    5. 这也很好用,我不再在servlet容器的根目录下看到这些文件。但是 - 我担心javaMail可能仍会在某个地方制作一些文件,但我还没有意识到它。

      任何人都可以确认在此过程中没有创建任何专业文件(甚至在users/appdata//catalina_home/windows/tmp/之类的隐藏文件夹下也没有。)如果是这样的话 - 解释java是怎样的能够发送邮件而不需要任何文件?是因为它需要的是"字节"要发送到邮件服务器,并不关心字节来自哪里?

1 个答案:

答案 0 :(得分:2)

您可以使用MimeMessageHelper.addAttachment(String attachmentFilename, InputStreamSource inputStreamSource)方法:

helper.addAttachment("attachement", yourStream);

基本上不需要有一个物理文件。您也可以在内存中构建它并将其流式传输给帮助程序。