Embutindo Imagens no envio de Emails

Finalmente a versão 2.0 do .NET Framework já traz intrinsicamente um recurso que nas versões anteriores somente conseguíamos com a utilização de componentes de terceiros; trata-se da opção de agora podermos embutir dentro do email imagens que farão parte do conteúdo do mesmo.

Nas versões anteriores, se não quiséssemos utilizar componentes de terceiros, tínhamos que disponibilizar em algum lugar, geralmente imagens, que iriam fazer parte do conteúdo do email e, através do acesso via HTTP, a exibíamos. O ponto negativo disso é que depende de uma conexão ativa com a internet para que o usuário consiga visualizar essas imagens.

Felizmente na versão 2.0, temos duas principais classes para trabalharmos com isso. São elas: AlternateView e LinkedResource. A primeira especifica diferentes cópias do conteúdo do email, ou seja, voce define o email com o formato e tags HTML e, se o leitor de emails do destinatário não suportar HTML, voce pode fornecer através desta classe, uma versão em Plain Text do mesmo conteúdo. Já a segunda classe, representa um recurso externo que será embutido dentro do conteúdo do email que, na maioria dos casos, é uma imagem. Depois desta classe criada, o adicionamos na coleção de LinkedResources do objeto AlternateView.

O código abaixo mostra-nos como devemos proceder para conseguirmos enviar um email com uma imagem embutida no corpo do mesmo:

     using System.Net.Mail;
     using System.Net.Mime;

     MailMessage mail = new MailMessage(“israel@projetando.net“, “israel@projetando.net“);
     mail.Subject = “Testando Imagens Embutidas”;
     string body = @”<img src=””cid:Imagem1″” /><br><br>Embutindo Imagens no Email.”;

     AlternateView view = 
          AlternateView.CreateAlternateViewFromString(body, null, MediaTypeNames.Text.Html);

     LinkedResource resource = new LinkedResource(Server.MapPath(“Logo.gif”));
     resource.ContentId = “Imagem1”;
     view.LinkedResources.Add(resource);

     mail.AlternateViews.Add(view);
     mail.IsBodyHtml = true;
     new SmtpClient(“mail.servidor.com.br”).Send(mail);

Como podemos analisar no código acima, criamos uma classe do tipo MailMessage, como já fazíamos nas versões anteriores. Dentro do conteúdo do email (body), definimos a tag img e o atributo src que corresponderá a imagem no local que desejarmos. Através do cdi especificamos que o conteúdo será “substituído” pelo conteúdo que mais tarde vamos vir a embutir. Através do método CreateAlternateViewFromString, onde passamos o corpo da mensagem e o tipo que ela irá ser (no caso HTML), devolvemos uma instancia da classe AlternateView baseada nesses mesmos parametros.

Depois disso, criamos um objeto do tipo LinkedResource, onde vamos definir a imagem (ou recurso) que vamos embutir. É importante dizer que a propriedade ContentId deve ser exatamente o mesmo ID que definimos no cid do corpo da mensagem. Agora basta adicionarmos o objeto na coleção de LinkedResources do objeto AlternateView e, este por sua vez, adicionamos na coleção de Views do objeto MailMessage.

Finalmente, através de uma instancia do objeto SmtpClient, utilizamos o método Send para enviar o email. A Imagem abaixo mostra o email já dentro do Microsoft Outlook. Reparem que a imagem é embutida no local que definimos dentro do código HTML do corpo da mensagem e que também que não existem arquivos anexados ao email.

Anúncios