在commons email中添加附件作为流

时间:2011-07-24 11:04:55

标签: java javamail apache-commons-email

我在我的网络应用程序中使用Apache Commons Email,它运行正常。

现在我需要通过附件发送文件,我遇到了一些问题。我需要从数据库中获取文件(作为BLOB)并将其添加为附件。看起来Commons Email不支持流附件,它只从路径中获取文件。

我需要知道这里的最佳做法是什么?

  1. 我是否还需要将文件保存在目录结构中,以便这样做 它可以与Commons Email?,或
  2. 一起使用
  3. 有什么方法可以使用 流内容本身作为附件添加?

1 个答案:

答案 0 :(得分:21)

使用MultiPartEmail#attach(DataSource ds, String name, String description)应该有效:

import org.apache.commons.mail.*;

// create the mail
MultiPartEmail email = new MultiPartEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("The picture");
email.setMsg("Here is the picture you wanted");

// get your inputstream from your db
InputStream is = new BufferedInputStream(MyUtils.getBlob());  
DataSource source = new ByteArrayDataSource(is, "application/pdf");  

// add the attachment
email.attach(source, "somefile.pdf", "Description of some file");

// send the email
email.send();