public async Task <bool> SendDynamicEmail(string messageId, string templateName, string groupName, EmailBuildData emailBuildData) { var template = await GetTemplateWithCache(templateName, CancellationToken.None).ConfigureAwait(false); UnsubscribeGroup unsubscribeGroup = await GetUnsubscribeGroupWithCache(groupName, CancellationToken.None).ConfigureAwait(false); emailBuildData.BaseDynamicData.BaseUrl = _sendGridConfig.Value.BaseUrl; emailBuildData.BaseDynamicData.BaseCommunicationUrl = _sendGridConfig.Value.BaseCommunicationUrl; Personalization personalization = new Personalization() { Tos = new List <EmailAddress>() { new EmailAddress(emailBuildData.EmailToAddress, emailBuildData.EmailToName) }, TemplateData = emailBuildData.BaseDynamicData, }; var eml = new SendGridMessage() { From = new EmailAddress(_sendGridConfig.Value.FromEmail, _sendGridConfig.Value.FromName), ReplyTo = new EmailAddress(_sendGridConfig.Value.ReplyToEmail, _sendGridConfig.Value.ReplyToName), TemplateId = template.id, Asm = new ASM() { GroupId = unsubscribeGroup.id }, Personalizations = new List <Personalization>() { personalization }, CustomArgs = new Dictionary <string, string> { { "TemplateId", template.id }, { "RecipientUserID", emailBuildData.RecipientUserID.ToString() }, { "TemplateName", templateName }, { "GroupName", groupName }, { "MessageId", messageId }, { "JobId", emailBuildData.JobID.HasValue ? emailBuildData.JobID.ToString() : "null" }, { "GroupId", emailBuildData.GroupID.HasValue ? emailBuildData.GroupID.ToString() : "null" }, { "RequestId", emailBuildData.RequestID.HasValue ? emailBuildData.RequestID.ToString() : "null" }, { "ReferencedJobs", GetReferencedJobs(emailBuildData.ReferencedJobs) } } }; Response response = await _sendGridClient.SendEmailAsync(eml).ConfigureAwait(false); if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Accepted) { return(true); } else { return(false); } }
public async Task Run([ServiceBusTrigger("message", Connection = "ServiceBus")] Message mySbMsg, ILogger log) { LogDetails logDetails = new LogDetails() { Queue = "Message" }; logDetails.Started = DateTime.Now; logDetails.MessageId = mySbMsg.MessageId; logDetails.DeliveryCount = mySbMsg.SystemProperties.DeliveryCount; SendMessageRequest sendMessageRequest = null; bool emailAlreadySent = await _cosmosDbService.EmailSent(mySbMsg.MessageId); if (emailAlreadySent) { logDetails.Status = "email already sent"; } else { try { string converted = Encoding.UTF8.GetString(mySbMsg.Body, 0, mySbMsg.Body.Length); sendMessageRequest = JsonConvert.DeserializeObject <SendMessageRequest>(converted); logDetails.Job = Enum.GetName(typeof(CommunicationJobTypes), sendMessageRequest.CommunicationJobType); logDetails.RecipientUserId = sendMessageRequest.RecipientUserID; IMessage message = _messageFactory.Create(sendMessageRequest); EmailBuildData emailBuildData = await message.PrepareTemplateData(sendMessageRequest.BatchID, sendMessageRequest.RecipientUserID, sendMessageRequest.JobID, sendMessageRequest.GroupID, sendMessageRequest.RequestID, sendMessageRequest.AdditionalParameters, sendMessageRequest.TemplateName); if (emailBuildData != null) { emailBuildData.JobID = emailBuildData.JobID.HasValue ? emailBuildData.JobID : sendMessageRequest.JobID; emailBuildData.GroupID = emailBuildData.GroupID.HasValue ? emailBuildData.GroupID : sendMessageRequest.GroupID; emailBuildData.RecipientUserID = sendMessageRequest.RecipientUserID; emailBuildData.RequestID = emailBuildData.RequestID.HasValue ? emailBuildData.RequestID : sendMessageRequest.RequestID; var result = await _connectSendGridService.SendDynamicEmail(mySbMsg.MessageId, sendMessageRequest.TemplateName, message.GetUnsubscriptionGroupName(sendMessageRequest.RecipientUserID), emailBuildData); logDetails.Status = $"SendDynamicEmail: {result}"; } else { logDetails.Status = "no emailBuildData"; } } catch (AggregateException exc) { RetryHandler(mySbMsg, sendMessageRequest, exc.InnerException, log); } catch (Exception ex) { log.LogInformation($"Calling retry handler..."); // Manage retries using our message retry handler RetryHandler(mySbMsg, sendMessageRequest, ex, log); } } logDetails.Finished = DateTime.Now; string json = JsonConvert.SerializeObject(logDetails); log.LogInformation(json); }