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.
/// SMTP credentials are configured in appsettings.json (EmailAccount section).
/// </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)
{
// Send email via SMTP (SMTP config is injected in IEmailService via IOptions)
await EmailService.SendEmailAsync(
oMailEvent.Mail.Sender,
oMailEvent.Mail.Recipients,
oMailEvent.Mail.Subject,
oMailEvent.Mail.Body,
isHtml: oMailEvent.Mail.IsHtml);
await EmailService.SendEmailAsync(oMailEvent.Mail);
// Acknowledge message after successful processing
await channel.BasicAckAsync(args.DeliveryTag, false, args.CancellationToken);

View File

@@ -25,30 +25,26 @@ public class LimilabsEmailService(
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();
try
{
await ConnectAndAuthenticateSmtpAsync(smtp, from);
await ConnectAndAuthenticateSmtpAsync(smtp, context.Sender);
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.Subject = subject;
builder.Subject = context.Subject;
if (isHtml)
{
builder.Html = body;
}
if (context.IsHtml)
builder.Html = context.Body;
else
{
builder.Text = body;
}
builder.Text = context.Body;
var mail = builder.Create();