0

我有一个作为 ByteArray 的 pdf 文件,我想知道是否有一种方法可以在不在服务器上创建主文件的情况下附加它。

Play 文档提供的代码只允许附加真实文件。

EmailAttachment attachment = new EmailAttachment();
attachment.setDescription("A pdf document");
attachment.setPath(Play.getFile("rules.pdf").getPath());

我正在使用 Playframework Mail 模块。

谢谢!

4

2 回答 2

2

由于 Play 1.x 在后台使用Apache Commons Email库,您可以使用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();
于 2012-08-16T12:34:19.053 回答
1

即将发布的 Play 版本 1.3 将引入一个方法attachDataSource(),可以在Mailer类中调用该方法。这将允许您轻松地将 ByteArray 作为电子邮件的附件附加,而无需先将它们保存到磁盘或无需使用 Apache Commons 电子邮件。然后,您可以使用“标准”播放方式。

以下是 play bugtracker 中对应的功能请求:http: //play.lighthouseapp.com/projects/57987/tickets/1500-adding-maillerattachdatasource-functionality

于 2013-09-17T11:30:09.973 回答