Próbuję dowiedzieć się, jak przekazać WorkBook
(z biblioteki punktów Apache) "bezpośrednio" do obiektu MimeMessage
(z biblioteki Javamail) jako załącznik, bez konieczności zapisywania go bezpośrednio w systemie plików.Dodaj apache POI WorkBook jako załącznik do MimeMessage Javamail bez pisania w systemie plików
Najprostszym sposobem na to wydaje się, co następuje:
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
ten sposób to działa, ale jestem zmuszony zapisać plik do FS.
Podczas czytania powiązanych pytań dowiedziałem się o ByteArrayInputStream
i ByteArrayOutputStream
i wydawało mi się rozwiązać mój problem (chyba, że plik puchnie do 2GB
, co wydaje się bardzo mało prawdopodobne).
Mam nadzieję, że wyjaśniłem sobie, myślę, że strumienie ByteArray zrobią lewę, przy okazji każda pomoc lub rada są doceniane!
[29.09.2011] stworzyłem bardzo prosty DataSource
realizację nazwie (wiecie co) ByteArrayDataSource
, więc mam ustawienia automatyczne nagłówki i kodowania Base64.
Ok, ja naprawdę nadzieję, że w ten sposób działało ale dane binarne jest napisany prosto do treść wiadomości e-mail, więc nie ma żadnych fajnych automatycznych nagłówków i nie ma fajnego kodowania base64. :(Czy czegoś mi brakuje? – Minkiele