none
Envío de correo con imagen incrustada

    Pregunta

  • Saludos a todos.

    Tengo una clase para el envío de correos, me ha surgido la necesidad de enviar un correo con una imagen incrustada; la clase funciona bien, el problema es que a través del correo del trabajo Office Outlook Web Access (conectado a Microsoft Exchange) desde la intranet y Outlook Web App (conectado a Microsoft Exchange) , desde casa no se ve la imagen sino el mensaje que muestro en la siguiente imagen:

    Sin embargo, si abro el mismo correo con Microsoft Outlook se ve la imagen perfectamente. En gmail y outlook.live y yahoo también se ve correctamente el correo con la imagen.

    El archivo adjunto ATT0001...bin es realmente la imagen, me lo he descarhado, lle he cambiado la extensión y se abre la imagen.

    Haciendo la prueba de enviar el correo a través de Microfost outllok 2010 el correo se ve sin problemas en el owa ¿Qué hace Microsoft outlook que no hago yo?

    También he comprobado que en algunos ordenadores si se llega a ver la imagen con OWA.

    ¿Alguien que haya tenido el mismo problema o parecido? ¿Alguien que me pueda dar una ayuda con esto?

    El servidor es un Exchange 2007 (no se si dependerá del servidor), no usa ssl y el puerto es el 25.

    Utilizamos internet explorer 10, ya que las versiones posteriores no son compatibles y algunos usuarios lo tienen configurado en Microsoft Outlook 2007 y 2010.

    Ya se que la primera solución es configurar el correo con microsoft oullok a todos los usuarios, pero son cerca de 200 y no quiero forzarlo así, debe haber alguna manera de no hacerlo.

    Muchas gracias, de antemano, por la ayuda que me puedan brindar, es importante que lo consiga.

    A continuación muestro la clase que envía el correo (El que quiera la puede utilizar, funciona bien)

    	public class Correo
    	{
    		string servidorSMTP; int puerto; bool ssl = false;
    		string correoRemitente;
    		string nombreRemitente;
    		string correoDestinatario;
    		string asunto;
    		string mensaje;
    		string contraseña;
    		string archivoAdjunto;
    		string imagenMailling;
    
    		public string ServidorSMTP { set { servidorSMTP = value; } }
    		public int Puerto { set { puerto = value; } }
    		public bool SSL { set { ssl = value; } }
    		public string CorreoRemitente { set { correoRemitente = value; } }
    		public string Contraseña { set { contraseña = value; } }
    		public string NombreRemitente { set { nombreRemitente = value; } }
    		public string CorreoDestinatario { set { correoDestinatario = value; } }
    		public string Asunto { set { asunto = value; } }
    		public string Mensaje { set { mensaje = value; } }
    		public string ArchivoAdjunto {set { archivoAdjunto = value; } }
    		public string ImagenMailling { set { imagenMailling = value; } }
    
    		public void Enviar()
    		{
    			try
    			{
    				MailMessage correo = new MailMessage();
    				SmtpClient smtp = new SmtpClient();
    
    				correo.From = new MailAddress(correoRemitente, nombreRemitente, System.Text.Encoding.UTF8);
    				correo.To.Add(correoDestinatario);
    
    				correo.Subject = asunto;
    				correo.SubjectEncoding = System.Text.Encoding.UTF8;
    
    				correo.Body = mensaje;
    				correo.BodyEncoding = System.Text.Encoding.UTF8;
    
    				correo.IsBodyHtml = true;
    
    				correo.Priority = MailPriority.High;
    
    				if (archivoAdjunto != null)
    				{
    					correo.Attachments.Add(new Attachment(archivoAdjunto));
    				}
    
    				if (imagenMailling != null)
    				{
    					AlternateView VistaTextoPlano = AlternateView.CreateAlternateViewFromString(mensaje, null, "text/plain");
    					AlternateView VistaHtml = AlternateView.CreateAlternateViewFromString(mensaje + "<img src=cid:ImgMailling>", null, "text/html");
    
    					LinkedResource img = new LinkedResource(imagenMailling);
    					img.ContentId = "ImgMailling";
    
    					VistaHtml.LinkedResources.Add(img);
    
    					correo.AlternateViews.Add(VistaTextoPlano);
    					correo.AlternateViews.Add(VistaHtml);
    				}
    
    				smtp.Credentials = new System.Net.NetworkCredential(correoRemitente, contraseña);
    				smtp.Port = puerto;
    				smtp.Host = servidorSMTP;
    				smtp.EnableSsl = ssl;
    
    				smtp.Send(correo);
    			}
    			catch (System.IO.IOException)
    			{
    				throw new Exception("Error al enviar el correo" + (char)13 + (char)13 + "No se encontró el archivo " + archivoAdjunto);
    			}
    			catch (SmtpException ex)
    			{
    				throw new Exception("Error al enviar el correo" + (char)13 + (char)13 + "No se ha enviado el correo debido al siguiente error:" + (char)13 + (char)13 + ex.Message);
    			}
    			catch (Exception ex)
    			{
    				throw new Exception("Error al enviar el correo" + (char)13 + (char)13 + "No se ha enviado el correo debido al siguiente error:" + (char)13 + (char)13 + ex.Message);
    			}
    		}
    	}





    • Editado FPLS_ jueves, 14 de septiembre de 2017 19:42
    jueves, 14 de septiembre de 2017 19:05

Respuestas

  • Gracias por tu respuesta.

    La imagen es jpg y no quiero que vaya adjunta como un archivo, ya que es un mailling a una lista de suscriptores indicando la apertura de un curso y lo que se ve en el correo es la imagen publicitaria con los datos del curso. Obligatoriamente tiene que verse la imagen al abrir el correo, por eso es que tiene que ir incrustada y no adjunta como un archivo.

    La idea es que apenas se realice la apertura del curso en el sistema se envíe el mailling a la lista de subscriptores.

    Funciona con todos los correos menos con el OWA.

    Lo que me había olvidado de indicar es que si el mismo correo lo envío a través de Microsoft Outlook 2010 no hay problema. ¿Qué hace Microsoft Outlook que no hago yo?



    • Editado FPLS_ jueves, 14 de septiembre de 2017 19:45
    • Marcado como respuesta Pablo RubioModerator jueves, 25 de enero de 2018 15:31
    jueves, 14 de septiembre de 2017 19:40

Todas las respuestas

  • Si es una imagen por que no la envias como jpg ,png  o  jpeg ? 


    Pasa los puntos prro v:

    jueves, 14 de septiembre de 2017 19:11
  • Gracias por tu respuesta.

    La imagen es jpg y no quiero que vaya adjunta como un archivo, ya que es un mailling a una lista de suscriptores indicando la apertura de un curso y lo que se ve en el correo es la imagen publicitaria con los datos del curso. Obligatoriamente tiene que verse la imagen al abrir el correo, por eso es que tiene que ir incrustada y no adjunta como un archivo.

    La idea es que apenas se realice la apertura del curso en el sistema se envíe el mailling a la lista de subscriptores.

    Funciona con todos los correos menos con el OWA.

    Lo que me había olvidado de indicar es que si el mismo correo lo envío a través de Microsoft Outlook 2010 no hay problema. ¿Qué hace Microsoft Outlook que no hago yo?



    • Editado FPLS_ jueves, 14 de septiembre de 2017 19:45
    • Marcado como respuesta Pablo RubioModerator jueves, 25 de enero de 2018 15:31
    jueves, 14 de septiembre de 2017 19:40

  • Pasa los puntos prro v:

    Acabo de hacer una prueba enviandolo como adjunto y jpg  y me envia y le llega en un formato pequeño pero se ve 
    • Editado D A N E jueves, 14 de septiembre de 2017 20:27
    jueves, 14 de septiembre de 2017 20:26
  • hola

    aqui

    MailMessage – Adjuntar Imagen en el cuerpo del Mail

    explico como puedes usar el cid para que la imagen que se agrega como resource

    recuerda que el imagenMailling tienes que ser una ruta fisica al archivo, no solo el nombre

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP jueves, 14 de septiembre de 2017 21:11
    • Propuesto como respuesta D A N E jueves, 14 de septiembre de 2017 21:18
    jueves, 14 de septiembre de 2017 21:09
  • Si adjunto lo que se ve es un thumbnail de la imagen adjunta y esa no es la idea. Vuelvo a repetir que la idea es que se vea la imagen como parte del correo, es decir, incrustada.

    Recalco que el problema no es que la clase no funcione, como ya comenté antes, si el mailling lo hago a yahoo, gmail, outllok.live o si el mismo correo se abre a través de Microsoft Outlook el correo se ve bien, como puedes observar en la imagen que adjunto.

    Si este mismo correo lo abro con con internet explorer 10 mediante Office Outlook Web Access se ve así:

    Mi problema justamente es ese, que por Microsoft Outlook, gmail, yahoo, etc, el correo se ve bien. Si envío el correo a través de NMicrosoft outllok en vez de mi programa, el correo en internet explorer se ve bien.

    La cuestión es ¿Qué hace Microsoft Outlook que no hago yo en mi programa para que se vea bien el correo?

    viernes, 15 de septiembre de 2017 8:58
  • Buenos días Leandro

    Como puedes ver en mi respuesta anterior, el programa que he hecho sí funciona e incrusta bien la imagen.

    Cuando el mismo correo lo envío desde Microsoft Outlook lo puedo ver bien y no sale el mensaje de eSafe.

    Te hago la misma pregunta:

    ¿Qué hace Microsoft Outlook que no hago yo en mi programa para que el correo se pueda ver bien en todas partes? debe faltarme algún tipo de configuración de seguridad.

    Y vuelvo a comentar, el servidor de correo no usa ssl y va a través del puerto 25.

    Saludos.

    Este es el mismo correo enviado a gmail:

     

    viernes, 15 de septiembre de 2017 9:05
  • hola

    aqui

    MailMessage – Adjuntar Imagen en el cuerpo del Mail

    explico como puedes usar el cid para que la imagen que se agrega como resource

    recuerda que el imagenMailling tienes que ser una ruta fisica al archivo, no solo el nombre

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    Hola Leandro,

    He utilizado el programa de tu enlace, en concreto MailMessage3_de_3 que tiene la imagen estadistica.jpg y obtengo el mismo resultado.

    A ver si encontramos una solución entre todos.

    Gracias nuevamente.


    • Editado FPLS_ viernes, 15 de septiembre de 2017 10:16
    viernes, 15 de septiembre de 2017 10:15