![]() |
Enviar correo html con imagen incrustada
Hola.
Tengo un pequeño problema a ver si a alguien se le enciende la luz. Estoy haciendo un pequeño proceso para enviar correos con formato html incrustando imágenes. El fichero html se crea desde word y lo que hago es crear un stringlist e incluirlo en el "body" del mensaje para incluir luego el archivo de la imagen. El problema es que el que recibe el mensaje ve el recuadro donde debería de ir la imagen en blanco y al final se ve la imagen como archivo adjunto. Es como si no se enterara de que esa imagen en vez de ir como archivo adjunto va incrustada en una posición determinada del texto html. El tema está en que word cuando insertas imagenes en un fichero html crea una carpeta con el nombre del archivo html seguido de "_archivos" donde ubica la imagen y creo que los tiros van por ahí pero no sé qué hacer para que me la enlace correctamente en el correo. Pongo una parte del código que genera el correo.
Gracias y un saludo |
Hola,
Es muy posible que me equivoque, puesto que, parecería lógico poder enviar correos en formato HTML que mostrase imágenes "incrustadas". Sin embargo, quien recibe el correo ve la imagen como un archivo adjunto,... porque es un archivo adjunto. A mí me parece que el problema, por decirlo así, está en el código HTML, concretamente, en la etiqueta IMG, y más concretamente, en el atribute SRC ("source") de dicha etiqueta. Porque, ¿dónde se supone que apunta dicho atributo? En efecto, ha de contener la ruta del archivo de imagen. Ahora bien, casi apostaría algo a que dicha "ruta" no existe más que en el archivo HTML cuando tú lo ves en tu sistema. Si quieres añadir la imagen en el correo, deberás subir dicha imagen a un servidor en internet, de manera que la ruta de la imagen sea una URL que lleve a la imagen en cuestión. De este modo, cualquier lector de correos que soporte HTML, podrá localizar sin problemas la imagen y por lo tanto podrá mostrarla. La otra solución que se me ocurre, pasa por utilizar en el atributo SRC de la etiqueta IMG, un "esquema de datos en la URI". Esto consigue, verdaderamente, incrustar la imagen en el propio HTML, como puedes ver en el enlaze anterior, convirtiendo la imagen en una secuencia de caracteres en "Base 64". Esta última solución tiene el inconveniente de que la imagen quedará tal cual la insertes en el HTML del correo (en este caso), mientras que, si utilizas una URL como ruta de la imagen, podrás hacer cambios en la imagen, actualizarla en el servidor, y, quien vea el correo encontrará la imagen siempre actualizada, al menos en teoría, puesto que el cliente de correo puede guardar la imagen "en caché". Por lo demás, dicho todo lo anterior, quiero imaginar (y hasta recordar) que existe una forma de adjuntar imágenes en los correos, refiriéndose a ellas con rutas "relativas", es decir, incrustando de alguna forma las imágenes en el correo, pero, no como archivos adjuntos, o, como algún tipo especial de archivos adjuntos. Tal vez aquí mismo encuentres algún ejemplo de esto último. No obstante, si esta última solución no existiese o fuese farragosa, lo de asegurarte de ofrecer una URL de la imagen o incrustarla mediante "Base 64" "debe funcionar". |
"Estoy" con dec, la imagen debes ponerla en un lugar público para que el remitente del email pueda acceder a ella.
La otra opción es "incrustarla" en el propio email, como ha explicado también dec. O sea, todo lo explicado por dec, más claro... imposible :) |
Echale un vistazo al siguiente enlace :
http://www.clubdelphi.com/foros/show...highlight=html Hace ya cierto tiempo que me peleé con ello. Aun así, si necesitas información adicional ... aquí estamos para ver si lo podemos resolver. Decirte que en su momento me costó muchas pruebas para finalmente llegar a un resultado satisfactorio. |
Cita:
Con respecto a la técnica de base64 y el URI que comenta dec sería la solución más estupenda, lamentablemente, Outlook no la soporta :-/ Por último, a cómo vas newtron es cómo lo puedes conseguir. Lo que te falta es que tienes que cambiar la referencia de la imagen para que no apunte a un archivo en el sistema de ficheros, sino que apunte al ID del archivo adjunto. Puedes probar con Thunderbird haciendo un correo de prueba y analiza el código fuente del correo que genera para que aprendas más sobre esta técnica. Funciona con Thunderbird y Outlook perfectamente. Saludos, Chris |
Uuuy !! Me acabo de dar cuenta que el enlace dentro del otro hilo ya no funciona ! :(
|
Cita:
Edito: ya veo que te refieres al enlace del enlace, no va, no :s |
A lo mejor me excedo un poco, con la cantidad de código, o incluso podría haber adjuntado un ZIP, pero te pongo el código que yo utilizo para enviar un correo a través de Indy, directamente desde el programa Delphi, y además dentro de un Thread.
Los correos que yo envío, pueden contener una imagen en la cabecera del correo, y otra en el pie del mensaje. Supongo que lo mismo se puede aplicar a cualquier imagen en cualquier parte del texto. Tienes que fijarte especialmente en los diferentes 'tipos' que se pueden definir. Además de las imágenes de principio y final, se puede añadir cualquier otro fichero adjunto, diferente de las imágenes. Espero te sirva :
Edito : He tenido que reemplazar algunos 'tags HTML' por ':' en vez de '<' y '>' porque se veían mal en el hilo |
El artículo al que hacía referencia en el otro hilo del cual incluí el enlace, creo que es este :
http://www.indyproject.org/sockets/b...8_17_a.en.aspx También he encontrado esto : http://www.indyproject.org/sockets/b...080116.EN.aspx Saludos ! :cool: :cool: :cool: |
Hola,
Cita:
|
Cita:
|
Gracias a todos. :)
Le echaré un vistazo al código de gluglu y cuando acabe dentro de un par de meses :p os diré como ha ido. Saludos |
Hola de nuevo.
He modificado un programa de ejemplo que pillé por internet en función al código de gluglu y ya casi lo tengo, el único problema es que la imagen me aparece dos veces, una insertada en el mensaje y otra como archivo adjunto. Os pongo el código a ver si alguien ve donde está el problema.
Gracias y un saludo P.D.: igual que gluglu he cambiado los tags del html por : para que se vea algo decente. |
Tienes que definir también el 'Type' del TIdMessage.
Código:
// Just HTML Text, No Attachments, No Embedded Images
Saludos :cool: |
¡Solucionado!
Gracias gluglu, recuerdame que te invite a un par de pajaretes en la casa guardia (a casimiro no que no bebe :p) Gracias y un saludo |
:D :D ;) ... hecho !
|
Cita:
:D |
Una actualización....
Para que la imagen incrustada se vea bien en gmail hay que agregar lo siguiente: LIdmGraf.ContentID := '<IMG001>'; //El contentID va entre <>... LIdmGraf.ContentDisposition := 'inline'; //Esta linea hay que agregarla....
|
Gracias Neeruu.
|
Cita:
|
La franja horaria es GMT +2. Ahora son las 21:18:03. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi