48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using DysonNetwork.Shared.Proto;
 | |
| using Microsoft.AspNetCore.Components;
 | |
| 
 | |
| namespace DysonNetwork.Pass.Mailer;
 | |
| 
 | |
| public class EmailService(
 | |
|     RingService.RingServiceClient pusher,
 | |
|     RazorViewRenderer viewRenderer,
 | |
|     ILogger<EmailService> logger
 | |
| )
 | |
| {
 | |
|     public async Task SendEmailAsync(
 | |
|         string? recipientName,
 | |
|         string recipientEmail,
 | |
|         string subject,
 | |
|         string htmlBody
 | |
|     )
 | |
|     {
 | |
|         await pusher.SendEmailAsync(
 | |
|             new SendEmailRequest()
 | |
|             {
 | |
|                 Email = new EmailMessage()
 | |
|                 {
 | |
|                     ToName = recipientName,
 | |
|                     ToAddress = recipientEmail,
 | |
|                     Subject = subject,
 | |
|                     Body = htmlBody
 | |
|                 }
 | |
|             }
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public async Task SendTemplatedEmailAsync<TComponent, TModel>(string? recipientName, string recipientEmail,
 | |
|         string subject, TModel model)
 | |
|         where TComponent : IComponent
 | |
|     {
 | |
|         try
 | |
|         {
 | |
|             var htmlBody = await viewRenderer.RenderComponentToStringAsync<TComponent, TModel>(model);
 | |
|             await SendEmailAsync(recipientName, recipientEmail, subject, htmlBody);
 | |
|         }
 | |
|         catch (Exception err)
 | |
|         {
 | |
|             logger.LogError(err, "Failed to render email template...");
 | |
|             throw;
 | |
|         }
 | |
|     }
 | |
| } |