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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user