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 MimeKitOu pelo console do gerenciador de pacotes:
Install-Package MailKitInstall-Package MimeKit3. 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 Também na biblioteca
Kysely para TypeScript: guia completo com exemplos práticos
Tokens JWT em Rust: biblioteca jsonwebtoken e trabalho com autenticação
tsyringe para TypeScript: guia completo com exemplos práticos
Validação de dados em Rust: biblioteca validator