Hay varias formas de enviar correos con imágenes embebidas en el mensaje:
1.- Podrías mandar un correo en formato html (vean este post de cómo enviar correos en formato html) e incluyan la imagen a través de un tag html img. Ejemplo:
<span style=”color: blue”>Este es el cuerpo del mensaje, el cual incluye una llamada a una image guardada en un servidor</span>
<img src=”http://www.google.com/intl/en_ALL/images/logo.gif” alt=”Esta es la imagen incluida en el correo” />
… esto puede funcionar, pero puede que no.
En qué casos podría fallar?
+Si se cambió la ruta de la imagen en el servidor, ya no verías la imagen.
+Si se cambió el nombre a la imagen, ya no verías la imagen.
+Si el correo del cliente no está configurado para mostrar correos html, ya no verías la imagen.
+Si el servidor está atendiendo demasiadas peticiones… demorarías en ver la imagen… o no la verías.
+Si el servidor está inoperativo ya no verías la imagen.
+Si te cortan el internet, ya no verías la imagen.
+etc, etc, etc…
Algo más? Sí, estarías consumiendo ancho de banda… osea un problema más.
En fin, hay más casos, pero estarás de acuerdo conmigo en que mejor es buscar otro método más seguro y eficaz… un método por ejemplo que me permita embeber la imagen en el correo, de modo que se haga independiente una vez recibido el correo.
Claaaaaarooooooooooooo… eso sería perfecto!!! pero existe una forma de hacer eso?
La respuesta es sí. Vamos a mostrar dos formas de hacerlo:
1.- Enviar correo en texto plano con imagenes embebidas
2.- Enviar correo en formato html con imagenes embebidas
1.- Enviar correo de texto plano con imagenes embebidas.- Para ello usamos el siguiente método:
Dim Mail As MailMessage = New MailMessage()
Dim Mensaje As String = "Este es el mensaje<img src='cid:imagen001' />"
Mail.From = New MailAddress("unmonitored@jabs.com.pe")
Mail.To.Add("sserrano@jabs.com.pe")
Mail.Subject = "correo con imagen embebida"
Mail.Body = Mensaje
Dim TextoConImagenes As AlternateView
TextoConImagenes = AlternateView.CreateAlternateViewFromString(Mensaje, Nothing, "text/plain")
Dim imagen As LinkedResource
imagen = New LinkedResource((Server.MapPath("Images\tefina.gif")))
imagen.ContentId = "imagen001"
TextoConImagenes.LinkedResources.Add(imagen)
Mail.AlternateViews.Add(TextoConImagenes)
Dim mailClient As New SmtpClient()
Dim basicAuthenticationInfo As New NetworkCredential("algun_correo", "su_contraseña")
mailClient.Host = "su_sevidor_de_correo"
mailClient.UseDefaultCredentials = True
mailClient.Credentials = basicAuthenticationInfo
mailClient.Send(Mail)
He pintado de rojo la parte que permite embeber una imagen en el mensaje… chequeen sobre todo esa parte.
y en el mensaje del correo, dense cuenta que he añadido <img src='cid:imagen001' /> … esa sería la imagen embebida. ;)
2.- Enviar correo en formato html con imagenes embebidas.- Casi, lo mismo… sólo cambian algunas cositas:
Dim Mail As MailMessage = New MailMessage()
Dim Mensaje As String = "Este es el mensaje<img src='cid:imagen001' />"
Dim MensajeHTML As String = "<span style='color: blue'>Este es el mensaje HTML</span><br /><img src='cid:imagen001' />"
Mail.From = New MailAddress("unmonitored@jabs.com.pe")
Mail.To.Add("sserrano@jabs.com.pe")
Mail.Subject = "correo con imagen embebida"
Mail.Body = Mensaje
Dim HTMLConImagenes As AlternateView
HTMLConImagenes = AlternateView.CreateAlternateViewFromString(MensajeHTML, Nothing, "text/html")
Dim imagen As LinkedResource
imagen = New LinkedResource((Server.MapPath("Images\tefina.gif")))
imagen.ContentId = "imagen001"
HTMLConImagenes.LinkedResources.Add(imagen)
Mail.AlternateViews.Add(HTMLConImagenes)
Dim mailClient As New SmtpClient()Dim basicAuthenticationInfo As New NetworkCredential("algun_correo", "su_contraseña")
mailClient.Host = "su_sevidor_de_correo"
mailClient.UseDefaultCredentials = True
mailClient.Credentials = basicAuthenticationInfo
mailClient.Send(Mail)
Para ambos casos, no se olviden de importar:
Imports System.Net.Mail
Imports System.Net
Cada imagen debe tener un ID, vale decir, un identificador… el cual le permitirá tener una ubicación en el mensaje y ser tratada como recurso embebido.
;)
10 comentarios:
hola quisiera saber cual es el namespaces de server pq no lo encuentro gracias.
Hola Rodrigo,
pues namespace es una propiedad de la clase Page... entonces, si no te lo está reconociendo, presumo que estás implementando el método en otra clase.
Y para que te funcione puedes anteponerle HttpContext, ejemplo:
HttpContext.Current.Server
Saludos.
Muy bueno en estos dias tenia que hacer algo parecido, buen post
hola, que buen post, me ha funcionado de maravilla, gracias.
Gracias zelski
;)
Funciona PERFECTO, pero tengo un problema:
Si al código html, además de poner un texto, añado un link con "a href" las imágenes ya no aparecen embebidas (van adjuntas) y el resto del texto pierde los atributos.
¿Tienes idea de porqué puede pasar esto?
Saludos y muchas gracias
Tendrías que asegurarte que estás cerrando correctamente el tag anchor, y que además estás creando un contenido de tipo text/html. Si no solucionas tu problema a ver si nos das más detalles.
Saludos.
hola muy inetresante pero si quiesiera que la imagen que quiero adjuntar biene de base de datos como la adjunto si no tiene ruta? y no quiero guardarla en un lugar temporal.
En un iphone si se ven pero en un galaxy 4s no por qie sera
hola disculpa quisiera hacer una prueba de algo similar tienes skype
Publicar un comentario