Envio de Email em C# (.NET): biblioteca System.Net.Mail

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Envio de Email em C# (.NET): guia completo sobre System.Net.Mail

No desenvolvimento moderno na plataforma .NET, a tarefa de enviar e-mails é resolvida pela biblioteca padrão System.Net.Mail. Esta ferramenta integrada não requer a instalação de pacotes NuGet adicionais e fornece uma API flexível para criar e enviar mensagens de correio através de um servidor SMTP. Neste artigo, analisaremos detalhadamente todos os componentes principais da biblioteca, veremos exemplos de código, tratamento de erros e melhores práticas.



Classes principais da biblioteca

A biblioteca System.Net.Mail inclui três classes principais:

  • SmtpClient — responsável pela conexão ao servidor SMTP e envio de mensagens.
  • MailMessage — representa o próprio e-mail: assunto, corpo, remetente, destinatários, anexos.
  • Attachment — permite adicionar arquivos ao e-mail.


Exemplo básico de envio de Email

Vamos considerar o cenário mais simples: envio de um e-mail de texto através do servidor SMTP do Gmail. Observe que para trabalhar com o Gmail, será necessária uma senha de aplicativo (App Password) devido à autenticação de dois fatores.

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

class Program{ static void Main() { var fromAddress = new MailAddress("your@gmail.com", "Seu Nome"); var toAddress = new MailAddress("recipient@example.com", "Destinatário"); const string fromPassword = "sua_senha_de_aplicativo"; const string subject = "E-mail de teste do .NET"; const string body = "Olá! Este e-mail foi enviado usando C#.";

var smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(fromAddress.Address, fromPassword) };

using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body }) { smtp.Send(message); }

Console.WriteLine("E-mail enviado!"); }}


Envio de e-mails HTML com anexos

Frequentemente, é necessário enviar um e-mail em formato HTML com arquivos anexados. Para isso, defina a propriedade IsBodyHtml = true e use a coleção Attachments.

using (var message = new MailMessage(fromAddress, toAddress)){    message.Subject = "Relatório do mês";    message.IsBodyHtml = true;    message.Body = "<h2>Olá!</h2><p>Seu relatório está em anexo.</p>";

// Adiciona anexo var attachment = new Attachment(@"C:\\reports\\report.pdf"); message.Attachments.Add(attachment);

smtp.Send(message);}


Envio assíncrono (async/await)

Para envio não bloqueante em aplicações modernas, use SendMailAsync. Isso é especialmente importante em aplicações web (ASP.NET Core) e programas desktop com interface de usuário.

public async Task SendEmailAsync(){    using (var message = new MailMessage(fromAddress, toAddress)    {        Subject = "Envio assíncrono",        Body = "E-mail enviado de forma assíncrona"    })    {        await smtp.SendMailAsync(message);    }}


Tratamento de exceções

Ao trabalhar com servidores de correio, podem ocorrer erros: credenciais inválidas, timeouts, problemas com DNS. Sempre envolva o envio em um bloco try-catch.

try{    smtp.Send(message);    Console.WriteLine("Enviado com sucesso.");}catch (SmtpException ex){    Console.WriteLine($"Erro SMTP: {ex.StatusCode} - {ex.Message}");}catch (Exception ex){    Console.WriteLine($"Erro geral: {ex.Message}");                    

Recommendations