initial commit
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user