38 lines
1.1 KiB
C#
38 lines
1.1 KiB
C#
using Socialize.Infrastructure.Emailer.Configuration;
|
|
using Socialize.Infrastructure.Emailer.Contracts;
|
|
using Microsoft.Extensions.Options;
|
|
using PostmarkDotNet;
|
|
|
|
namespace Socialize.Infrastructure.Emailer.Services;
|
|
|
|
public class PostmarkEmailSender : IEmailSender
|
|
{
|
|
private readonly PostmarkClient _client;
|
|
private readonly EmailerOptions _options;
|
|
|
|
public PostmarkEmailSender(IOptions<EmailerOptions> options)
|
|
{
|
|
_options = options.Value;
|
|
_client = new PostmarkClient(_options.ApiKey);
|
|
}
|
|
|
|
public async Task SendEmailAsync(string email, string subject, string message)
|
|
{
|
|
PostmarkResponse? sendResult = await _client.SendMessageAsync(new PostmarkMessage
|
|
{
|
|
From = _options.FromEmail,
|
|
To = email,
|
|
Subject = subject,
|
|
HtmlBody = message,
|
|
TrackOpens = true,
|
|
MessageStream = "outbound" // Optional: use "broadcast" for bulk
|
|
});
|
|
|
|
if (sendResult.Status != PostmarkStatus.Success)
|
|
{
|
|
throw new InvalidOperationException(
|
|
$"Postmark failed to send email: {sendResult.Message}");
|
|
}
|
|
}
|
|
}
|