feat: consume transactional email notifications
Add contract validation, SMTP delivery results, terminal failure context, neutral development seeding, and local Docker setup. Ref: IT-1033
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user