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
<PackageReference Include="Nosabit.Adapters.Persistence.Mail" Version="1.2.6" />
<PackageVersion Include="Nosabit.Adapters.Persistence.Mail" Version="1.2.6" />
<PackageReference Include="Nosabit.Adapters.Persistence.Mail" />
paket add Nosabit.Adapters.Persistence.Mail --version 1.2.6
#r "nuget: Nosabit.Adapters.Persistence.Mail, 1.2.6"
#addin nuget:?package=Nosabit.Adapters.Persistence.Mail&version=1.2.6
#tool nuget:?package=Nosabit.Adapters.Persistence.Mail&version=1.2.6
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.
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:
- Registra la configuración desde appsettings.json
- Configura el servicio
IMailSender
en el contenedor de dependencias - 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 | Versions 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. |
-
net9.0
- Nosabit.Adapters.Persistence.Mail.Abstractions (>= 1.2.4)
- Nosabit.Core (>= 1.2.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.