Envío de Email en C# (.NET) con 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): 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 MimeKit


O mediante la consola del administrador de paquetes:



Install-Package MailKitInstall-Package MimeKit


3. 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

Recommendations