2009-10-01 77 views
11

Tengo un informe en mi página jsp y estoy escribiendo ese informe en formato PDF. Y deseo enviar el PDF como correo electrónico con datos adjuntos, pero no quiero almacenar el archivo en el equipo o servidor local, pero quiero enviar un correo electrónico con el archivo adjunto.Enviar un correo electrónico con un archivo adjunto utilizando la API JAVA Mail sin almacenarlo en el equipo local

+0

¿Podría enviar el correo electrónico con el archivo adjunto y luego eliminar el archivo local f ile luego? – weiji

Respuesta

0

Debe escribir su propia implementación de javax.activation.DataSource para leer los datos adjuntos de una memoria en lugar de usar una de las implementaciones incluidas (para leer desde un archivo, una URL, etc.). Si tiene el informe PDF en una matriz de bytes, puede implementar un DataSource que devuelve la matriz de bytes ajustada en ByteArrayOutputStream.

5

Si usa Spring's JavaMail API, puede hacer este tipo de cosas con bastante facilidad (o al menos, tan fácilmente como lo permita la API de JavaMail, que no es mucho). Por lo que podría escribir algo como esto:

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)); 
    } 
}); 

Los datos del archivo adjunto puede ser cualquiera de las abstracciones de recursos de la primavera, ByteArrayResource es sólo uno de ellos.

Tenga en cuenta que esta parte de Spring API se sostiene por sí misma, no requiere (pero se beneficia) del contenedor Spring.

Cuestiones relacionadas