Foros del Web » Programación para mayores de 30 ;) » Java »

Adjuntar imagen de campo tipo blob en correo JavaMail

Estas en el tema de Adjuntar imagen de campo tipo blob en correo JavaMail en el foro de Java en Foros del Web. Hola compañeros. En mi proyecto estoy utilizando JavaMail para el envio de correos y todo jala muy bien solo que ahorita me veo en la ...
  #1 (permalink)  
Antiguo 05/11/2009, 19:09
 
Fecha de Ingreso: marzo-2009
Mensajes: 37
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Adjuntar imagen de campo tipo blob en correo JavaMail

Hola compañeros.

En mi proyecto estoy utilizando JavaMail para el envio de correos y todo jala muy bien solo que ahorita me veo en la necesidad de adjuntar una imagen en los correo que genero, y mi duda es si alguien a adjuntado una imagen en un correo con JavaMail de un campo de tipo blob, y no de un archivo como muestra el siguiente ejemplo:

Código:
// Part two is attachment
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
lo que deseo saver es si se puede hacer un:
Código:
new FileDataSource(compania.getLogo());
en ves de:
Código:
new FileDataSource(filename);
o si existe otra forma de cargar una imagen a mi correo donde yo la pueda jalar desde mi db ya que las compañias son diferentes y cada una tiene su propio logo...

compania.getLogo() retorna el valor en un arreglo de byte, de mi campo tipo blob utilizo JPA con Toplink para la persistencia de los datos.

saludos.
  #2 (permalink)  
Antiguo 06/11/2009, 03:08
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Adjuntar imagen de campo tipo blob en correo JavaMail

Wenas

la clase MimeBodyPart tiene un constructor con un InputStream. Y un inputstream se puede obtener a partir del array de bytes que ya tienes.

Código:
    InputStream stream = new InputStream();
    stream.read(tuarraydebytes);
    MimeBodyPart part = new MimeBodyPart(stream);
    blablabla
Saludos.
  #3 (permalink)  
Antiguo 06/11/2009, 13:38
 
Fecha de Ingreso: marzo-2009
Mensajes: 37
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Adjuntar imagen de campo tipo blob en correo JavaMail

Hola gracias por tu respuesta...

lo intente de la siguiente manera no marca error pero no sale nada en mi correo:
Código:
         
   //- - -  Poner el logo de la compañia
            InputStream stream = new ByteArrayInputStream(logoCompania);
            stream.read(logoCompania);
            MimeBodyPart part = new MimeBodyPart(stream);
            part.setHeader("Content-ID", "<logo>");
            mimeMultiPart.addBodyPart(part);
ya que no puedo instanciar la clase InputStream por que es abstracta.
Código:
InputStream stream = new InputStream()
y en el cuerpo de mi correo puse:

Código:
"<img src='cid:logo'/>"
No marca error pero no sale nada...
  #4 (permalink)  
Antiguo 10/11/2009, 05:14
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Adjuntar imagen de campo tipo blob en correo JavaMail

Si perdon.

Puedes inicilizar el stream directamente del logo de la BBDD.

Código:
stmt = con.createStatement();	
rs = stmt.executeQuery(query);
InputStream stream = null;
int size = 0;
if (rs.next())
{
  blob=((OracleResultSet)rs).getBLOB(1);
  if (null != blob)
  {
     logo = blob;	  	
     stream = logo.getBinaryStream();
     size = (int) logo.length();
     resultado = new byte [size];
     stream.read(resultado);
   }
}
  #5 (permalink)  
Antiguo 10/11/2009, 09:53
 
Fecha de Ingreso: marzo-2009
Mensajes: 37
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Adjuntar imagen de campo tipo blob en correo JavaMail

Hola de nuevo gracias por tu respuesta.

La verdad siento un poco de impotencia al no poder ni siquiera inicializar una variable de tipo InputStream.

ya que como comente utilizo para la persistencia JPA y Toplink y cuando quiero obtener el valor del logo de la compañia lo hago con un get y retorna byte[].

logo es un atributo de mi entidad compañia y tiene la siguiente declaración:

Código:
@Lob
    @Column(name = "LOGO")
    private byte[] logo;
entonces lo unico que se me ocurre para inicializar el inputStream es:
Código:
           InputStream stream = new ByteArrayInputStream(logoCompania);
            stream.read(logoCompania);
            MimeBodyPart part = new MimeBodyPart(stream);
            part.setHeader("Content-ID", "<logo>");
            mimeMultiPart.addBodyPart(part);
y no se si sea correcto utilizar : new ByteArrayInputStream para inicializar el inputStream.

despues de esto quiero comentar que tengo otra duda el codigo no marca error pero no me muestra nada y mi duda esta en que si no es necesario: part.setDataHandler(new DataHandler(source)); ya que no lo utilizo.

y en un ejemplo que hice y funciono bien pero que jala un logo de un archivo y no de la db quedo asi:

Código:
BodyPart part = new MimeBodyPart();
DataSource source = new FileDataSource("C:/Sia/Logos/imagen.jpg");
part.setDataHandler(new DataHandler(source));
part.setHeader("Content-ID", "<logo>");
mimeMultiPart.addBodyPart(part);
esto si funciono perfecto muestra la imagen en mi correo lo malo es que es de un archivo de donde jalo la imagen y no es lo que deseo.

Por esto mismo no se donde este el problema al hacerlo con el inputStream y jalar el valor de mi campo Blob..
  #6 (permalink)  
Antiguo 10/11/2009, 10:17
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Adjuntar imagen de campo tipo blob en correo JavaMail

Hombre, ten en cuenta que un ByteArrayInputStream, sigue siendo un inputstream.

Por otro lado, estas seguro que tienes dato no?? estas seguro que el blob te devuelve un logo??

Lo puedes saber facilmente con blob.length().

Saludos.
  #7 (permalink)  
Antiguo 10/11/2009, 10:43
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Adjuntar imagen de campo tipo blob en correo JavaMail

http://bytes.com/topic/java/answers/...ng-attachments
  #8 (permalink)  
Antiguo 10/11/2009, 12:22
 
Fecha de Ingreso: marzo-2009
Mensajes: 37
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Adjuntar imagen de campo tipo blob en correo JavaMail

Hola elAntonie muchas gracias por tu ayuda...

Gracias al link que pusiste lo pude lograr..

quedo de la siguiente manera:
Código:
//- - -  Poner el logo de la compañia desde la db con campo Blob
BodyPart logoCompania = new MimeBodyPart();
DataSource ds = new ByteArrayDataSource(logo, "application/octet-stream");
logoCompania.setDataHandler(new DataHandler(ds));
logoCompania.setHeader("Content-ID", "<logo>");
mimeMultiPart.addBodyPart(logoCompania);
y en el cuerpo del correo:
Código:
<img src='cid:logo'/>
Bueno con eso se logro el objetivo... Muchas gracias de nuevo por tu ayuda...

Saludos...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:44.