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"
#:package 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
IMailSenderen 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
MailSenderutiliza 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
ArgumentExceptionsi 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. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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.