Ja takie rzeczy trzymam w bazie danych:
public class EmailTemplate
{
[Key]
public Guid Id { get; set; }
public string Description { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
//wyciąłem EmailTemplate.eEmailTemplateType aby nie robić zamieszania
public interface IGeneralEmailSender : IEmailSender
{
List<EmailTemplate> Emailtemplates { get; }
void AddTemplate(string Description, string Title, string Body, EmailTemplate.eEmailTemplateType TemplateType);
Task AddTemplateAsync(string Description, string Title, string Body, EmailTemplate.eEmailTemplateType TemplateType);
void EditTemplate(EmailTemplate emailTemplate);
Task EditTemplateAsync(EmailTemplate emailTemplate);
void RemoveTemplate(Guid Id);
Task RemoveTemplateAsync(Guid Id);
EmailTemplate FindById(Guid Id);
Task<EmailTemplate> FindByIdAsync(Guid Id);
EmailTemplate FindByName(string Name);
Task<EmailTemplate> FindByNameAsync(string Name);
bool CanDeleteTemplate(Guid Id);
List<EmailTemplate> GetTemplatesForType(EmailTemplate.eEmailTemplateType templateType);
Dictionary<string, string> GetTagsByEmailType(EmailTemplate.eEmailTemplateType templateType);
}
I teraz przykład użycia:
public class NotificationService : INotificationService
{
//...
private readonly IGeneralEmailSender _emailSender;
//...
public async Task CancelVoucher(Voucher voucher)
{
GeneralSetting settings = _generalSettings.GeneralSettings;
if (!settings.EmailTemplate_CancelVoucher.HasValue)
return;
EmailTemplate emailTemplate = _emailSender.FindById(settings.EmailTemplate_CancelVoucher.Value);
if (emailTemplate == null || string.IsNullOrEmpty(emailTemplate.Body) || voucher.ApplicationUser == null)
return;
string Body = EmailBegin() + emailTemplate.Body
.Replace("^UserFirstName", voucher.ApplicationUser.FirstName)
.Replace("^UserLastName", voucher.ApplicationUser.LastName)
.Replace("^TotalCost", voucher.TotalCost.ToString())
.Replace("^VoucherNumber", voucher.ID.ToString())
.Replace("^VoucherAvailableCoins", voucher.AvailableCoins.ToString())
.Replace("^VoucherExpiryTime", voucher.ExpiryTime.ToString(@"dd.MM.yyyy HH:mm"))
+ EmailEnd();
await _emailSender.SendEmailAsync(voucher.ApplicationUser.Email, emailTemplate.Title, Body);
}
}