2009-10-01 8 views
11

Mam raport na mojej stronie jsp i piszę ten raport w formacie PDF. I chcę wysłać plik PDF jako wiadomość e-mail z załącznikiem, ale nie chcę przechowywać pliku na komputerze lokalnym lub serwerze, ale chcę wysłać wiadomość e-mail z załącznikiem.Wysyłaj wiadomość e-mail z załącznikiem, używając interfejsu API JAVA Mail bez zapisywania w lokalnej maszynie

+0

Czy możesz wysłać wiadomość e-mail z załącznikiem, a następnie usunąć lokalne f ile później? – weiji

Odpowiedz

0

Musisz napisać własną implementację javax.activation.DataSource, aby odczytać dane załączników z pamięci, zamiast korzystać z jednej z dołączonych implementacji (do odczytu z pliku, adresu URL itp.). Jeśli masz raport PDF w tablicy bajtów, możesz zaimplementować DataSource, które zwraca tablicę bajtów owiniętą w ByteArrayOutputStream.

5

Jeśli używasz Spring's JavaMail API, możesz to zrobić dość łatwo (lub przynajmniej tak łatwo, jak zezwala na to API JavaMail, co nie jest zbyt duże). Więc można napisać coś takiego:

JavaMailSenderImpl mailSender = ... instantiate and configure JavaMailSenderImpl here 
final byte[] data = .... this holds my PDF data 

mailSender.send(new MimeMessagePreparator() { 
    public void prepare(MimeMessage mimeMessage) throws Exception { 
     MimeMessageHelper helper = new MimeMessageHelper(mimeMessage); 
    // set from, to, subject using helper 
    helper.addAttachment("my.pdf", new ByteArrayResource(data)); 
    } 
}); 

Dane mocujące mogą być dowolne abstrakcji Zasobów sprężyny, ByteArrayResource jest tylko jednym z nich.

Należy zauważyć, że ta część interfejsu API Spring jest samodzielna, nie wymaga (ale korzysta z) kontenera Spring.

Powiązane problemy