如何将Pdf文件附加到邮件

时间:2013-08-06 04:44:14

标签: java

我尝试使用java将一个准备好的pdf文件附加到邮件中,所以为此我尝试了下面的

String filename = "file.pdf";

 ByteArrayOutputStream bos = new ByteArrayOutputStream();
??.write(bos);

 DataSource fds = new ByteArrayDataSource(bos.toByteArray(), "application/pdf");
 MimeBodyPart mbp2 = new MimeBodyPart();            
 mbp2.setDataHandler(new DataHandler(fds));   
 mbp2.setFileName(filename); 

我不知道将会是什么而不是'??'。 所以请向我推荐一下。

2 个答案:

答案 0 :(得分:2)

JavaMail 1.4中引入的

javax.mail.util.ByteArrayDataSource以及以下是同一

的一些指示

如果你使用Spring的JavaMail API,你可以很容易地做到这一点(或者至少,就像JavaMail API允许的那样容易,但这并不多)。

附件数据可以是Spring的资源抽象中的任何一个,ByteArrayResource只是其中之一。

请注意,Spring API的这一部分独立存在,它不需要(但确实从Spring容器中受益)。

JavaMailSenderImpl mailSender = ... instantiate and configure JavaMailSenderImpl here
final byte[] data = .... this holds my PDF data

mailSender.send(new MimeMessagePreparator() {
   public void prepare(MimeMessage mimeMessage) throws Exception {
      MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
     // set from, to, subject using helper
     helper.addAttachment("my.pdf", new ByteArrayResource(data));
   } 
});

答案 1 :(得分:0)

请参阅以下代码:

 if (arrayInputStream != null && arrayInputStream instanceof ByteArrayInputStream) {
    // create the second message part with the attachment from a OutputStrean
    MimeBodyPart attachment= new MimeBodyPart();
    ByteArrayDataSource ds = new ByteArrayDataSource(arrayInputStream, "application/pdf"); 
    attachment.setDataHandler(new DataHandler(ds));
    attachment.setFileName("Report.pdf");
    mimeMultipart.addBodyPart(attachment);
}