Saltar al pie de página
Iron Academy Logo
Aprender C#
Aprender C#

Otras categorías

Envío de correo electrónico en C# con FluentEmail

Tim Corey
30m 36s

El envío de correos electrónicos transaccionales en C# es una necesidad común en muchas soluciones de software empresarial. Sin embargo, como explica Tim Corey en su vídeo "Enviar correo electrónico en C# con FluentEmail", este proceso no tiene por qué ser difícil. Ya sea que desee enviar mensajes de texto simples, correos electrónicos HTML o manejar correos electrónicos masivos, FluentEmail ofrece una forma fácil de implementar funcionalidad de envío de correos electrónicos utilizando métodos modernos y protocolos SMTP.

En este artículo, recorreremos el proceso siguiendo el vídeo de Tim Corey, para aprender completamente cómo enviar correos electrónicos en C# utilizando FluentEmail, configurar un servidor SMTP, crear mensajes de correo electrónico HTML dinámicos y probar eficazmente todo el proceso de envío de correos electrónicos.

Introducción a FluentEmail

Tim comienza explicando los antecedentes: el envío de correos electrónicos en C# solía depender de herramientas antiguas como System.Net.Mail, pero con .NET 5 y versiones posteriores, gran parte de ellas han quedado obsoletas. Aquí es donde FluentEmail, una moderna biblioteca de correo electrónico, viene a llenar el vacío tanto para mensajes sencillos como para comunicaciones más sofisticadas, como correos electrónicos HTML e imágenes en línea.

Tim señala que el objetivo es crear fácilmente correos electrónicos, utilizar plantillas e incluso probarlos sin conectarse a servidores de producción.

Configuración de la aplicación de consola

En el minuto 1:04, Tim crea una nueva aplicación de consola llamada EmailDemoApp. Destaca la simplicidad de empezar con static void Main(string[] args) o simplemente public static void Main cuando no necesitas una interfaz de usuario. El punto de partida limpio permite centrarse únicamente en el proceso de envío de correos electrónicos.

Send Emails In Csharp Using Fluentemail 1 related to Configuración de la aplicación de consola

Después de crear la aplicación, Tim ajusta el proyecto a .NET 5, una actualización moderna del tradicional .NET Framework, que garantiza una mejor compatibilidad con los protocolos modernos para clientes de correo electrónico.

Instalación de FluentEmail a través de la consola del administrador de paquetes

A continuación, a las 3:50, Tim utiliza la Consola del Administrador de Paquetes para instalar el paquete FluentEmail.Smtp, habilitando el uso de un cliente SMTP para enviar correos electrónicos en C#. Además, Tim menciona que existen integraciones adicionales como MailGun y SendGrid, pero SMTP es la opción más universal, ya que funciona en la mayoría de clientes y configuraciones de correo electrónico.

Send Emails In Csharp Using Fluentemail 2 related to Instalación de FluentEmail a través de la consola del administrad...

Puede instalarlo manualmente con el siguiente comando:

Install-Package FluentEmail.Smtp
Install-Package FluentEmail.Smtp
SHELL

Tim se asegura de que añadamos también la dependencia FluentEmail.Core, necesaria para que la biblioteca funcione.

Configuración del cliente y el servidor SMTP

Para las 6:10, Tim discute la configuración del cliente SMTP usando una nueva configuración de SmtpClient:

var sender = new SmtpSender(() => new SmtpClient("localhost")
{
    EnableSsl = false,
    DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
    PickupDirectoryLocation = @"C:\Demos"
});
var sender = new SmtpSender(() => new SmtpClient("localhost")
{
    EnableSsl = false,
    DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
    PickupDirectoryLocation = @"C:\Demos"
});

Tim enfatiza que este servidor SMTP localhost es para pruebas locales. En producción, se conectaría a sus detalles reales del servidor SMTP como el endpoint SMTP de Gmail, posiblemente utilizando una contraseña de aplicación para mayor seguridad.

Destaca que los ajustes sensibles deben trasladarse a un archivo de configuración como appsettings.json para mayor seguridad y flexibilidad.

Enviar un mensaje de correo electrónico sencillo

A las 11:59, Tim pasa a enviar un mensaje sencillo utilizando la API de correo electrónico de FluentEmail. Explica que un objeto de correo electrónico var se crea con el siguiente ejemplo de código:

var email = await Email
    .From("tim@timco.com")
    .To("test@test.com", "Sue")
    .Subject("Thanks")
    .Body("Thanks for buying our product.")
    .SendAsync();
var email = await Email
    .From("tim@timco.com")
    .To("test@test.com", "Sue")
    .Subject("Thanks")
    .Body("Thanks for buying our product.")
    .SendAsync();

De este modo, se especifica claramente la cadena asunto, la cadena correo electrónico y el cuerpo del mensaje mediante el encadenamiento de métodos. El mensaje var (correo electrónico) contiene el resultado, lo que permite comprobar errores.

Tim señala que, aunque el correo electrónico parece ser de tim@timco.com, el servidor SMTP aún lo autenticará basado en las credenciales de inicio de sesión (como una contraseña de aplicación de Gmail).

Visualización del correo electrónico mediante el directorio local

Una vez enviado el mensaje de correo electrónico, Tim muestra cómo aparece en forma de archivo .eml en la carpeta local. Aunque se puede abrir con Outlook o el Bloc de notas, para los mensajes de correo electrónico existentes o las pruebas masivas, no es lo más fácil de usar.

Send Emails In Csharp Using Fluentemail 3 related to Visualización del correo electrónico mediante el directorio local

Uso de Papercut SMTP para facilitar las pruebas

En el minuto 17:03, Tim pasa de guardar en un directorio a utilizar Papercut SMTP, un falso servidor SMTP ligero.

Él modifica las configuraciones del cliente SMTP a:

DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;
DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;

Con Papercut, cada correo electrónico de prueba se muestra inmediatamente en una interfaz gráfica de usuario. Esto facilita la comprobación del contenido del cuerpo de los mensajes en texto plano y HTML y simula la forma en que los clientes de correo electrónico reales procesan los distintos formatos.

Send Emails In Csharp Using Fluentemail 4 related to Uso de Papercut SMTP para facilitar las pruebas

Creación de un correo electrónico HTML con plantillas Razor

En el minuto 19:12, Tim señala que el texto plano estático no es suficiente para muchos casos del mundo real. Para mensajes HTML más dinámicos y ricos, instala el paquete FluentEmail.Razor:

Install-Package FluentEmail.Razor
Install-Package FluentEmail.Razor
SHELL

Actualiza la configuración del proyecto con:

<PreserveCompilationContext>true</PreserveCompilationContext>
<PreserveCompilationContext>true</PreserveCompilationContext>

para garantizar que las plantillas Razor se compilan correctamente.

Creación y uso de una plantilla de correo electrónico Razor

Utilizando un constructor de cadenas (var builder) y la sintaxis de Razor, Tim crea una plantilla de correo electrónico dinámica:

var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");
var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");

A continuación, adjunta esta plantilla a la solicitud var utilizando el siguiente código:

await Email
    .UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
    .SendAsync();
await Email
    .UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
    .SendAsync();

Esta técnica admite diferentes formatos como texto simple y cuerpo HTML, dependiendo del contenido de la plantilla.

Manejo de múltiples destinatarios y archivos adjuntos

Aunque no está totalmente detallado en la demostración de Tim, FluentEmail admite fácilmente múltiples destinatarios a través de llamadas .To() y añadir un objeto de adjunto para archivos adjuntos, similar a cómo funcionaba el objeto MailMessage o la clase MailMessage en .NET más antiguos.

Puede crear archivos adjuntos utilizando una nueva cadena de ruta de archivo o id de contenido para imágenes en línea.

Manejo de excepciones en el proceso de envío de correo electrónico

Tim insiste en que hay que gestionar los errores con elegancia. Por ejemplo:

try
{
    var result = await Email.SendAsync();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
try
{
    var result = await Email.SendAsync();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

Esto captura cualquier falla relacionada con SMTP o la red durante el proceso de envío de correos electrónicos, particularmente si surgen problemas con el protocolo SMTP.

Resumen y reflexiones finales

Alrededor de las 27:56, Tim concluye que con FluentEmail, enviar correos electrónicos en C# se vuelve sencillo, desde enviar mensajes simples al estilo hola mundo hasta correos electrónicos HTML dinámicos y profesionales.

Él también enfatiza la importancia de mantener los detalles de su servidor SMTP y configuraciones flexibles utilizando un archivo de configuración como appsettings.json, especialmente al moverse entre el desarrollo local y plataformas en la nube como Azure Portal.

Tanto si su objetivo es enviar correos de forma individual como masiva, FluentEmail combinado con Papercut SMTP ofrece un flujo de trabajo moderno y eficiente compatible con muchos lenguajes y ecosistemas de programación.

Pensamientos finales

Gracias al excelente video de Tim Corey, es claro que la funcionalidad moderna de envío de correos electrónicos en C# ha evolucionado más allá de la clase SmtpClient básica y el manejo de la clase MailMessage. Con la ayuda de FluentEmail, los desarrolladores pueden crear rápidamente un nuevo proyecto, configurar una conexión SMTP, crear un cuerpo de correo electrónico dinámico y probarlo todo localmente antes de desplegarlo en producción.

Hero Worlddot related to Envío de correo electrónico en C# con FluentEmail
Hero Affiliate related to Envío de correo electrónico en C# con FluentEmail

Gana más compartiendo lo que te gusta

¿Creas contenidos para desarrolladores que trabajan con .NET, C#, Java, Python o Node.js? ¡Convierte tu experiencia en un ingreso extra!

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame