with sending images html image email base64

html - sending - imágenes codificadas en base64 en firmas de correo electrónico



send email with base64 image (3)

Tengo que incluir algunas imágenes (logotipo de la empresa, etc.) en las firmas de correo electrónico. He tenido todo tipo de problemas al utilizar las imágenes incrustadas producidas por el sistema de correo electrónico en cuestión (se envían como archivos adjuntos en general) y como imágenes vinculadas (que requieren permiso para mostrarlas en el correo electrónico recibido).

Acabo de ver algunos correos electrónicos de intercambio que tienen una representación de la imagen base64 del logotipo y usan una etiqueta para mostrarlos. Estoy buscando información sobre cómo puedo hacer esto en una firma de correo electrónico si es posible (¿cómo puedo generar la versión base64 del logotipo para empezar y qué código necesito para que funcione?)

He intentado cosas simples como

<body> <span> <img src=.... > </span> </body>

pero todo lo que obtengo es el texto alternativo, así que obviamente estoy haciendo algo mal aquí.


Importante

Mi respuesta a continuación muestra cómo incrustar imágenes usando URI de datos. Esto es útil para la web, pero no funcionará de manera confiable para la mayoría de los clientes de correo electrónico . Por correo electrónico, asegúrese de leer la respuesta de Shadow2531 .

Los datos de Base-64 son legales en una etiqueta img y creo que su pregunta es cómo insertar correctamente dicha etiqueta de imagen.

Puede usar una herramienta en línea o unas pocas líneas de código para generar la cadena base 64.

La sintaxis para la fuente de la imagen de datos en línea es:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO 9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">

http://en.wikipedia.org/wiki/Data_URI_scheme


La imagen debe estar incrustada en el mensaje como un archivo adjunto como este:

--boundary Content-Type: image/png; name="sig.png" Content-Disposition: inline; filename="sig.png" Content-Transfer-Encoding: base64 Content-ID: <0123456789> Content-Location: sig.png base64 data --boundary

Y, la parte HTML haría referencia a la imagen así:

<img src="cid:0123456789">

En algunos clientes, src = "sig.png" también funcionará.

Básicamente, tendría un mensaje multipart / mixed, multipart / alternative, multipart / related donde el adjunto de la imagen está en la parte relacionada. Puede ver la fuente de este archivo mbox (utiliza el ejemplo del nombre del archivo en lugar del ejemplo cid) para tener una idea.

Los clientes no deben bloquear esta imagen ya que no es remota.

O bien, aquí hay un ejemplo multipart / alternativo, multiparte / relacionado como un archivo mbox (guarde como formato de nueva línea de Windows y ponga una línea en blanco al final. Y no use extensión o la extensión .mbs):

From From: [email protected] To: [email protected] Subject: HTML Messages with Embedded Pic in Signature MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="alternative_boundary" This is a message with multiple parts in MIME format. --alternative_boundary Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit test -- [Picture of a Christmas Tree] --alternative_boundary Content-Type: multipart/related; boundary="related_boundary" --related_boundary Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: 8bit <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <p>test</p> <p class="sig">-- <br><img src="cid:0123456789"></p> </body> </html> --related_boundary Content-Type: image/png; name="sig.png" Content-Disposition: inline; filename="sig.png" Content-Location: sig.png Content-ID: <0123456789> Content-Transfer-Encoding: base64 R0lGODlhKAA8AIMLAAD//wAhAABKAABrAACUAAC1AADeAAD/AGsAAP8zM///AP// ///M//////+ZAMwAACH/C05FVFNDQVBFMi4wAwGgDwAh+QQJFAALACwAAAAAKAA8 AAME+3DJSWt1Nuu9Mf+g5IzK6IXopaxn6orlKy/jMc6vQRy4GySABK+HAiaIoQdg uUSCBAKAYTBwbgyGA2AgsGqo0wMh7K0YEuj0sUxRoAfqB1vycBN21Ki8vOofBndR c1AKgH8ETE1lBgo7O2JaU2UFAgRoDGoAXV4PD2qYagl7Vp0JDKenfwado0QCAQOQ DIcDBgIFVgYBAlOxswR5r1VIUbCHwH8HlQWFRLYABVOWamACCkiJAAehaX0rPZ1B oQSg3Z04AuFqB2IMd+atLwUBtpAHqKdUtbwGM1BTOgA5YhBr374ZAxhAqRVLzA53 OwTEAjhDIZYs09aBASYq+94HfAq3cRt57sWDct2EvEsTpBMVF6sYeEpDQIFDdo62 BHwZApjEhjW94RyQTWK/FPx+Ahpg09GdOzoJ/ESx0JaOQ42e2tsiEYpCEFwAGi04 8g6gSgNOovD0gBeVjCPR2BIAkgOrmSNxPo3rbhgHZiMFPnLkBg2BAuQ2XdmlwK1Z ooZu1sRz6xWlxd4U9GIHwOmdzFgCFKCERYNoeo2BZsPp0KY+A/OAfZDYWKJZLZBo 1mQXdlojvxNYiXrD8I+2uEvTdFJQksID0XjXiUwjJm6CzBVeBQgwBop1ZPpC8RKt YN5RCpS6XiyMht093o8KcFFf/vKE0dCmaLeWYhQMwbeQaHLRfNk9o5Q13lQGklFQ aMLFRLcwcN5qSWmGxS2jKQQFL9nEAgxsDEiwlAHaPPJWIfroo6FVEun0VkL4UABA CAjUiIAFM2YQogzcoLCjC3HNsYB1aSBB5JFrZBABACH5BAkUAAsALAAAAAAoADwA AwT7cMlJa3U2670x/6DkjKQXnleJrqnJruMxvq8xHDQbJEyC5yheAnh6MI5HYkgg YNgGSo7BcGAMBNHNYGA7ELpZiyFBLg/DFvLArEBPHoAEgXDYChQP90IAoNYJCoGB aACFhX8HBwoGegYAdHReijZoBXxmPWRYYQ8PZmSZZHmcnqBITp2jSgIBN5BVBFwC BVkGAQJPiVV2rFCrCq1/sXUHAgQFAL45BncFNgSfW8wASoKBB59lhoVAnQqfDNCf AJ05At5msHPiCeSqLwUBzF6nVnXSuIwvTDYGsXPhiMmSRUOWAC436HmZU+yGDQYF 81FhV+aevzUM3oHoZBD7W7Zs9VaUIhOn4pwE38p0srLCQCqSciBFUuBFGgEryj7E Ojhg2yOG1hQMIMCEy4p8PB8llKmAIReiW040keUvmUygiexcwbWJwxUrzBDW+Thn qLEB5UDUe0LxYwJmAhKk+pAqVLZE69qWGZpTQwG7ZISuw7uwzDFAXTXYYoJraKym Q/HSASDpiiUFljbYitfYRtCF635yMRBUn4UA8aYclCw0shefW7gUgPxBKGPHA5pK MpwsKy5AcmNZSIVHjdjI2eLwVZlK44IHQT8lkq7XTDznrAIEWMTErZwbsT/hQj1L noXLV6YwS5eIJqIDf4tyLZB5Av1ZNrLzQSplrXVkOgxItBU1E+DCwC2xFZUME5dZ c5AB9aw2jXkSQLhFIrj4xAx9szGWzwABdkGATwuAeEokW4wY24oK8MMViAjxxcc8 E0CUAYETIKAjAifgWGMI2ehBgVtCeleGEkYmeUYGEQAAIfkECRQACwAsAAAAACgA PAADBPtwyUlrdTbrvTH/oOSMpBeeV4muqcmu4zG+r6EcNBskSoLnJ4VQCAw9ErzE oxgSCBSGwYDJMRgOhIGAupFGsVEG12JAmpHicaU3QDPe6fHjoSAQDlIBY6leDIUD dnp9C04DdXh3eAaEUTeKdwJRagUCBGdnW3JHmJh8XHNmWAeLDwCfRQIBA6MMiQMG AgBcBgGSUgeuWQMAvb1MAgWruXAMrJYAUkU2wVGXDGZeAIxMCgVfaJhOVkB/PWeX nXM5AnScSKR2dmZzqCwFUAKjo1l4XpLULNuwWXYHAHgWCYD15AXBgV+wEACg7sDA A45oaLFy5ZKvXvYMEPCGYvvOwQOYAHRCQufFuU7/wp2Zo2AKCgPtwN3xR8/LLpcg kg1khaVlQyw8GRAwlC8nvp2HeM5UR8CYxp05L8ay8YcplmLGtmniwCtKLFhJR9oR amnAuBAiH9wK9G1kAgaxBCg5u6HdSUzp1LlNCqJAgZGBaC41Q6DAUAUfajm5ZUdK v7z08ATjmKGWAltecaVTqE5oFisB/EIpSiH06IcKpQTa3JSVagPCWm7wZsgOwJkg 3xaTrJFkFgvtFHDywmt1J2iB2pC0C9x0yItnsLx1K8xdoQDYCcQ9I5KwaynaalUS RnpBpYH4YiXoTipgIlIFtLSUFKwSBb/NtGCnb2Zl51fHo8hnhRZbSfCEKkgZkkcw TgBgyVdxeQNRMNNMoMBOpBxFUSx+ObgYPgS1BBRss/jxxzwAqsbLRfwh1VJyF5WI 2AkIAIAAAiiUKMGMICDRXQIn6IiCW4Qs4NYZTByppBkbRAAAIf4ZQm95J3MgSGFw cHkgSG9saWRheXMgUGFnZQA7 --related_boundary-- --alternative_boundary--

Puede importar eso a Sylpheed o Thunderbird (con la extensión de herramientas Importar / Exportar) o al cliente de correo incorporado de Opera. Luego, en Opera, por ejemplo, puede alternar "prefiera texto sin formato" para ver la diferencia entre el HTML y la versión de texto. De todos modos, verás que la versión HTML hace uso de la imagen incrustada en el sig.


Recientemente tuve el mismo problema al incluir QR image / png en el correo electrónico. La imagen QR es una matriz de bytes que se genera con ZXing. No queremos guardarlo en un archivo porque guardar / leer de un archivo es demasiado caro (lento). Entonces, las dos respuestas anteriores no funcionan para mí. Esto es lo que hice para resolver este problema:

import javax.mail.util.ByteArrayDataSource; import org.apache.commons.mail.ImageHtmlEmail; ... ImageHtmlEmail email = new ImageHtmlEmail(); byte[] qrImageBytes = createQRCode(); // get your image byte array ByteArrayDataSource qrImageDataSource = new ByteArrayDataSource(qrImageBytes, "image/png"); String contentId = email.embed(qrImageDataSource, "QR Image");

Digamos que contentId es "111122223333", luego su parte HTML debería tener esto:

<img src="cid: 111122223333">

No es necesario convertir la matriz de bytes a Base64 porque Commons Mail hace la conversión automáticamente. Espero que esto ayude.