Java Mail:转换附件数据失败

时间:2015-04-23 20:18:48

标签: javamail email-attachments

我想使用Java Mail发送文件,我有下一个代码:

我在这里从InputStream中的Google云端硬盘下载文件。

File file = DriveHelper.getFile("oalsdiañsdluioumadsspdmaasd-asdoiasd");
InputStream inputStream = DriveHelper.downloadFile(file);

之后我写下一个代码:

Message message = new MimeMessage(session);
String htmlBody = "hello world";        // ...
// convert inputstream to byte[]
byte[] attachmentData = IOUtils.toByteArray(inputStream);

Multipart mp = new MimeMultipart();

MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlBody, "text/html");
mp.addBodyPart(htmlPart);

MimeBodyPart attachment = new MimeBodyPart();
attachment.setFileName("archivo.pdf");
attachment.setContent(attachmentData, "application/pdf");
mp.addBodyPart(attachment);
message.setContent(mp);
Transport.send(message);

但是当我运行代码时,我有下一个例外:

javax.mail.SendFailedException: Send failure (javax.mail.MessagingException: Converting attachment data failed)
[INFO]  at javax.mail.Transport.send(Transport.java:163)
[INFO]  at javax.mail.Transport.send(Transport.java:48)

2 个答案:

答案 0 :(得分:0)

attachment.setContent()无效。

您可以使用DataSource:

        MimeBodyPart attachment = new MimeBodyPart();
        attachment.setFileName("archivo.pdf");
        DataSource dataSource = new ByteArrayDataSource(inputStream, "application/pdf");
        attachment.setDataHandler(new DataHandler(dataSource));
        mp.addBodyPart(attachment);

答案 1 :(得分:0)

我在此链接中找到了一个解决方案:http://www.programcreek.com/java-api-examples/index.php?api=com.google.appengine.api.mail.MailService,并解决了我的问题。