public async Task SendEmailAsync(ApplicationEmailRequest emailRequest) { var apiKey = ApplicationOptions.CurrentValue.SendGridApiKey; if (!string.IsNullOrEmpty(apiKey)) { var sg = new SendGridClient(apiKey); var from = new EmailAddress(emailRequest.SenderEmail, emailRequest.SenderEmailName); var subject = emailRequest.Subject; var to = new EmailAddress(emailRequest.RecipientEmail, emailRequest.RecipientEmailName); var mail = MailHelper.CreateSingleEmail(from, to, subject, emailRequest.BodyText, emailRequest.BodyHtml); _ = await sg.SendEmailAsync(mail); } else { Logger.LogInformation($"From = {emailRequest.SenderEmailName}({emailRequest.SenderEmailName})"); Logger.LogInformation($"To = {emailRequest.RecipientEmail}({emailRequest.RecipientEmailName})"); Logger.LogInformation($"Subject = {emailRequest.Subject}"); Logger.LogInformation($"Text = {emailRequest.BodyText}"); Logger.LogInformation($"Html = {emailRequest.BodyHtml}"); } }
private async Task TransmitPendingEmailAsync(long emailRequestId) { using var ctx = QuiltContextFactory.Create(); var dbEmailRequest = await ctx.EmailRequests.Where(r => r.EmailRequestId == emailRequestId).SingleAsync().ConfigureAwait(false); if (dbEmailRequest.EmailRequestStatusCode != EmailRequestStatusCodes.Posted) { throw new BusinessOperationException(string.Format("Invalid email request status (ID = {0}, Status = {1}).", emailRequestId, dbEmailRequest.EmailRequestStatusCode)); } var bodyType = dbEmailRequest.BodyTypeCode; var bodyText = dbEmailRequest.BodyText; var bodyHtml = dbEmailRequest.BodyHtml; switch (bodyType) { case EmailBodyTypes.Alert: { var dbAlertEmailRequest = dbEmailRequest.AlertEmailRequests.FirstOrDefault(); if (dbAlertEmailRequest != null) { bodyText = bodyText.Replace(TemplateVariables.DeferredAlertId, dbAlertEmailRequest.AlertId.ToString()); bodyHtml = bodyHtml.Replace(TemplateVariables.DeferredAlertId, dbAlertEmailRequest.AlertId.ToString()); } } break; case EmailBodyTypes.Message: { var dbMessageEmailRequest = dbEmailRequest.MessageEmailRequests.FirstOrDefault(); if (dbMessageEmailRequest != null) { bodyText = bodyText.Replace(TemplateVariables.DeferredMessageId, dbMessageEmailRequest.MessageId.ToString()); bodyHtml = bodyHtml.Replace(TemplateVariables.DeferredMessageId, dbMessageEmailRequest.MessageId.ToString()); } } break; case EmailBodyTypes.Notification: { var dbNotificationEmailRequest = dbEmailRequest.NotificationEmailRequests.FirstOrDefault(); if (dbNotificationEmailRequest != null) { bodyText = bodyText.Replace(TemplateVariables.DeferredNotificationId, dbNotificationEmailRequest.NotificationId.ToString()); bodyHtml = bodyHtml.Replace(TemplateVariables.DeferredNotificationId, dbNotificationEmailRequest.NotificationId.ToString()); } } break; } var emailRequest = new ApplicationEmailRequest() { SenderEmail = dbEmailRequest.SenderEmail, SenderEmailName = dbEmailRequest.SenderEmailName, RecipientEmail = dbEmailRequest.RecipientEmail, RecipientEmailName = dbEmailRequest.RecipientEmailName, Subject = dbEmailRequest.Subject, BodyText = bodyText, BodyHtml = bodyHtml }; await ApplicationEmailSender.SendEmailAsync(emailRequest); // Update the email request status. // dbEmailRequest.EmailRequestStatusCode = EmailRequestStatusCodes.Complete; dbEmailRequest.EmailRequestStatusDateTimeUtc = GetUtcNow(); _ = await ctx.SaveChangesAsync().ConfigureAwait(false); }