コード例 #1
0
        private static CommunicationSendRequest GetSendRequest(CustomerCommunicationUseCase useCase, string message)
        {
            var sendRequest = new CommunicationSendRequest()
            {
                UseCase    = useCase,
                PersonId   = JObject.Parse(message).SelectToken(useCase.PersonIdPath).ToObject <int>(),
                Parameters = new List <KeyValuePair <string, string> >()
            };

            var templateParams = useCase.TemplateMessageParameters;

            var jmessage = JObject.Parse(message);

            if (templateParams != null)
            {
                foreach (var templateParamsKey in templateParams)
                {
                    var value = jmessage.SelectToken(templateParamsKey.Value).ToString();
                    if (templateParamsKey.Key.ToLower().Contains("amount"))
                    {
                        value = value.FormatCurrency();
                    }
                    sendRequest.Parameters.Add(new KeyValuePair <string, string>(templateParamsKey.Key, value));
                }
            }

            return(sendRequest);
        }
コード例 #2
0
ファイル: MailgunService.cs プロジェクト: jkerak/emailsender
        private async Task <HttpContent> GetEmailSendForm(CommunicationSendRequest sendRequest)
        {
            if (sendRequest.UseCase.CanUnsubscribe)
            {
                var unsubLink = await GetUnsubscribeLink(sendRequest);

                sendRequest.Parameters.Add(
                    new KeyValuePair <string, string>("UnsubscribeLink", unsubLink));
            }

            var formDictionary = new Dictionary <string, string>
            {
                { "from", sendRequest.FromEmail.Length == 0 ? _fromEmail : sendRequest.FromEmail },
                { "to", sendRequest.UserContactInfo.EmailAddress },
                { "subject", sendRequest.UseCase.Parameters.First(p => p.Key == "EmailSubject").Value },
                { "template", sendRequest.UseCase.Parameters.First(p => p.Key == "EmailTemplate").Value },
                {
                    "h:sender", sendRequest.FromEmail.Length == 0 ? _fromEmail : sendRequest.FromEmail
                }, //added to ensure sender address appears correctly in Outlook
                {
                    "h:X-Mailgun-Variables",
                    JsonConvert.SerializeObject(sendRequest.Parameters.ToDictionary(k => k.Key, v => v.Value))
                },
                { "o:testmode", (_mailgunTestMode).ToString() },
                { "o:tag", sendRequest.UseCase.Id }
            };

            if (_enableMailgun)
            {
                return(new FormUrlEncodedContent(formDictionary));
            }

            return(new StringContent(JsonConvert.SerializeObject(formDictionary), Encoding.UTF8, "application/json"));
        }
コード例 #3
0
ファイル: ActivityService.cs プロジェクト: jkerak/emailsender
        private void LogEmailSent(IDurableOrchestrationContext client, CommunicationSendRequest request)
        {
            var key = new EntityId(nameof(CommsTrackingEntity), request.PersonId.ToString());

            var proxy = client.CreateEntityProxy <ICommsTrackingEntity>(key);

            proxy.Track(request.UseCase.Id);
        }
コード例 #4
0
ファイル: MailgunService.cs プロジェクト: jkerak/emailsender
        private async Task SendEmail(CommunicationSendRequest request)
        {
            var emailSendForm = await GetEmailSendForm(request);

            var response = await _httpClient.PostAsync("messages", emailSendForm);

            request.MailgunResponse = await response.Content.ReadAsStringAsync();
        }
コード例 #5
0
ファイル: LoggingService.cs プロジェクト: jkerak/emailsender
        private EventData FormatMessage(CommunicationSendRequest request)
        {
            var logEntry = new
            {
                request.PersonId,
                request.UserContactInfo.EmailAddress,
                request.UseCase.Id,
                request.UseCase.Type,
                Channel   = "Email",
                TimeStamp = DateTime.UtcNow
            };
            string message      = JsonConvert.SerializeObject(logEntry);
            var    messageBytes = Encoding.UTF8.GetBytes(message);

            return(new EventData(messageBytes));
        }
コード例 #6
0
ファイル: MailgunService.cs プロジェクト: jkerak/emailsender
        private async Task <string> GetUnsubscribeLink(CommunicationSendRequest request)
        {
            var prefix = Environment.GetEnvironmentVariable("EmbeddedSiteUrl");
            var suffix = "#!/contact-preferences";

            var obj = new
            {
                personId  = request.PersonId,
                signature = await SignString(string.Concat(request.PersonId.ToString(), request.UseCase.Id)),
                useCase   = request.UseCase.Id
            };
            var queryParam =
                Base64UrlEncoder.Encode(JsonConvert.SerializeObject(obj));

            return(prefix + queryParam + suffix);
        }