Bien, directo al punto: Esta vez tuve la necesidad de encontrar una forma de insertar una imagen en el cuerpo de un mensaje de correo electrónico, pero, ésta no debe ser importada de otra ubicación y tampoco debe ser un adjunto del mensaje.
¿Cómo lograr esto?
Investigando un poco dí con este artículo en www.variablenotfound.com donde se muestra cómo se puede realizar esta azaña (jeje); cabe mencionar que el código que allí publicaron está hecho en C#, y yo me tomé la libertad de pasarlo a Visual Basic .NET.
El código es el siguiente:
' Necesitaremos estos namespaces... Imports System.Net.Mail Imports System.Net.Mime Module Module1 Sub Main() ' Crearé algunas variables aquí para facilitar las pruebas: Dim MiDireccionDeCorreo as String = "" Dim DireccionCorreoDestino as String = "" Dim DireccionSMTP as String = "" 'Puede ser una IP o una URL Dim PuertoSMTP = 25 Dim Imagen as String = "" 'Ruta completa y nombre de la imagen. Try ' Montamos la estructura básica del mensaje... Dim mail As MailMessage = New MailMessage() mail.From = New MailAddress(MiDireccionDeCorreo) mail.To.Add(DireccionCorreoDestino) mail.Subject = "Mensaje con imagen" ' Creamos la vista para clientes que ' sólo pueden acceder a texto plano... Dim text As String = "Hola, ayer estuve disfrutando de " & _ "un paisaje estupendo." Dim plainView As AlternateView = AlternateView.CreateAlternateViewFromString(text, System.Text.Encoding.UTF8, MediaTypeNames.Text.Plain) ' Ahora creamos la vista para clientes que ' pueden mostrar contenido HTML... Dim html As String = "<h2><b>¡¡¡Hola!!!</b> Mira dónde estuve ayer:</h2>" & _ "<img src='cid:wbtestimagenbg' />" Dim htmlView As AlternateView = AlternateView.CreateAlternateViewFromString(html, System.Text.Encoding.UTF8, MediaTypeNames.Text.Html) ' Creamos el recurso a incrustar. Observen ' que el ID que le asignamos (arbitrario) está ' referenciado desde el código HTML como origen ' de la imagen Dim img As LinkedResource = New LinkedResource(Imagen, MediaTypeNames.Image.Jpeg) img.ContentId = "wbtestimagenbg" ' Lo incrustamos en la vista HTML... htmlView.LinkedResources.Add(img) ' Por último, vinculamos ambas vistas al mensaje... mail.AlternateViews.Add(plainView) mail.AlternateViews.Add(htmlView) ' Y lo enviamos a través del servidor SMTP... Console.Out.WriteLine("Empiezo a crear el cliente smtp...") Dim smtp As SmtpClient = New SmtpClient(DireccionSMTP, PuertoSMTP) Console.Out.WriteLine("Y envio el correo...") smtp.Send(mail) Console.Out.WriteLine("Correo enviado") Catch ex As Exception Console.Out.WriteLine(ex.ToString) Threading.Thread.Sleep(60000) End Try End Sub End Module
Este código me funcionó con un smtp que no requería autenticación. Si ya han hecho pruebas exitosas de envío de correo, se puede simplemente reemplazar la definición de mi cliente smtp con el que hayan utilizado.
Espero que sea de utilidad; saludos y hasta la próxima.
No hay comentarios:
Publicar un comentario