Envio de email em C# (.NET) usando SmtpClient e MailKit

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): do SmtpClient ao MailKit

O envio de emails é uma das tarefas essenciais no desenvolvimento de aplicações web, serviços de notificação e sistemas corporativos. No ecossistema .NET, existem tanto ferramentas nativas quanto bibliotecas de terceiros que simplificam o trabalho com SMTP, SSL/TLS e cenários complexos. Neste artigo, abordaremos detalhadamente como enviar email em C#, usando o clássico SmtpClient e a biblioteca moderna MailKit.



1. SmtpClient nativo (System.Net.Mail)

A classe SmtpClient está disponível no .NET Framework e no .NET Core/5+ (com algumas limitações). Ela permite configurar rapidamente o envio de email através de qualquer servidor SMTP.



Exemplo básico de envio de email

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

var smtpClient = new SmtpClient("smtp.gmail.com"){ Port = 587, Credentials = new NetworkCredential("your_email@gmail.com", "your_app_password"), EnableSsl = true};

var mailMessage = new MailMessage{ From = new MailAddress("your_email@gmail.com"), Subject = "Email de teste do C#", Body = "Olá! Esta mensagem foi enviada via SmtpClient.", IsBodyHtml = false};

mailMessage.To.Add("recipient@example.com");

try{ smtpClient.Send(mailMessage); Console.WriteLine("Email enviado com sucesso!");}catch (Exception ex){ Console.WriteLine($"Erro ao enviar: {ex.Message}");}

Importante: Para o Gmail, será necessária uma senha de aplicativo, e não a senha comum. Para outros serviços (Yandex, Mail.ru), verifique as configurações de SMTP.



Envio de email HTML com anexo

var message = new MailMessage();message.From = new MailAddress("sender@example.com");message.To.Add("user@example.com");message.Subject = "Relatório mensal";message.IsBodyHtml = true;message.Body = "<h2>Relatório mensal</h2><p>O arquivo PDF está em anexo.</p>";

// Adicionando anexovar attachment = new Attachment(@"C:\\Reports\\report.pdf");message.Attachments.Add(attachment);

using (var client = new SmtpClient("smtp.example.com", 587)){ client.Credentials = new NetworkCredential("login", "password"); client.EnableSsl = true; client.Send(message);}

Os anexos podem ser de qualquer tipo: imagens, documentos, arquivos compactados. Para enviar a partir da memória, use MemoryStream.



2. Envio assíncrono

Em aplicações modernas, é recomendável não bloquear a thread. Use SendMailAsync:

public async Task SendEmailAsync(){    using var client = new SmtpClient("smtp.example.com", 587);    client.Credentials = new NetworkCredential("login", "password");    client.EnableSsl = true;

var message = new MailMessage("from@example.com", "to@example.com") { Subject = "Envio assíncrono", Body = "Este email foi enviado de forma assíncrona." };

await client.SendMailAsync(message); Console.WriteLine("Enviado de forma assíncrona!");}


3. Problemas do SmtpClient e alternativas

Apesar da simplicidade, o SmtpClient possui desvantagens:

  • API obsoleta (no .NET 5+ está marcado como obsoleto);
  • Suporte fraco a protocolos modernos de autenticação (OAuth2);
  • Falta de suporte nativo para S/MIME e cenários avançados.

Por isso, a Microsoft recomenda o uso de bibliotecas de terceiros, como o MailKit.



4. MailKit — biblioteca moderna para trabalhar com email

MailKit é uma biblioteca multiplataforma de código aberto. Ela suporta SMTP, POP3, IMAP, SSL/TLS, assincronismo, OAuth2 e muito mais.



Instalação via NuGet

\

Recommendations