Пример #1
0
        public async Task <TransactMessageResponse> SendMessageAsync(TransactMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            SendMessagePreCommunicationVerification(message);

            var encodedMessage = _encoder.Encode(message);

            string response;

            using (var silverpop = _silverpopFactory())
            {
                response = await silverpop.HttpUploadAsync(encodedMessage);
            }

            var decodedResponse = _decoder.Decode(response);

            if (decodedResponse.Status == TransactMessageResponseStatus.EncounteredErrorsNoMessagesSent)
            {
                throw new TransactClientException(
                          decodedResponse.Error.Value, encodedMessage, decodedResponse.RawResponse);
            }

            return(decodedResponse);
        }
Пример #2
0
        public void InvokeGetRecipientBatchedMessages <T>(
            int recipientCount,
            int recipientsPerBatch,
            T personalizationTagsForEachRecipient)
        {
            var message = TransactMessage.Create("123", Enumerable.Range(0, recipientCount)
                                                 .Select(x => TransactMessageRecipient.Create(
                                                             Guid.NewGuid().ToString() + "@example.com",
                                                             personalizationTagsObject: personalizationTagsForEachRecipient))
                                                 .ToArray());

            var stopwatch = Stopwatch.StartNew();

            Console.WriteLine("Stopwatch started.");

            // Console.WriteLine("Calling GetRecipientBatchedMessages on constructed message...");
            // var recipientBatchedMesssages = message.GetRecipientBatchedMessages(recipientsPerBatch);

            // Console.WriteLine("{0} messages were generated.", recipientBatchedMesssages.Count());
            // Console.WriteLine();

            stopwatch.Stop();
            Console.WriteLine("Operation took {0}", stopwatch.Elapsed.ToString());
            Console.WriteLine();
        }
Пример #3
0
            private static string EncodedMessage(
                string campaignId                = "001",
                string transactionId             = null,
                bool showAllSendDetail           = false,
                bool sendAsBatch                 = false,
                bool noRetryOnFailure            = false,
                ICollection <string> saveColumns = null,
                ICollection <TransactMessageRecipient> recipients = null)
            {
                if (saveColumns == null)
                {
                    saveColumns = new List <string>();
                }

                if (recipients == null)
                {
                    recipients = new List <TransactMessageRecipient>();
                }

                var message = new TransactMessage()
                {
                    CampaignId        = campaignId,
                    TransactionId     = transactionId,
                    ShowAllSendDetail = showAllSendDetail,
                    SendAsBatch       = sendAsBatch,
                    NoRetryOnFailure  = noRetryOnFailure,
                    SaveColumns       = saveColumns,
                    Recipients        = recipients,
                };

                return(new TransactMessageEncoder().Encode(message));
            }
Пример #4
0
 private static TransactMessage GetTestMessage(string testType)
 {
     return(TransactMessage.Create("123456", TransactMessageRecipient.Create(
                                       "*****@*****.**",
                                       new TestPersonalizationTags()
     {
         Tag1 = "tag1-value",
         Tag2 = "tag2-value"
     })));
 }
Пример #5
0
            public void SetsMessageRecipient()
            {
                var recipient = new TransactMessageRecipient()
                {
                    EmailAddress = "*****@*****.**"
                };

                var message = TransactMessage.Create("123", recipient);

                Assert.Equal(recipient, message.Recipients.Single());
            }
Пример #6
0
        private void SendMessagePreCommunicationVerification(TransactMessage message)
        {
            if (message.Recipients.Count() > TransactClientConfiguration.MaxRecipientsPerNonBatchRequest)
            {
                throw new ArgumentException(ErrorExceededNonBatchRecipients);
            }

            if (!Configuration.PodNumber.HasValue)
            {
                throw new ApplicationException(ErrorMissingPodNumber);
            }
        }
Пример #7
0
            public void ThrowsForTooManyRecipients()
            {
                var message = new TransactMessage()
                {
                    Recipients = Enumerable.Range(0, TransactClientConfiguration.MaxRecipientsPerNonBatchRequest + 1)
                                 .Select(x => new TransactMessageRecipient())
                                 .ToList()
                };

                var exception = Assert.Throws <ArgumentException>(
                    () => new TransactClientTester().SendMessage(message));

                Assert.Equal(TransactClient.ErrorExceededNonBatchRecipients, exception.Message);
            }
Пример #8
0
                public void DoesNotThrowForNullPersonalizationTagPropertyValue()
                {
                    var message = new TransactMessage()
                    {
                        Recipients = new List <TransactMessageRecipient>()
                        {
                            new TransactMessageRecipient()
                            {
                                EmailAddress        = "*****@*****.**",
                                PersonalizationTags = new List <TransactMessageRecipientPersonalizationTag>()
                                {
                                    new TransactMessageRecipientPersonalizationTag("some_property", null)
                                }
                            }
                        }
                    };

                    new TransactMessageEncoder().Encode(message);
                }
Пример #9
0
        /// <returns>Filenames that can be used for checking status of batches.</returns>
        public virtual async Task <IEnumerable <string> > SendMessageBatchAsync(TransactMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            MessageBatchPreCommunicationVerification();

            var filenames = new List <string>();

            using (var silverpop = _silverpopFactory())
            {
                var batchedMessages = message.GetRecipientBatchedMessages(
                    TransactClientConfiguration.MaxRecipientsPerBatchRequest);

                var identifier = Guid.NewGuid().ToString();

                foreach (var batchMessage in batchedMessages)
                {
                    var encodedMessage = _encoder.Encode(batchMessage);

                    var filename = string.Format(
                        "{0}.{1}.xml.gz",
                        identifier,
                        filenames.Count() + 1);

                    silverpop.SftpCreateDirectoryIfNotExists("transact/temp");

                    await silverpop.SftpGzipUploadAsync(
                        encodedMessage,
                        "transact/temp/" + filename).ConfigureAwait(false);

                    await silverpop.SftpMoveAsync(
                        "transact/temp/" + filename,
                        "transact/inbound/" + filename).ConfigureAwait(false);

                    filenames.Add(filename + ".status");
                }
            }

            return(filenames);
        }
Пример #10
0
        public HomeModule(TransactClient client)
        {
            Get["/"] = _ => View["Index", new IndexModel(client.Configuration)];

            Post["/send"] = _ =>
            {
                var model = this.Bind <SendModel>();

                // Validate request
                var validationResult = this.Validate <SendModel>(model);
                if (!validationResult.IsValid)
                {
                    return(new TextResponse(
                               HttpStatusCode.BadRequest,
                               string.Join(" ", validationResult.Errors.SelectMany(x => x.Value))));
                }

                // Create message
                var recipient = TransactMessageRecipient.Create(model.ToAddress);
                recipient.PersonalizationTags = model.PersonalizationTags;

                var message = TransactMessage.Create(model.CampaignId, recipient);

                // Send message
                TransactMessageResponse response = null;
                try
                {
                    response = client.SendMessage(message);
                }
                catch (TransactClientException ex)
                {
                    return(new TextResponse(
                               HttpStatusCode.InternalServerError,
                               ex.Message));
                }

                return(Response.AsJson(response));
            };
        }
Пример #11
0
        public virtual async Task <TransactMessageResponse> SendMessageAsync(TransactMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            SendMessagePreCommunicationVerification(message);

            var encodedMessage = _encoder.Encode(message);

            string response;

            using (var silverpop = _silverpopFactory())
            {
                response = await silverpop.HttpUploadAsync(encodedMessage).ConfigureAwait(false);
            }

            var decodedResponse = _decoder.Decode(response);

            if (decodedResponse.Status == TransactMessageResponseStatus.EncounteredErrorsNoMessagesSent)
            {
                var errorMessage = decodedResponse.Error.Value;

                if (string.IsNullOrWhiteSpace(errorMessage) && decodedResponse.RecipientDetails.Any())
                {
                    errorMessage = string.Join(
                        "; ",
                        decodedResponse.RecipientDetails
                        .Where(x => x.SendStatus == TransactMessageResponseRecipientSendStatus.ErrorEncounteredWillNotRetry)
                        .Select(x => $"{x.Email}: {(string.IsNullOrWhiteSpace(x.Error.Value) ? "Unknown error" : x.Error.Value)}"));
                }

                throw new TransactClientException(
                          errorMessage, encodedMessage, decodedResponse.RawResponse);
            }

            return(decodedResponse);
        }
 public override string Encode(TransactMessage message)
 {
     return(_encodeOutput);
 }
 public TransactMessageTests()
 {
     _sut = new TransactMessage();
 }
                public void DoesNotThrowForNullPersonalizationTagPropertyValue()
                {
                    var message = new TransactMessage()
                    {
                        Recipients = new List<TransactMessageRecipient>()
                        {
                            new TransactMessageRecipient()
                            {
                                EmailAddress = "*****@*****.**",
                                PersonalizationTags = new List<TransactMessageRecipientPersonalizationTag>()
                                {
                                    new TransactMessageRecipientPersonalizationTag("some_property", null)
                                }
                            }
                        }
                    };

                    new TransactMessageEncoder().Encode(message);
                }
Пример #15
0
 public TransactMessageTests()
 {
     _sut = new TransactMessage();
 }
Пример #16
0
 public void ThrowsForNullRecipients()
 {
     Assert.Throws <ArgumentNullException>(
         () => TransactMessage.Create("123", null));
 }
Пример #17
0
            public void SetsCampaignId()
            {
                var message = TransactMessage.Create("123");

                Assert.Equal("123", message.CampaignId);
            }
Пример #18
0
 public void ThrowsForNullCampaignId()
 {
     Assert.Throws <ArgumentNullException>(
         () => TransactMessage.Create(null));
 }
            private static string EncodedMessage(
                string campaignId = "001",
                string transactionId = null,
                bool showAllSendDetail = false,
                bool sendAsBatch = false,
                bool noRetryOnFailure = false,
                ICollection<string> saveColumns = null,
                ICollection<TransactMessageRecipient> recipients = null)
            {
                if (saveColumns == null)
                    saveColumns = new List<string>();

                if (recipients == null)
                    recipients = new List<TransactMessageRecipient>();

                var message = new TransactMessage()
                {
                    CampaignId = campaignId,
                    TransactionId = transactionId,
                    ShowAllSendDetail = showAllSendDetail,
                    SendAsBatch = sendAsBatch,
                    NoRetryOnFailure = noRetryOnFailure,
                    SaveColumns = saveColumns,
                    Recipients = recipients,
                };

                return new TransactMessageEncoder().Encode(message);
            }