entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Poner imagenes en el fondo de un correo usando c#

Parte de un proyecto que tengo que hacer requiere de enviar una factura por correo electrónico,esta debe tener dos imagenes,un poster de una película y un código de barras(es un sistema de cines);ya tengo el código para enviar el correo y crear el código de barras, pero cuando el correo llega no tiene imagenes.
Todo lo que he encontrado en internet requiere de la ruta de la imagen para cargarla en el fondo, pero en mi programa el postern de la película esta en un arreglo de bits en la base de datos y el código de barras se crea despues de la factura de modo que no tengo una ruta específica para ninguna de las dos.
Este es el código que estoy usando actualmente para enviar ese correo:

static public void enviarCorreo(string mensaje,string destinatario,byte[] AfichePelicula, byte[] CodigoBarras)
        {
            MailMessage correos = new MailMessage();
            SmtpClient envios = new SmtpClient();
            MemoryStream imagenPelicula = new MemoryStream(AfichePelicula);
            MemoryStream imagenCodigo = new MemoryStream(CodigoBarras);
            try
            {
                correos.To.Clear();
                correos.Body = "";
                correos.Subject = "";

                AlternateView plainView = AlternateView.CreateAlternateViewFromString(mensaje, null,MediaTypeNames.Text.Plain);
                AlternateView htmlView = AlternateView.CreateAlternateViewFromString("image.<img src=cid:AfichePelicula>", null,MediaTypeNames.Image.Jpeg);
                AlternateView htmlView1 = AlternateView.CreateAlternateViewFromString("image.<img src=cid:CodigoBarras>", null,MediaTypeNames.Image.Jpeg);
                LinkedResource imagen1 = new LinkedResource(imagenPelicula,MediaTypeNames.Image.Jpeg);
                imagen1.ContentId = "AfichePelicula";
                imagen1.ContentType = new ContentType("image/jpg");
                LinkedResource imagen2 = new LinkedResource(imagenCodigo,MediaTypeNames.Image.Jpeg);
                imagen2.ContentId = "CodigoBarras";
                imagen2.ContentType = new ContentType("image/jpg");
                correos.Subject = Asunto;
                correos.IsBodyHtml = true;
                correos.To.Add(destinatario.Trim());
                correos.From = new MailAddress(Emisor);
                correos.AlternateViews.Add(plainView);
                correos.AlternateViews.Add(htmlView);
                correos.AlternateViews.Add(htmlView1);
                envios.Credentials = new NetworkCredential(Emisor,Password);

                envios.Host = "smtp.gmail.com";
                envios.Port = 587;

                envios.EnableSsl = true;
                envios.Send(correos);
             }
            catch (Exception ex)
            {
                throw;
            }
        }

¿Que me hace falta para que esas imagenes sean agregadas al correo?

1 Respuesta

3votos

carlossevi Puntos63580

Hay varias formas de mostrar imágenes en un email: aquí un resumen. Te pongo una solución basada en la técnica de CID (Content-ID):

En primer lugar, tienes que adjuntar la imagen al email y asignarle un CID.

string contentID = "MiImagenFavorita.gif";
// Suponiendo que la imagen la tienes en el proyecto como recurso:
System.IO.MemoryStream memorySt = new MemoryStream();
TuProyecto.Properties.Resources.NombreRecurso.Save(memorySt,System.Drawing.Imaging.ImageFormat.Gif);
memorySt.Position = 0;
Attachment adjuntoImagen = new Attachment(memorySt, contentID);
adjuntoImagen.ContentId = contentID;
Mensaje.Attachments.Add(adjuntoImagen);

Como segundo paso, debes usar el CID asignado en el HTML del email:

<html>
  <body>
    <img src="cid:MiImagenFavorita.gif"/>
  </body>
</html>

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta