Anexando imagens em e-mails HTML

Enviar e-mails em HTML é razoavelmente fácil, utiliza-se referência a imagens publicadas na web de forma que o e-mail fique leve, basta então configurar o e-mail como sendo HTML.

Porém quando o e-mail contém links que apontam para a web ele apenas pode ser lido se o usuário estiver conectado.

 

Uma forma de contornar este problema é enviar as imagens em anexo no e-mail. Mas não basta simplesmente anexar, as imagens serão referenciadas a partir de tags HTML dentro do e-mail, então o anexo precisa ser feito de tal forma a permitir essa referência. Isso é chamado de um linkedResource.

 

Veja abaixo o código para fazer esse envio. Para tornar o código mais interessante o smtp está com autenticação :

 

Primeiro a configuração básica

 

Dim mail As New Mail.MailMessage

mail.From = New MailAddress("contato@devmedia.com.br")

mail.To.Add("juliano@devmedia.com.br")

mail.Subject = "Testando o envio de imagem com html"

 

Agora a criação de uma alternate view, em formato HTML

observe o prefixo cid no objeto image, isso é padrão

 

Dim vw As AlternateView

vw = AlternateView.CreateAlternateViewFromString("Abaixo a imagem : <br><br><img src=""cid:imagem"">", Nothing, "text/html")

 

Neste ponto adicionamos um linked resource na alternate view

observe o contentId, que é utilizado na tag image para se referir ao objeto

 

Dim logo As New LinkedResource("c:\imagens\foto.jpg")

logo.ContentId = "imagem"

 

vw.LinkedResources.Add(logo)

 

A alternateview é adicionada ao objeto de e-mail

 

mail.AlternateViews.Add(vw)

 

A classe SMTP é utilizada para realizar o envio do e-mail

 

Dim smtp As New SmtpClient("email.devmedia.com.br")

smtp.Credentials = New NetworkCredential("juliano@devmedia.com.br", "xxxxxxxxxx")

smtp.Send(mail)