public async Task SendEmailAsync(string to, NotificationEvent @event) { var templateData = await _repository.GetEmailTemplateAsync(@event.EventName); if (templateData == null || !templateData.IsEnabled) { return; } var emailSubject = _templateEngine.Execute(templateData.Subject, @event.Parameters); string bodyHtml; switch (templateData.ContentsType) { case ContentsType.Markdown: var markdown = _templateEngine.Execute(templateData.Contents, @event.Parameters); bodyHtml = _markdownParser.ToTrustedHtml(markdown); break; case ContentsType.Html: bodyHtml = _templateEngine.Execute(templateData.Contents, @event.Parameters); break; default: throw new NotSupportedException($"Contents Type {templateData.ContentsType} is not supported for emails."); } string emailHtml; var layoutData = await _repository.GetLayoutHtmlAsync(); if (string.IsNullOrWhiteSpace(layoutData)) { emailHtml = bodyHtml; } else { var layoutParameters = new Dictionary <string, string>(@event.Parameters) { { "body", bodyHtml } }; emailHtml = _templateEngine.Execute(layoutData, layoutParameters); } var result = new ReadyEmail( @event.EventName, to, templateData.From, templateData.Cc, templateData.Bcc, emailSubject, emailHtml); await SendEmailSmtpAsync(result); }