Files
2026-07-21 14:28:43 +07:00

54 lines
1.5 KiB
C#

using MailKit.Net.Smtp;
using MailKit.Security;
using Microsoft.Extensions.Options;
using MimeKit;
namespace Indotalent.Infrastructure.Email.Smtp;
public class SmtpEmailSender : IEmailSender
{
private readonly SmtpSettingsModel _settings;
public SmtpEmailSender(IOptions<EmailSettingsModel> emailOptions)
{
_settings = emailOptions.Value.Smtp;
}
public async Task SendEmailAsync(string email, string subject, string htmlMessage)
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress(_settings.FromName, _settings.FromAddress));
message.To.Add(MailboxAddress.Parse(email));
message.Subject = subject;
var bodyBuilder = new BodyBuilder
{
HtmlBody = htmlMessage
};
message.Body = bodyBuilder.ToMessageBody();
using var client = new SmtpClient();
try
{
await client.ConnectAsync(_settings.Host, _settings.Port, SecureSocketOptions.Auto);
if (!string.IsNullOrEmpty(_settings.UserName))
{
await client.AuthenticateAsync(_settings.UserName, _settings.Password);
}
await client.SendAsync(message);
}
catch (Exception ex)
{
throw new Exception($"Failed to send email via SMTP to {email} via {_settings.Host}. Error: {ex.Message}", ex);
}
finally
{
await client.DisconnectAsync(true);
}
}
}