Deseo enviar correos electrónicos con archivos adjuntos zip. Puedo enviar archivos PDF sin guardarlos en una ubicación física usando ByteArrayOutputStream. Pero cuando intento comprimir esos archivos y enviarlos, no funciona. Da excepción apego ilegal.¿Cómo enviar un archivo zip sin crearlo en una ubicación física?
A continuación se muestra el código que he escrito para crear zip.
private MimeBodyPart zipAttachment(List<ByteArrayOutputStream> attachmentList, List<String> reportFileNames)
{
MimeBodyPart messageBodyPart = null;
try
{
// File file = File.createTempFile("Reports.zip",".tmp");
// FileOutputStream fout = new FileOutputStream(file);
ByteArrayOutputStream bout = new ByteArrayOutputStream(attachmentList.size());
ZipOutputStream zos = new ZipOutputStream(bout);
ZipEntry entry;
for(int i = 0; i < attachmentList.size(); i++)
{
ByteArrayOutputStream attachmentFile = attachmentList.get(i);
byte[] bytes = attachmentFile.toByteArray();
entry = new ZipEntry(reportFileNames.get(i));
entry.setSize(bytes.length);
zos.putNextEntry(entry);
zos.write(bytes);
}
messageBodyPart = new MimeBodyPart();
DataSource source = new ByteArrayDataSource(bout.toByteArray(), "application/zip");
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName("Reports.zip");
}
catch(Exception e)
{
// TODO: handle exception
}
return messageBodyPart;
}
¿Se puede agregar stacktrace? –