2011-07-24 10 views
5

Używam Apache Commons Email w mojej aplikacji internetowej i działa poprawnie.dodaj załącznik jako strumień we wspólnej wiadomości e-mail

Teraz, kiedy muszę wysłać dokument przez załącznik, mam pewne problemy. Potrzebuję pobrać plik z bazy danych (jako BLOB) i dodać go jako załącznik. Wygląda na to, że Commons Email nie obsługuje przesyłania strumieniowego i pobiera tylko plik ze ścieżki.

Muszę wiedzieć, jaka jest tutaj najlepsza praktyka?

  1. Czy muszę zapisać plik w strukturze katalogów również tak, że współpracuje z Commons Email ?, albo
  2. Czy jest jakiś sposób mogę użyć strumieniowo zawartość samego dodawania jako załącznik?

Odpowiedz

20

Korzystanie MultiPartEmail#attach(DataSource ds, String name, String description) powinno działać:

import org.apache.commons.mail.*; 

// create the mail 
MultiPartEmail email = new MultiPartEmail(); 
email.setHostName("mail.myserver.com"); 
email.addTo("[email protected]", "John Doe"); 
email.setFrom("[email protected]", "Me"); 
email.setSubject("The picture"); 
email.setMsg("Here is the picture you wanted"); 

// get your inputstream from your db 
InputStream is = new BufferedInputStream(MyUtils.getBlob()); 
DataSource source = new ByteArrayDataSource(is, "application/pdf"); 

// add the attachment 
email.attach(source, "somefile.pdf", "Description of some file"); 

// send the email 
email.send(); 
+0

Dzięki. wypróbuje i zaktualizuje. – user644745

+1

Dzięki, zadziałało dobrze. Chociaż nie mam pojęcia, do czego służy opis pliku. Nigdzie nie widziałem w otrzymanym e-mailu. – Carcamano