Envío de email en C# (.NET) usando SmtpClient y MailKit

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de email en C# (.NET): desde SmtpClient hasta MailKit

El envío de correos electrónicos es una de las tareas clave en el desarrollo de aplicaciones web, servicios de notificaciones y sistemas corporativos. En el ecosistema .NET existen tanto herramientas integradas como bibliotecas de terceros que simplifican el trabajo con SMTP, SSL/TLS y escenarios complejos. En este artículo analizaremos en detalle cómo enviar un email en C#, utilizando el clásico SmtpClient y la biblioteca moderna MailKit.



1. SmtpClient integrado (System.Net.Mail)

La clase SmtpClient está disponible en .NET Framework y .NET Core/5+ (con algunas limitaciones). Permite configurar rápidamente el envío de correos a través de cualquier servidor SMTP.



Ejemplo básico de envío 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 = "Correo de prueba desde C#", Body = "¡Hola! Este mensaje fue enviado a través de SmtpClient.", IsBodyHtml = false};

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

try{ smtpClient.Send(mailMessage); Console.WriteLine("¡Correo enviado exitosamente!");}catch (Exception ex){ Console.WriteLine($"Error al enviar: {ex.Message}");}

Importante: Para Gmail se requiere una contraseña de aplicación, no la contraseña normal. Para otros servicios (Yandex, Mail.ru) verifique la configuración SMTP.



Envío de correo HTML con archivo adjunto

var message = new MailMessage();message.From = new MailAddress("sender@example.com");message.To.Add("user@example.com");message.Subject = "Informe mensual";message.IsBodyHtml = true;message.Body = "<h2>Informe mensual</h2><p>Se adjunta archivo PDF.</p>";

// Agregar archivo adjuntovar 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);}

Los archivos adjuntos pueden ser de cualquier tipo: imágenes, documentos, archivos comprimidos. Para enviar desde memoria use MemoryStream.



2. Envío asíncrono

En aplicaciones modernas es recomendable no bloquear el hilo. 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 = "Envío asíncrono", Body = "Este correo fue enviado de forma asíncrona." };

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


3. Problemas de SmtpClient y alternativas

A pesar de su simplicidad, SmtpClient tiene desventajas:

  • API obsoleta (en .NET 5+ está marcado como obsoleto);
  • Mala compatibilidad con protocolos de autenticación modernos (OAuth2);
  • Falta de soporte integrado para S/MIME y escenarios avanzados.

Por ello, Microsoft recomienda usar bibliotecas de terceros como MailKit.



4. MailKit — biblioteca moderna para trabajar con email

MailKit es una biblioteca multiplataforma de código abierto. Soporta SMTP, POP3, IMAP, SSL/TLS, asincronía, OAuth2 y mucho más.



Instalación mediante NuGet

\

Recommendations