using Hutopy.Infrastructure.Emailer.Configuration; using Hutopy.Infrastructure.Emailer.Contracts; using Microsoft.Extensions.Options; using PostmarkDotNet; namespace Hutopy.Infrastructure.Emailer.Services; public class PostmarkEmailSender : IEmailSender { private readonly PostmarkClient _client; private readonly EmailerOptions _options; public PostmarkEmailSender(IOptions 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}"); } } }