在base64中附加javamail中的大文件

在base64中附加javamail中的大文件,java,io,jakarta-mail,Java,Io,Jakarta Mail,目前,我在邮件中附上以下小文件: byte[] byteArray = IOUtils.toByteArray(new FileInputStream(file)); MimeBodyPart messageBodyPart = new PreencodedMimeBodyPart("base64"); String contentType = "application/octet-stream"; String base64Content = new String(Base64.encod

目前,我在邮件中附上以下小文件:

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

但是一次将文件读取到一个字节[]对于大文件来说是不起作用的。但最后我想把附件放在电子邮件中的base64编码字符串中。那么我如何处理附件中的大文件呢?

您可以尝试使用它发送您想要的任何文件。还有任意数量的文件

/**
 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);

你可以试着用它发送你想要的任何文件。还有任意数量的文件

/**
 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);
使用:

文件不会被读取到内存中,它将在消息发送时动态编码。

使用:


该文件不会被读取到内存中,它将在消息发送时被动态编码。

我们谈论的是多大?大约100mb。。可能更多。您知道大多数邮件服务器都会拒绝这种大小的邮件吗?我建议使用某种云空间,在那里你可以上传这些东西,并在邮件中包含一个链接供客户下载,如果他们愿意,也可以不下载。是的。。通常最大大小约为25MB,但我希望我的代码能够防OOM。如果在正确的时间提出正确的问题,而不是执行突然出现的每个要求,公司可能会得到更好的服务。我想说这可能是一个很好的时机来回答这样一个问题:究竟为什么会有人想通过电子邮件这样做?我们谈论的是多大?比如100mb左右。。可能更多。您知道大多数邮件服务器都会拒绝这种大小的邮件吗?我建议使用某种云空间,在那里你可以上传这些东西,并在邮件中包含一个链接供客户下载,如果他们愿意,也可以不下载。是的。。通常最大大小约为25MB,但我希望我的代码能够防OOM。如果在正确的时间提出正确的问题,而不是执行突然出现的每个要求,公司可能会得到更好的服务。我想说,这可能是一个很好的时机来回答这个问题:究竟为什么会有人想通过电子邮件这样做?