目前我在邮件中附加文件(小)如下:
byte[] byteArray = IOUtils.toByteArray(new FileInputStream(file));
MimeBodyPart messageBodyPart = new PreencodedMimeBodyPart("base64");
String contentType = "application/octet-stream";
String base64Content = new String(Base64.encodeBase64(byteArray));
messageBodyPart.setContent(base64Content, contentType);
messageBodyPart.setFileName(MimeUtility.encodeText(attachment.getFileName(),
CharEncoding.UTF_8, null));
messageBodyPart.setDisposition(MimeBodyPart.ATTACHMENT);
multipart.addBodyPart(messageBodyPart);
但是,一次将文件读取到byte[]
对于大文件不起作用。但最后我想在电子邮件中将附件放在base64编码的字符串中。那么如何解决附件中的大文件呢?
答案 0 :(得分:4)
messageBodyPart.attachFile(file, "application/octet-stream", "base64");
该文件不会被读入内存,因此会在发送邮件时“即时”编码。
答案 1 :(得分:0)
您的代码没有任何问题。所以我只想给你一些提示:
SELECT DATEDIFF(MyDateColumn, NOW()) FROM MyTable;
不应导致OOM错误。但是,将byte[]
打开或任何悬空引用留给数组会导致此类错误。因此,请务必关闭所有资源,不要在全局HashMap等中缓存数组。答案 2 :(得分:0)
您可以尝试使用它发送您想要的任何文件。还有任意数量的文件。
/**
Multi part message email
**/
Multipart multipart = new MimeMultipart();
//Add atachments
String[] attachments = new String[2];
attachments[0] = "your_complete_path.pdf";
attachments[1] = "your_complete_path.txt";
if(attachments != null && attachments.length > 0) {
for (String str : attachments) {
MimeBodyPart messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(str);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(source.getName());
multipart.addBodyPart(messageBodyPart);
}
}
message.setContent(multipart);