Estoy intentando enviar un correo electrónico html de varias partes / relacionado con imágenes gif incrustadas. Este correo electrónico se genera utilizando Oracle PL / SQL. Mis intentos han fallado, y la imagen aparece como una X roja (en Outlook 2007 y Yahoo Mail)
He estado enviando correos electrónicos html durante algún tiempo, pero mis requisitos ahora son usar varias imágenes gif en el correo electrónico. Puedo almacenarlos en uno de nuestros servidores web y simplemente vincularlos, pero muchos clientes de correo electrónico de los usuarios no los mostrarán automáticamente y necesitarán cambiar la configuración o descargarlos manualmente para cada correo electrónico.
Entonces, mis pensamientos son incrustar la imagen. Mis preguntas son:
- ¿Qué estoy haciendo mal aquí?
- ¿El enfoque de integración es el correcto?
- ¿Alguna otra opción si necesito usar más y más imágenes? Los archivos adjuntos no funcionarán, ya que las imágenes suelen ser logotipos e iconos que no tendrán sentido fuera del contexto del mensaje. Además, algunos elementos del correo electrónico son enlaces a un sistema en línea, por lo que generar un PDF estático y adjuntarlo no funcionará (que yo sepa).
retazo:
MIME-Version: 1.0
To: me@gmail.com
BCC: me@yahoo.com
From: email@yahoo.com
Subject: Test
Reply-To: email@yahoo.com
Content-Type: multipart/related; boundary="a1b2c3d4e3f2g1"
--a1b2c3d4e3f2g1
content-type: text/html;
<html>
<head><title>My title</title></head>
<body>
<div style="font-size:11pt;font-family:Calibri;">
<p><IMG SRC="cid:my_logo" alt="Logo"></p>
... more html here ...
</div></body></html>
--a1b2c3d4e3f2g1
Content-Type: image/gif;
Content-ID:<my_logo>
Content-Transfer-Encoding: base64
Content-Disposition: inline
[base64 image data here]
--a1b2c3d4e3f2g1--
Muchas gracias.
Por cierto: Sí, he verificado que los datos base64 son correctos, ya que puedo incrustar la imagen en el propio html (usando el mismo uso de algoritmo para crear datos de encabezado) y ver la imagen en Firefox / IE.
También debo tener en cuenta que esto NO es para spam, los correos electrónicos se envían a clientes específicos que lo esperan a diario. El contenido se basa en datos y no en anuncios.
<img src="URL" />
me funcionó, pero era una imagen que alojé fuera del sitio. ¿Eso no funciona para ti?Respuestas:
Intente insertarlo directamente, de esta manera puede insertar varias imágenes en varias ubicaciones en el correo electrónico.
Y para que esta publicación sea útil para que otros: Si no tiene una cadena de datos base64, cree una fácilmente en: http://www.motobit.com/util/base64-decoder-encoder.asp desde un archivo de imagen .
El código fuente del correo electrónico se parece a esto, pero realmente no puedo decirte para qué sirve ese límite:
// EDITAR: Oh, me acabo de dar cuenta de que si inserta el primer fragmento de código de mi publicación para escribir un correo electrónico con thunderbird, thunderbird cambia automáticamente el código html para que se parezca más o menos al segundo código de mi publicación.
fuente
La otra solución es adjuntar la imagen como archivo adjunto y luego hacer referencia al código html usando cid.
Código HTML:
Código C #:
fuente
No encuentro ninguna de las respuestas aquí útiles, por lo que estoy proporcionando mi solución.
El problema es que está utilizando
multipart/related
como tipo de contenido, lo que no es bueno en este caso. Lo estoy usandomultipart/mixed
y dentromultipart/alternative
(funciona en la mayoría de los clientes).La estructura del mensaje debe ser la siguiente:
Entonces funcionará
fuente
Si no funciona, puede probar una de estas herramientas que convierten la imagen en una tabla HTML (tenga cuidado con el tamaño de su imagen):
fuente
Usar Base64 para incrustar imágenes en html es increíble. No obstante, tenga en cuenta que las cadenas base64 pueden aumentar el tamaño de su correo electrónico.
Por lo tanto,
1) Si tiene muchas imágenes, cargar sus imágenes en un servidor y cargar esas imágenes desde el servidor puede reducir el tamaño de su correo electrónico. (Puede obtener muchos servicios gratuitos a través de Google)
2) Si hay solo unas pocas imágenes en su correo, usar cadenas base64 es definitivamente una opción increíble.
Además de las opciones proporcionadas por las respuestas existentes, también puede usar un comando para generar una cadena base64 en linux:
fuente
Sé que esta es una publicación antigua, pero las respuestas actuales no abordan el hecho de que Outlook y muchos otros proveedores de correo electrónico no admiten imágenes en línea o imágenes CID. La forma más eficaz de colocar imágenes en correos electrónicos es alojarlas en línea y colocar un enlace a ellas en el correo electrónico. Para listas de correo electrónico pequeñas, un buzón público funciona bien. Esto también reduce el tamaño del correo electrónico.
fuente
Necesita 3 límites para que las imágenes en línea sean totalmente compatibles.
Todo va dentro del
multipart/mixed
.Luego use el
multipart/related
para contener susmultipart/alternative
encabezados de archivos adjuntos de imagen y los suyos.Por último, incluya sus archivos adjuntos descargables dentro del último límite de
multipart/mixed
.fuente
De hecho, hay una publicación de blog muy buena que enumera los pros y los contras de tres enfoques diferentes de este problema por Martyn Davies. Puede leerlo en https://sendgrid.com/blog/embedding-images-emails-facts/ .
Me gustaría agregar un cuarto enfoque usando imágenes de fondo CSS.
Añadir
a su cuerpo de correo electrónico y una clase css como:
fuente
Para aquellos que no pudieron hacer que una de estas soluciones funcionara: Enviar imagen en línea por correo electrónico Siguiendo los pasos establecidos en la solución ofrecida por @ T30, pude hacer que mi imagen en línea se mostrara sin ser bloqueada por Outlook (métodos anteriores estaba bloqueado) . Si está utilizando Exchange como nosotros, entonces también cuando haga:
Deberá pasarle el host de la URL del servicio de intercambio. Aparte de eso, esta solución debería permitirle enviar imágenes incrustadas fácilmente.
fuente
Puede ser de interés que tanto Outlook como Outlook Express puedan generar estos formatos de correo electrónico de imágenes de varias partes, si inserta los archivos de imagen utilizando la función de menú Insertar / Imagen.
Obviamente, el tipo de correo electrónico debe establecerse en HTML (no en texto sin formato).
Cualquier otro método (por ejemplo, arrastrar / soltar, o cualquier invocación de la línea de comandos) hace que las imágenes se envíen como un archivo adjunto.
Si luego te envías ese correo electrónico a ti mismo, ¡podrás ver cómo está formateado! :)
FWIW, estoy buscando un ejecutable de Windows independiente que haga imágenes en línea desde el modo de línea de comandos, pero parece que no hay ninguno. Es una ruta que muchos han subido ... Uno puede hacerlo con, por ejemplo, Outlook Express, pasándole un archivo .eml con el formato adecuado.
fuente
El siguiente es un código de trabajo con dos formas de lograrlo:
fuente
Una pista adicional a la publicación de Pavel Perna que me ayudó mucho (no puedo comentar sobre mi reputación, es por eso que publico esto como respuesta): En algunas versiones de Microsoft Exchange, se elimina la disposición del contenido en línea ( consulte esta publicación de Microsoft ). La imagen simplemente no forma parte del correo que el usuario ve en Outlook. Como solución alternativa, utilice "Content-Disposition: Attachement" en su lugar. Outlook 2016 no mostrará las imágenes como archivos adjuntos que se utilizan en el mensaje de correo, aunque utilizan el "Contenido-Disposición: archivo adjunto".
fuente
Si utiliza Outlook para enviar una imagen estática con hipervínculo, una forma sencilla sería utilizar Word.
fuente