Nosabit.Adapters.Persistence.Mail 1.2.6

dotnet add package Nosabit.Adapters.Persistence.Mail --version 1.2.6
                    
NuGet\Install-Package Nosabit.Adapters.Persistence.Mail -Version 1.2.6
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Nosabit.Adapters.Persistence.Mail" Version="1.2.6" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Nosabit.Adapters.Persistence.Mail" Version="1.2.6" />
                    
Directory.Packages.props
<PackageReference Include="Nosabit.Adapters.Persistence.Mail" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Nosabit.Adapters.Persistence.Mail --version 1.2.6
                    
#r "nuget: Nosabit.Adapters.Persistence.Mail, 1.2.6"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=Nosabit.Adapters.Persistence.Mail&version=1.2.6
                    
Install Nosabit.Adapters.Persistence.Mail as a Cake Addin
#tool nuget:?package=Nosabit.Adapters.Persistence.Mail&version=1.2.6
                    
Install Nosabit.Adapters.Persistence.Mail as a Cake Tool

Nosabit.Adapters.Persistence.Mail

Implementación de servicios de correo electrónico para aplicaciones .NET basada en las abstracciones de Nosabit.Adapters.Persistence.Mail.Abstractions. Proporciona un servicio completo para enviar correos con múltiples configuraciones SMTP, soporte para destinatarios múltiples, copias, copias ocultas, adjuntos y contenido HTML.

NuGet License: MIT

Instalación

Package Manager

Install-Package Nosabit.Adapters.Persistence.Mail

.NET CLI

dotnet add package Nosabit.Adapters.Persistence.Mail

Características principales

  • Implementación completa de IMailSender: Proporciona una implementación robusta de las abstracciones definidas en el paquete Nosabit.Adapters.Persistence.Mail.Abstractions
  • Configuración múltiple: Permite definir y utilizar múltiples configuraciones de correo electrónico
  • Fácil integración con ASP.NET Core: Incluye extensiones para agregar el servicio directamente en el contenedor de dependencias
  • Manejo de errores mejorado: Implementa manejo de excepciones para proporcionar mensajes de error claros
  • Codificación UTF-8: Admite caracteres internacionales en asunto y cuerpo del correo
  • Soporte para HTML: Envía correos con formato HTML
  • Gestión completa de destinatarios: Soporte para destinatarios principales, copias (CC) y copias ocultas (BCC)

Uso rápido

1. Configuración en appsettings.json

{
  "CorreoConfiguration": {
    "Main": {
      "Email": "usuario@tudominio.com",
      "Password": "tu-contraseña",
      "EmailFake": "no-reply@tudominio.com",
      "EmailName": "Tu Nombre de Empresa",
      "SmtpServer": "smtp.tudominio.com",
      "SmtpPort": 587,
      "SmtpTargetName": "STARTTLS/smtp.tudominio.com"
    },
    "Support": {
      "Email": "soporte@tudominio.com",
      "Password": "otra-contraseña",
      "EmailFake": "soporte@tudominio.com",
      "EmailName": "Soporte Técnico",
      "SmtpServer": "smtp.tudominio.com",
      "SmtpPort": 587,
      "SmtpTargetName": "STARTTLS/smtp.tudominio.com"
    }
  }
}

2. Registro del servicio

Una forma sencilla de agregar el servicio es usando la extensión proporcionada:

// En Program.cs
var builder = WebApplication.CreateBuilder(args);

// Agregar el servicio de correo con la configuración predeterminada
builder.AddMailSender();

// O especificando la ruta de configuración y clave predeterminada
builder.AddMailSender("MiConfiguracionDeCorreo", "ConfigPrincipal");

var app = builder.Build();
// Resto de la configuración...

También puedes registrar el servicio manualmente:

// Configurar las opciones de correo
builder.Services.AddOptions<Dictionary<string, AppConfigCorreoConfiguration>>().BindConfiguration("CorreoConfiguration");

// Registrar el servicio
builder.Services.AddSingleton<IMailSender>(sp => {
    var config = sp.GetRequiredService<IOptions<Dictionary<string, AppConfigCorreoConfiguration>>>();
    return new MailSender(config.Value, "Main");
});

3. Uso del servicio

public class NotificationService
{
    private readonly IMailSender _mailSender;
    
    public NotificationService(IMailSender mailSender)
    {
        _mailSender = mailSender;
    }
    
    public bool SendWelcomeEmail(string userEmail, string userName)
    {
        string subject = "¡Bienvenido a nuestra plataforma!";
        string body = $@"
            <html>
            <body>
                <h2>Bienvenido, {userName}</h2>
                <p>Gracias por registrarte en nuestra plataforma.</p>
                <p>¡Esperamos que disfrutes de nuestros servicios!</p>
            </body>
            </html>";
            
        return _mailSender.Enviar(subject, body, userEmail);
    }
    
    public bool SendNotificationToMultipleUsers(List<string> emails, string notification)
    {
        var recipients = emails.Select(email => new MailAddress(email)).ToArray();
        
        return _mailSender.Enviar(
            "Notificación importante",
            $"<p>{notification}</p>",
            recipients,
            UseMail: EmailType.Support
        );
    }
    
    public bool SendConfidentialReport(string mainRecipient, string[] hiddenRecipients)
    {
        var bcc = hiddenRecipients.Select(email => new MailAddress(email)).ToArray();
        
        return _mailSender.Enviar(
            "Informe confidencial",
            "<p>Adjunto encontrará el informe confidencial solicitado.</p>",
            mainRecipient,
            BccEmail: bcc
        );
    }
}

Implementación de IMailSender

El paquete proporciona la clase MailSender que implementa la interfaz IMailSender definida en el paquete de abstracciones.

Constructor

public MailSender(Dictionary<string, AppConfigCorreoConfiguration> ConfigCorreos, string DefaultKey = "Main")
  • ConfigCorreos: Diccionario que contiene las diferentes configuraciones de correo electrónico.
  • DefaultKey: Clave predeterminada para usar cuando no se especifica una configuración. Por defecto, "Main".

Métodos implementados

  • CreateMailMessage: Crea un mensaje de correo utilizando la configuración especificada.
  • CreateClientCorreo: Crea un cliente SMTP configurado según los parámetros especificados.
  • Enviar (sobrecarga 1): Envía un correo a un único destinatario especificado como string.
  • Enviar (sobrecarga 2): Envía un correo a múltiples destinatarios especificados como un array de MailAddress.

Clase de configuración

La biblioteca utiliza la siguiente clase para configurar las opciones de correo electrónico:

public class AppConfigCorreoConfiguration
{
    public string? Email { get; set; }          // Correo de autenticación con el servidor SMTP
    public string? Password { get; set; }       // Contraseña para autenticación
    public string? EmailFake { get; set; }      // Correo que aparecerá como remitente
    public string? EmailName { get; set; }      // Nombre que aparecerá como remitente
    public string? SmtpServer { get; set; }     // Servidor SMTP
    public int? SmtpPort { get; set; }          // Puerto del servidor SMTP
    public string? SmtpTargetName { get; set; } // Nombre de destino para la autenticación SMTP
}

Extensiones para ASP.NET Core

La biblioteca incluye la clase MailDependecyInjection que proporciona métodos de extensión para facilitar la integración con aplicaciones ASP.NET Core:

public static WebApplicationBuilder AddMailSender(
    this WebApplicationBuilder builder,
    string configSectionPath = "CorreoConfiguration", 
    string DefaultKey = "Main"
)

Este método:

  1. Registra la configuración desde appsettings.json
  2. Configura el servicio IMailSender en el contenedor de dependencias
  3. Devuelve el builder para permitir la encadenación de métodos

Dependencias

  • Nosabit.Core: Proporciona extensiones y utilidades comunes
  • Nosabit.Adapters.Persistence.Mail.Abstractions: Define las interfaces que implementa este paquete

Requisitos

  • .NET 6.0 o superior
  • ASP.NET Core 6.0 o superior (para las extensiones de inyección de dependencias)

Notas de implementación

  • La clase MailSender utiliza la codificación UTF-8 para el asunto y cuerpo del correo
  • Los correos se configuran por defecto para utilizar HTML
  • Se lanza una excepción de tipo ArgumentException si se intenta utilizar una configuración que no existe
  • Se utiliza un tiempo de espera (timeout) de 30 segundos para las operaciones SMTP
  • Se maneja automáticamente la liberación de recursos del cliente SMTP mediante bloques using

Ejemplos avanzados

Utilizando múltiples configuraciones de correo

public enum EmailType
{
    Main,
    Support,
    Marketing
}

public class EmailOrchestrator
{
    private readonly IMailSender _mailSender;
    
    public EmailOrchestrator(IMailSender mailSender)
    {
        _mailSender = mailSender;
    }
    
    public void SendAppropriateEmail(string email, string message, EmailCategory category)
    {
        switch(category)
        {
            case EmailCategory.TechnicalSupport:
                _mailSender.Enviar(
                    "Soporte Técnico", 
                    message, 
                    email, 
                    UseMail: EmailType.Support
                );
                break;
                
            case EmailCategory.SpecialOffer:
                _mailSender.Enviar(
                    "Oferta Especial", 
                    message, 
                    email, 
                    UseMail: EmailType.Marketing
                );
                break;
                
            default:
                _mailSender.Enviar(
                    "Información General", 
                    message, 
                    email, 
                    UseMail: EmailType.Main
                );
                break;
        }
    }
}

Enviando correos con adjuntos

public bool SendReportWithAttachment(string email, byte[] pdfContent, byte[] excelContent)
{
    var attachments = new List<Attachment>();
    
    // Agregar PDF
    using (var pdfStream = new MemoryStream(pdfContent))
    {
        attachments.Add(new Attachment(pdfStream, "informe.pdf", "application/pdf"));
        
        // Agregar Excel
        using (var excelStream = new MemoryStream(excelContent))
        {
            attachments.Add(new Attachment(excelStream, "datos.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
            
            return _mailSender.Enviar(
                "Informe mensual con datos",
                "<p>Adjunto encontrará el informe en formato PDF y los datos en Excel.</p>",
                email,
                attachments: attachments
            );
        }
    }
}

Soporte

Para más información sobre este paquete, visite el repositorio en GitHub.

Licencia

Este proyecto está licenciado bajo la licencia MIT - vea el archivo LICENSE para más detalles.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.2.6 32 4/1/2025
1.2.5 38 4/1/2025
1.2.4 457 3/25/2025
1.2.3 440 3/24/2025
1.2.2 130 3/23/2025
1.2.1 129 3/23/2025
1.2.0 131 3/23/2025
1.0.2 98 3/21/2025
1.0.1 98 3/21/2025
1.0.0 108 3/21/2025