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); } }