Envio de Email em C# (.NET) com 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): SmtpClient, MailKit e MimeKit



O envio de e-mail é uma das tarefas básicas em aplicações modernas. No ecossistema C# (.NET), existem tanto recursos integrados (classe SmtpClient) quanto bibliotecas de terceiros poderosas (MailKit e MimeKit). Neste guia, abordaremos detalhadamente ambas as abordagens, veremos exemplos de código, configuração do servidor SMTP, trabalho com anexos e e-mails HTML.



1. SmtpClient Integrado (System.Net.Mail)



A classe SmtpClient está disponível no .NET Framework e .NET Core/5+ (com limitações). É simples de usar, mas não suporta protocolos modernos (como OAuth2) e é considerada obsoleta para novos projetos.



2. Instalação e Conexão do MailKit



MailKit é uma biblioteca multiplataforma para trabalhar com e-mail. Ela é totalmente assíncrona, suporta SSL/TLS, OAuth2, S/MIME e outros recursos modernos. Instalação via NuGet:



dotnet add package MailKitdotnet add package MimeKit


Ou pelo console do gerenciador de pacotes:



Install-Package MailKitInstall-Package MimeKit


3. Exemplo de envio de e-mail simples usando SmtpClient



Exemplo básico usando o SmtpClient integrado:



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

public void SendSimpleEmail(){ var fromAddress = new MailAddress("sender@example.com", "Remetente"); var toAddress = new MailAddress("recipient@example.com", "Destinatário"); const string fromPassword = "your_password"; const string subject = "Assunto do e-mail"; const string body = "Corpo do e-mail";

var smtp = new SmtpClient { Host = "smtp.example.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); }}


Importante: Para Gmail, Yandex e outros serviços, é necessário usar senha de aplicativo ou OAuth2.



4. Envio de Email com MailKit (método recomendado)



O MailKit oferece uma API mais flexível e moderna. Exemplo de envio de e-mail de texto simples:



using MailKit.Net.Smtp;using MailKit.Security;using MimeKit;using System.Threading.Tasks;

public async Task SendEmailWithMailKitAsync(){ var message = new MimeMessage(); message.From.Add(new MailboxAddress("Remetente", "sender@example.com")); message.To.Add(new MailboxAddress("Destinatário", "recipient@example.com")); message.Subject = "Assunto do e-mail"; message.Body = new TextPart("plain") { Text = "Corpo do e-mail" };

using (var client = new SmtpClient()) { await client.ConnectAsync("smtp.example.com", 587, SecureSocketOptions.StartTls); await client.AuthenticateAsync("sender@example.com", "your_password"); await client.SendAsync(message); await client.DisconnectAsync(true); }}


5. Envio de e-mail HTML com anexos



Criação de e-mail multipartes (HTML + anexos) usando MimeKit:



public async Task SendHtmlEmailWithAttachmentAsync(){    var message = new MimeMessage();    message.From.Add(new MailboxAddress("Remetente", "sender@example.com"));    message.To.Add(new MailboxAddress("Destinatário", "recipient@example.com"));    message.Subject = "E-mail HTML com anexo";

var bodyBuilder = new BodyBuilder { HtmlBody = @"<h1>Olá!</h1><p>Este é um e-mail HTML com anexo.</p>", TextBody = "Este é um texto

Recommendations