54 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|
|
} |