2757869176
Add contract validation, SMTP delivery results, terminal failure context, neutral development seeding, and local Docker setup. Ref: IT-1033
48 lines
1.5 KiB
C#
48 lines
1.5 KiB
C#
namespace HrynCo.NotificationService.Worker.Services.EmailProcessing;
|
|
|
|
using System.Net;
|
|
using System.Net.Mail;
|
|
using System.Text;
|
|
using HrynCo.NotificationService.DAL.Abstract.Providers;
|
|
|
|
internal sealed class SmtpEmailSender : ISmtpEmailSender
|
|
{
|
|
public async Task SendAsync(
|
|
SmtpChannelSettings settings,
|
|
RenderedEmail email,
|
|
string recipientEmail,
|
|
string recipientName,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
using var client = new SmtpClient(settings.Host, settings.Port)
|
|
{
|
|
EnableSsl = settings.UseSsl,
|
|
Credentials = string.IsNullOrWhiteSpace(settings.Username)
|
|
? null
|
|
: new NetworkCredential(settings.Username, settings.Password)
|
|
};
|
|
|
|
using var mail = new MailMessage
|
|
{
|
|
From = new MailAddress(settings.FromEmail, settings.FromName),
|
|
Subject = email.Subject,
|
|
Body = email.TextBody,
|
|
IsBodyHtml = false,
|
|
BodyEncoding = Encoding.UTF8,
|
|
SubjectEncoding = Encoding.UTF8
|
|
};
|
|
|
|
if (!string.IsNullOrWhiteSpace(email.HtmlBody))
|
|
{
|
|
AlternateView html = AlternateView.CreateAlternateViewFromString(
|
|
email.HtmlBody,
|
|
Encoding.UTF8,
|
|
"text/html");
|
|
mail.AlternateViews.Add(html);
|
|
}
|
|
|
|
mail.To.Add(new MailAddress(recipientEmail, recipientName));
|
|
await client.SendMailAsync(mail, cancellationToken);
|
|
}
|
|
}
|