Sto cercando di capire come passare "direttamente" a un oggetto MimeMessage
(dalla libreria Javamail) direttamente dalla libreria POI di Apache()) come allegato, senza doverlo scrivere direttamente nel filesystem.Aggiungere un POI Apache come allegato a MimeMessage di Javamail senza scrivere nel filesystem
Il modo più semplice per fare questo sembra il seguente:
File attachmentSource = new File("tmpsource.xls");
WorkBook tmpWorkbook = new HSSFWorkBook();
//Do stuff with workbook
tmpWorkBook.write(new FileOutputStream(attachmentSource));
//Create all the Session, MimeMessage and MimeMultipart
MimeBodyPart attachment = new MimeBodyPart();
attachment.setDataHandler(new DataHandler(new FileDataSource(attachmentSource)));
attachment.setFileName(attachmentSource.getName());
//Do stuff with the message and send it
In questo modo funziona, ma sono costretto a scrivere il file nella FS.
Durante la lettura delle domande correlate ho scoperto circa ByteArrayInputStream
e ByteArrayOutputStream
e sembrava risolvere il mio problema (A meno che il file si gonfia fino a 2GB
che sembra molto improbabile).
Spero di essermi spiegato, penso che i flussi ByteArray faranno il trucco, tra l'altro qualsiasi aiuto o consiglio sono apprezzati!
[2011/09/29] ho creato un semplice DataSource
implementazione chiamato (indovinate un po ') ByteArrayDataSource
, quindi ho l'installazione intestazioni automatiche e la codifica Base64.
Ok, ho davvero sperato che in questo modo ha funzionato, ma i dati binari è scritto direttamente nel corpo della posta, quindi nessuna vera e propria impostazione automatica delle intestazioni e nessuna codifica base64 cool. :(Mi sto perdendo qualcosa? – Minkiele