使用JAVA Mail API发送带附件的电子邮件,而不在本地计算机中存储

我在jsp页面中有报告,我正在以PDF格式编写该报告。 我想将PDF作为带有附件的电子邮件发送,但我不希望将文件存储在本地计算机或服务器中,但我想发送带有附件的电子邮件。

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

 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)); } }); 

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

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

您必须编写自己的javax.activation.DataSource实现来从内存中读取附件数据,而不是使用其中一个包含的实现(从文件,URL等读取)。 如果您在字节数组中有PDF报告,则可以实现一个DataSource,它返回包含在ByteArrayOutputStream中的字节数组。