Refactor SendEmailAsync to use EmailContext object

Simplified the `SendEmailAsync` method in the `IEmailService`
interface to accept a single `EmailContext` object instead of
multiple parameters. Updated the `SendingEmailConsumer` and
`LimilabsEmailService` classes to align with this change.

In `LimilabsEmailService`, refactored email construction logic
to use properties from the `EmailContext` object, including
`Sender`, `Recipients`, `Subject`, `Body`, and `IsHtml`.
Updated `ConnectAndAuthenticateSmtpAsync` to use the `Sender`
property from `EmailContext`.

These changes improve code readability, reduce parameter
complexity, and ensure consistency across the email service
implementation.
This commit is contained in:
2026-08-05 14:14:27 +02:00
parent 3cd8841e80
commit 42b30d4ac4
3 changed files with 10 additions and 19 deletions

View File

@@ -14,5 +14,5 @@ public interface IEmailService
/// Sends an email using the configured SMTP account. /// Sends an email using the configured SMTP account.
/// SMTP credentials are configured in appsettings.json (EmailAccount section). /// SMTP credentials are configured in appsettings.json (EmailAccount section).
/// </summary> /// </summary>
Task SendEmailAsync(EmailAccountDto from, IEnumerable<string> recipients, string subject, string body, bool isHtml = true, CancellationToken cancellationToken = default); Task SendEmailAsync(EmailContext context, CancellationToken cancellationToken = default);
} }

View File

@@ -47,12 +47,7 @@ public sealed class SendingEmailConsumer : IAsyncDisposable
if (oMailEvent is not null) if (oMailEvent is not null)
{ {
// Send email via SMTP (SMTP config is injected in IEmailService via IOptions) // Send email via SMTP (SMTP config is injected in IEmailService via IOptions)
await EmailService.SendEmailAsync( await EmailService.SendEmailAsync(oMailEvent.Mail);
oMailEvent.Mail.Sender,
oMailEvent.Mail.Recipients,
oMailEvent.Mail.Subject,
oMailEvent.Mail.Body,
isHtml: oMailEvent.Mail.IsHtml);
// Acknowledge message after successful processing // Acknowledge message after successful processing
await channel.BasicAckAsync(args.DeliveryTag, false, args.CancellationToken); await channel.BasicAckAsync(args.DeliveryTag, false, args.CancellationToken);

View File

@@ -25,30 +25,26 @@ public class LimilabsEmailService(
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
} }
public async Task SendEmailAsync(EmailAccountDto from, IEnumerable<string> recipients, string subject, string body, bool isHtml = true, CancellationToken cancellationToken = default) public async Task SendEmailAsync(EmailContext context, CancellationToken cancellationToken = default)
{ {
using var smtp = new Smtp(); using var smtp = new Smtp();
try try
{ {
await ConnectAndAuthenticateSmtpAsync(smtp, from); await ConnectAndAuthenticateSmtpAsync(smtp, context.Sender);
var builder = new MailBuilder(); var builder = new MailBuilder();
builder.From.Add(new MailBox(from.Username)); builder.From.Add(new MailBox(context.Sender.Username));
foreach (var recipient in recipients) foreach (var recipient in context.Recipients)
builder.To.Add(new MailBox(recipient)); builder.To.Add(new MailBox(recipient));
builder.Subject = subject; builder.Subject = context.Subject;
if (isHtml) if (context.IsHtml)
{ builder.Html = context.Body;
builder.Html = body;
}
else else
{ builder.Text = context.Body;
builder.Text = body;
}
var mail = builder.Create(); var mail = builder.Create();