Início > .NET Framework > Enviando E-mail com o .NET

Enviando E-mail com o .NET

Hoje vou escrever sobre como criar e enviar um e-mail utilizando o .NET. Vamos direto ao assunto.

Criando um objeto MailMessage

No .NET você precisa instanciar a classe MailMessage para criar o seu e-mail. Para instanciá-la você deve incluir o namespace System.Net.Mail que provê uma série de features para este contexto.

No exemplo abaixo você verá como instanciar a classe MailMessage já configurando o remetente, destinatário, Assunto e o conteúdo.

MailMessage email = new MailMessage(remente@servidor.com, destinatario@servidor.com, “Assunto”, “Conteúdo”);

Você também pode utilizar o construtor padrão e configurar as propriedades posteriormente. Perceba que eu utilizei a classe MailAdress para adicionar o destinatário e o remetente.

MailMessage email = new MailMessage();
email.From = new MailAddress(“
remente@servidor.com“, “Remetente”);
email.To.Add(new MailAddress(“
destinatario@servidor.com“, “Destinatário”));
email.Subject = “Assunto”;
email.Body = “Conteúdo”;
email.Priority = MailPriority.Normal;

Anexando arquivos ao e-mail

Para anexar um arquivo qualquer no seu e-mail o seu objeto de e-mail criado e adicione um objeto “Attachment” contento o caminho para o arquivo.

email.Attachments.Add(new Attachment(@”C:\Pasta\arquivo.txt”));

Você também pode utilizar as configurações do “Attachment” para anexar arquivos do tipo MIME direto da memória. mas para isso você precisa ter carregado um objeto “Stream” contendo o seu arquivo.

Stream arq= new FileStream(@”C:\ebook.pdf”, FileMode.Open, FileAccess.Read);
email.Attachments.Add(new Attachment(arq, “livro.pdf”, MediaTypeNames.Application.Pdf));

E-mail com formato HTML

A classe MailMessage também permite que você crie o corpo do e-mail como html ao invés de um simples texto. Segue abaixo o exemplo.

email.Body = “<html><body>Este conteúdo é um html</body></html>”;
email.IsBodyHtml = true;

Alguns leitores de e-mail podem não ler e-mails quando o corpo do mesmo está configurado como html. Para isso você utiliza a classe AlternateView. Basta você criar uma visualização html e uma para um texto simples. Abaixo eu demonstro como fazer isso.

AlternateView visualizacaoHtml= AlternateView.CreateAlternateViewFromString(“Meu conteúdo html”, null, MediaTypeNames.Text.Html);
AlternateView visualizacaoTexto= AlternateView.CreateAlternateViewFromString(“Meu texto simples”, null, MediaTypeNames.Text.Plain);

email.AlternateViews.Add(visualizacaoHtml);
email.AlternateViews.Add(visualizacaoTexto);

E se você quiser incluir uma imagem dentro do conteúdo html que não seja um anexo utilize a classe LinkedResource. Preste atenção no src da imagem no conteúdo html e na propriedade ContentID do objeto LinkedResource.

AlternateView visualizacaoHtml = AlternateView.CreateAlternateViewFromString(“<html><body><img src=\”cid:Foto\”></body></html>”, null, MediaTypeNames.Text.Html);
LinkedResource recursoLinkado = new LinkedResource(“fotoSalva.jpg”, MediaTypeNames.Image.Jpeg);
recursoLinkado.ContentId = “Foto”;
visualizacaoHtml.LinkedResources.Add(recursoLinkado);

Enviando o e-mail criado

Para enviar o e-mail criado você irá utilizar uma classe chamada SmtpClient que também esta no namespace System.Net.Mail. Você apenas precisa ter o endereço do seu servidor SMTP, o resto o .Net fará pra você.

SmtpClient clienteSmtp = new SmtpClient(“smtp.servidor.com”);
clienteSmtp.Send(m);

Para habilitar envio com ssl utilize a propriedade EnableSsl.

clienteSmtp.EnableSsl = true;

Para configurar o envio de e-mail utilizando as credenciais default habilite a propriedade UseDefaultCredentials.

clienteSmtp.UseDefaultCredentials = true;

Para definir uma nova credencial adicione o namespace “System.Net” e configure a propriedade Credentials com um objeto NetworkCredential.

clienteSmtp.Credentials = new NetworkCredential(“usuário”, “senha”);

Você também pode utilizar a credencial que esta no cache do usuário.

clienteSmtp.Credentials = CredentialCache.DefaultNetworkCredentials;

Para configurar um TimeOut para o envio de e-mail utilize a propriedade Timeout.

clienteSmtp.Timeout = 10;

Enviando o e-mail de modo assíncrono

Como o envio de e-mail geralmente é um processo lento, pode acontecer de sua aplicação ficar esperando o envio para poder continuar o processamento. Podemos evitar isso utilizando o envio assíncrono. Para utilizar o envio assíncrono, você precisa associar um método (que tenha os parâmetros object e AsyncCompletedEventArgs)  ao evento SendCompleted e enviar o e-mail utilizando o método SendAsync.

clienteSmtp.SendCompleted +=new SendCompletedEventHandler(EnvioCompleto);
clienteSmtp.SendAsync(m);

static void EnvioCompleto(object sender, AsyncCompletedEventArgs e)
{ }
   

Para cancelar o envio de e-mail assíncrono basta chamar o método SendAsyncCancel

clienteSmtp.SendAsyncCancel;

É isso ai pessoal, espero que este artigo ajude vocês implementarem o envio de e-mail em suas aplicações.

Francisco Gonçalves

Categorias:.NET Framework
  1. Paulo Lobão
    21 de Junho de 2015 às 01:53

    Excelente! Muito boa explicação, resolvi o problema de envio de e-mail com texto e imagens!

  1. No trackbacks yet.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google photo

Está a comentar usando a sua conta Google Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s

%d bloggers like this: