Example #1
0
        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);
            }
        }
Example #2
0
    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);
    }