using System.Net.Mail; using System.Reflection; using NejCommon.Emails; namespace NejCommon.Services.Email; public interface IEmailService { Task SendEmailAsync(string recipient, string subject, string message, List? attachments = null); async Task SendDocumentAsync(string recipient, T2 data, List? attachments = null) where T : EmailBase { var func = typeof(T).GetMethod("GetHTML", BindingFlags.Static | BindingFlags.FlattenHierarchy | BindingFlags.Public); var obj = Activator.CreateInstance(); obj.Data = data; var subject = obj.GetSubject(); var atts = obj.GetAttachments(); //invoke the GetHTML function asynchronously and wait for the result var html = await (Task)func.Invoke(null, new object[] { data }); await SendEmailAsync(recipient, subject, html, attachments == null ? atts : atts.Concat(attachments).ToList()); } }