using FrameworkDAL.DTO.MessageHub.MessageHubGenerator; using GB5Shared.DTO.Framework.Login; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using System; using System.Net; using System.Net.Mail; using System.Threading; using System.Threading.Tasks; namespace FrameworkBLL.MessageHub.MessageHubPlatforms { public class EmailPlatform : IMessageHubPlatform.IEmailPlatform { private readonly ILogger _logger; private readonly EmailSettings _settings; public EmailPlatform( ILogger logger, IOptions settings) { _logger = logger; _settings = settings.Value; } public async Task SendEmailConversation( MessageHubDTO dto, LoginDTO loginContext, CancellationToken ct) { if (ct.IsCancellationRequested) throw new OperationCanceledException(); try { using var smtpClient = new SmtpClient(_settings.Host, _settings.Port) { Credentials = new NetworkCredential(_settings.Username, _settings.Password), EnableSsl = _settings.EnableSSL }; using var mailMessage = new MailMessage { From = new MailAddress(_settings.FromEmail, _settings.FromName), Subject = dto.Subject ?? "Notification", Body = dto.MessageText, IsBodyHtml = true }; mailMessage.To.Add(dto.Recipient); await smtpClient.SendMailAsync(mailMessage, ct); _logger.LogInformation( "Email sent successfully | To={Recipient} | User={UserId}", dto.Recipient, loginContext?.UserId); } catch (Exception ex) { _logger.LogError(ex, "Email sending failed | To={Recipient}", dto.Recipient); throw; } } } #region Settings Class public class EmailSettings { public string Host { get; set; } public int Port { get; set; } public string Username { get; set; } public string Password { get; set; } public bool EnableSSL { get; set; } public string FromEmail { get; set; } public string FromName { get; set; } } #endregion }