Envío de Email en C# (.NET): SmtpClient, MailKit y MimeKit
El envío de correo electrónico es una de las tareas básicas en las aplicaciones modernas. En el ecosistema de C# (.NET) existen tanto herramientas integradas (la clase SmtpClient) como potentes bibliotecas de terceros (MailKit y MimeKit). En esta guía analizaremos ambos enfoques en detalle, veremos ejemplos de código, configuración del servidor SMTP, trabajo con adjuntos y correos HTML.
1. SmtpClient integrado (System.Net.Mail)
La clase SmtpClient está disponible en .NET Framework y .NET Core/5+ (con limitaciones). Es fácil de usar, pero no admite protocolos modernos (por ejemplo, OAuth2) y se considera obsoleta para nuevos proyectos.
2. Instalación y conexión de MailKit
MailKit es una biblioteca multiplataforma para trabajar con correo electrónico. Es completamente asíncrona, admite SSL/TLS, OAuth2, S/MIME y otras capacidades modernas. Instalación a través de NuGet:
dotnet add package MailKitdotnet add package MimeKitO mediante la consola del administrador de paquetes:
Install-Package MailKitInstall-Package MimeKit3. Ejemplo de envío de un correo simple usando SmtpClient
Ejemplo básico usando el SmtpClient integrado:
using System.Net;using System.Net.Mail;
public void SendSimpleEmail(){ var fromAddress = new MailAddress("sender@example.com", "Remitente"); var toAddress = new MailAddress("recipient@example.com", "Destinatario"); const string fromPassword = "your_password"; const string subject = "Asunto del correo"; const string body = "Cuerpo del correo";
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 y otros servicios es necesario usar una contraseña de aplicación o OAuth2.
4. Envío de Email con MailKit (método recomendado)
MailKit proporciona una API más flexible y moderna. Ejemplo de envío de un correo de texto simple:
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("Remitente", "sender@example.com")); message.To.Add(new MailboxAddress("Destinatario", "recipient@example.com")); message.Subject = "Asunto del correo"; message.Body = new TextPart("plain") { Text = "Cuerpo del correo" };
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. Envío de correo HTML con adjuntos
Creación de un correo multiparte (HTML + adjuntos) usando MimeKit:
public async Task SendHtmlEmailWithAttachmentAsync(){ var message = new MimeMessage(); message.From.Add(new MailboxAddress("Remitente", "sender@example.com")); message.To.Add(new MailboxAddress("Destinatario", "recipient@example.com")); message.Subject = "Correo HTML con adjunto";
var bodyBuilder = new BodyBuilder { HtmlBody = @"<h1>¡Hola!</h1><p>Este es un correo HTML con adjunto.</p>", TextBody = "Este es un texto También en la biblioteca
ORM para Swift (iOS/macOS): comparación y ejemplos de uso
Cliente Redis (Jedis) para Java: guía completa con ejemplos
Procesamiento y análisis de Markdown en PHP: bibliotecas y herramientas
Envío de correo electrónico en C++: libcurl y clientes SMTP
gRPC para Kotlin: bibliotecas, servidor y cliente — ejemplos de código