using Features.Emails.Templates.Rendering; using Infrastructure.Configuration; using Infrastructure.Email; using Microsoft.Extensions.Configuration; namespace Features.Emails.Services; /// /// Default implementation of . /// public class EmailDispatcher( IEmailProvider emailProvider, IEmailTemplateProvider emailTemplateProvider, IConfiguration configuration ) : IEmailDispatcher { /// /// The base URL of the website, used to build confirmation links. Read from the /// WEBSITE_BASE_URL configuration value. /// /// /// Thrown when the WEBSITE_BASE_URL configuration value is not set. /// private string WebsiteBaseUrl => ConfigurationHelpers.GetKeyOrThrow(configuration, ConfigurationKeys.WebsiteBaseUrl); /// public async Task SendRegistrationEmailAsync( string firstName, string email, string confirmationToken ) { string confirmationLink = $"{WebsiteBaseUrl}/users/confirm?token={confirmationToken}"; string emailHtml = await emailTemplateProvider.RenderUserRegisteredEmailAsync( firstName, confirmationLink ); await emailProvider.SendAsync(email, "Welcome to The Biergarten App!", emailHtml); } /// public async Task SendResendConfirmationEmailAsync( string firstName, string email, string confirmationToken ) { string confirmationLink = $"{WebsiteBaseUrl}/users/confirm?token={confirmationToken}"; string emailHtml = await emailTemplateProvider.RenderResendConfirmationEmailAsync( firstName, confirmationLink ); await emailProvider.SendAsync( email, "Confirm Your Email - The Biergarten App", emailHtml, true ); } }