using System.Text; using ExpenseTracker.Application.Common.Interfaces.Services; using MailKit.Net.Smtp; using MailKit.Security; using Microsoft.Extensions.Configuration; using MimeKit; namespace ExpenseTracker.Infrastructure.Email; public class EmailSenderService : IEmailSenderService { private readonly IConfiguration _configuration; public EmailSenderService(IConfiguration configuration) { _configuration = configuration; } public async Task SendAsync( ICollection recipientAddresses, string subject, string message, CancellationToken cancellationToken) { var smtpClientHost = _configuration.GetSection("Email").GetValue("Host"); var smtpClientPort = _configuration.GetSection("Email").GetValue("Port"); var smtpClientUsername = _configuration.GetSection("Email").GetValue("Username"); var smtpClientPassword = _configuration.GetSection("Email").GetValue("Password"); var fromAddres = _configuration.GetSection("Email").GetValue("SenderAddress");; var fromName = _configuration.GetSection("Email").GetValue("SenderName");; var subj = subject; var body = message; var msg = new MimeMessage(); msg.From.Add(new MailboxAddress(fromName, fromAddres)); foreach (var address in recipientAddresses) { msg.To.Add(new MailboxAddress("", address)); } msg.Subject = subj; msg.Body = new TextPart("plain") { Text = body }; using (var client = new SmtpClient()) { await client.ConnectAsync(smtpClientHost, smtpClientPort, SecureSocketOptions.SslOnConnect, cancellationToken); await client.AuthenticateAsync(smtpClientUsername, smtpClientPassword, cancellationToken); await client.SendAsync(msg, cancellationToken); await client.DisconnectAsync(true, cancellationToken); } } }