namespace GestionIntegral.Api.Services.Comunicaciones { public interface IEmailService { /// /// Envía un correo electrónico a un único destinatario, con la posibilidad de adjuntar un archivo. /// Este método también registra automáticamente el resultado del envío en la base de datos. /// /// La dirección de correo del destinatario. /// El nombre del destinatario. /// El asunto del correo. /// El contenido del correo en formato HTML. /// Los bytes del archivo a adjuntar (opcional). /// El nombre del archivo adjunto (requerido si se provee attachment). /// Identificador del proceso que dispara el email (ej. "EnvioManualPDF"). Para logging. /// ID de la entidad relacionada (ej. "Factura-59"). Para logging. /// ID del usuario que inició la acción (si aplica). Para logging. /// ID del lote de envío masivo al que pertenece este correo (si aplica). Para logging. Task EnviarEmailAsync( string destinatarioEmail, string destinatarioNombre, string asunto, string cuerpoHtml, byte[]? attachment = null, string? attachmentName = null, string? origen = null, string? referenciaId = null, int? idUsuarioDisparo = null, int? idLoteDeEnvio = null); /// /// Envía un correo electrónico a un único destinatario, con la posibilidad de adjuntar múltiples archivos. /// Este método también registra automáticamente el resultado del envío en la base de datos. /// /// La dirección de correo del destinatario. /// El nombre del destinatario. /// El asunto del correo. /// El contenido del correo en formato HTML. /// Una lista de tuplas que contienen los bytes y el nombre de cada archivo a adjuntar. /// Identificador del proceso que dispara el email (ej. "FacturacionMensual"). Para logging. /// ID de la entidad relacionada (ej. "Suscriptor-3"). Para logging. /// ID del usuario que inició la acción (si aplica). Para logging. /// ID del lote de envío masivo al que pertenece este correo (si aplica). Para logging. Task EnviarEmailConsolidadoAsync( string destinatarioEmail, string destinatarioNombre, string asunto, string cuerpoHtml, List<(byte[] content, string name)> adjuntos, string? origen = null, string? referenciaId = null, int? idUsuarioDisparo = null, int? idLoteDeEnvio = null); } }