/// <summary>
        /// Asynchronously sends a bulk email message and returns the response from the Injection API.
        /// </summary>
        /// <param name="message">A <c>BulkMessage</c> object to be sent.</param>
        /// <param name="cancellationToken">A <c>CancellationToken</c> to handle cancellation between async threads.</param>
        /// <returns>A <c>SendResponse</c> of an SocketLabsClient send request.</returns>
        /// <example>
        /// This sample shows you how to Send a Bulk Message
        /// <code>
        /// var client = new SocketLabsClient(00000, "apiKey");
        ///
        /// var message = new BulkMessage();
        ///
        /// message.PlainTextBody = "This is the body of my message sent to ##Name##";
        /// message.HtmlBody = "<html>This is the HtmlBody of my message sent to ##Name##</html>";
        /// message.Subject = "Sending a test message";
        /// message.From.Email = "*****@*****.**";
        ///
        /// var recipient1 = message.To.Add("*****@*****.**");
        /// recipient1.MergeData.Add("Name", "Recipient1");
        ///
        /// var recipient2 = message.To.Add("*****@*****.**");
        /// recipient2.MergeData.Add("Name", "Recipient2");
        ///
        /// var response = await client.Send(message);
        ///
        /// if (response.Result != SendResult.Success)
        /// {
        ///     // Handle Error
        /// }
        ///</code>
        /// </example>
        public async Task <SendResponse> SendAsync(IBulkMessage message, CancellationToken cancellationToken)
        {
            var validator = new SendValidator();

            var validationResult = validator.ValidateCredentials(_serverId, _apiKey);

            if (validationResult.Result != SendResult.Success)
            {
                return(validationResult);
            }

            validationResult = validator.ValidateMessage(message);
            if (validationResult.Result != SendResult.Success)
            {
                return(validationResult);
            }

            var factory          = new InjectionRequestFactory(_serverId, _apiKey);
            var injectionRequest = factory.GenerateRequest(message);
            var json             = injectionRequest.GetAsJson();

            var retryHandler = new RetryHandler(_httpClient, EndpointUrl, new RetrySettings(NumberOfRetries));
            var httpResponse = await retryHandler.SendAsync(json, cancellationToken);

            var response = new InjectionResponseParser().Parse(httpResponse);

            return(response);
        }
 public Task <SendResponse> SendAsync(IBulkMessage message)
 {
     return(Task.Run(() => new SendResponse()
     {
         Result = SendResult.Success
     }));
 }
 public SendResponse Send(IBulkMessage message)
 {
     return(new SendResponse()
     {
         Result = SendResult.Success
     });
 }
Пример #4
0
        /// <summary>
        /// Asynchronously sends a bulk email message and returns the response from the Injection API.
        /// </summary>
        /// <param name="message">A <c>BulkMessage</c> object to be sent.</param>
        /// <returns>A <c>SendResponse</c> of an SocketLabsClient send request.</returns>
        /// <example>
        /// This sample shows you how to Send a Bulk Message
        /// <code>
        /// var client = new SocketLabsClient(00000, "apiKey");
        ///
        /// var message = new BulkMessage();
        ///
        /// message.PlainTextBody = "This is the body of my message sent to ##Name##";
        /// message.HtmlBody = "<html>This is the HtmlBody of my message sent to ##Name##</html>";
        /// message.Subject = "Sending a test message";
        /// message.From.Email = "*****@*****.**";
        ///
        /// var recipient1 = message.To.Add("*****@*****.**");
        /// recipient1.MergeData.Add("Name", "Recipient1");
        ///
        /// var recipient2 = message.To.Add("*****@*****.**");
        /// recipient2.MergeData.Add("Name", "Recipient2");
        ///
        /// var response = await client.Send(message);
        ///
        /// if (response.Result != SendResult.Success)
        /// {
        ///     // Handle Error
        /// }
        ///</code>
        /// </example>
        public async Task <SendResponse> SendAsync(IBulkMessage message)
        {
            var validator = new SendValidator();

            var validationResult = validator.ValidateCredentials(_serverId, _apiKey);

            if (validationResult.Result != SendResult.Success)
            {
                return(validationResult);
            }

            validationResult = validator.ValidateMessage(message);
            if (validationResult.Result != SendResult.Success)
            {
                return(validationResult);
            }

            var factory          = new InjectionRequestFactory(_serverId, _apiKey);
            var injectionRequest = factory.GenerateRequest(message);

            var httpResponse = await _httpClient.PostAsync(EndpointUrl, injectionRequest.GetAsJson());

            var response = new InjectionResponseParser().Parse(httpResponse);

            return(response);
        }
Пример #5
0
        /// <summary>
        /// Check the To recipient list (List of <c>IEmailAddress</c>) for valid email addresses
        /// </summary>
        /// <param name="message">An <c>IBulkMessage</c> object to be sent.</param>
        /// <returns>A List of <c>AddressResult</c> if an invalid email address is found.</returns>
        internal virtual List <AddressResult> HasInvalidRecipients(IBulkMessage message)
        {
            var result = new List <AddressResult>();

            var invalidTo = FindInvalidRecipients(message.To);

            if (invalidTo != null && invalidTo.Any())
            {
                result.AddRange(invalidTo.ToList());
            }

            return(result);
        }
Пример #6
0
        /// <summary>
        /// Validate a bulk email message before sending to the Injection API.
        /// </summary>
        /// <param name="message">An <c>IBulkMessage</c> object to be sent.</param>
        /// <returns>A <c>SendResponse</c> with the validation results</returns>
        public SendResponse ValidateMessage(IBulkMessage message)
        {
            var result = ValidateIMessageBase(message);

            if (result == SendResult.Success)
            {
                return(ValidateRecipients(message));
            }

            return(new SendResponse()
            {
                Result = result
            });
        }
Пример #7
0
 /// <summary>
 /// Synchronously sends a bulk email message and returns the response from the Injection API.
 /// </summary>
 /// <param name="message">A <c>BulkMessage</c> object to be sent.</param>
 /// <returns>A <c>SendResponse</c> of an SocketLabsClient send request.</returns>
 /// <example>
 /// This sample shows you how to Send a Bulk Message
 /// <code>
 /// var client = new SocketLabsClient(00000, "apiKey");
 ///
 /// var message = new BulkMessage();
 ///
 /// message.PlainTextBody = "This is the body of my message sent to ##Name##";
 /// message.HtmlBody = "<html>This is the HtmlBody of my message sent to ##Name##</html>";
 /// message.Subject = "Sending a test message";
 /// message.From.Email = "*****@*****.**";
 ///
 /// var recipient1 = message.To.Add("*****@*****.**");
 /// recipient1.MergeData.Add("Name", "Recipient1");
 ///
 /// var recipient2 = message.To.Add("*****@*****.**");
 /// recipient2.MergeData.Add("Name", "Recipient2");
 ///
 /// var response = client.Send(message);
 ///
 /// if (response.Result != SendResult.Success)
 /// {
 ///     // Handle Error
 /// }
 ///</code>
 /// </example>
 public SendResponse Send(IBulkMessage message)
 {
     try
     {
         //Read this if you have questions: https://blogs.msdn.microsoft.com/pfxteam/2012/04/13/should-i-expose-synchronous-wrappers-for-asynchronous-methods/
         return(Task.Run(() => SendAsync(message)).Result);
     }
     //for synchronous usage, try to simplify exceptions being thrown
     catch (AggregateException e)
     {
         if (e.InnerException != null)
         {
             ExceptionDispatchInfo.Capture(e.InnerException).Throw();
         }
         throw;
     }
 }
Пример #8
0
        /// <summary>
        /// Generate the <c>InjectionRequest</c> for sending to the Injection Api
        /// </summary>
        /// <param name="message">An <c>IBulkMessage</c> object to be sent.</param>
        /// <returns>An <c>InjectionRequest</c> for sending to the Injection Api</returns>
        public InjectionRequest GenerateRequest(IBulkMessage message)
        {
            var request = new InjectionRequest(_serverId, _apiKey);

            var jsonMsg = GenerateBaseMessageJson(message);

            // Replace the "To" recipients with links to merge field data
            jsonMsg.To = new List <AddressJson> {
                new AddressJson("%%DeliveryAddress%%", "%%RecipientName%%")
            };

            // handle merge data per recipient for message
            var mergeDataForEmail = GetBulkMergeFields(message.To);

            jsonMsg.MergeData.PerMessage = mergeDataForEmail;

            // handle global (per message) merge data
            jsonMsg.MergeData.Global = PopulateMergeData(message.GlobalMergeData);

            request.Messages.Add(jsonMsg);

            return(request);
        }
Пример #9
0
        /// <summary>
        /// Validate email recipients for a bulk message
        /// </summary>
        /// <remarks>
        /// Checks the To recipient field (List of <c>IBulkRecipient</c>) for the following:
        /// <list type="bullet">
        /// <item>
        /// <description>At least 1 recipient is in the list.</description>
        /// </item>
        /// <item>
        /// <description>Recipients in list do not exceed the <c>MaximumRecipientsPerMessage</c>.</description>
        /// </item>
        /// <item>
        /// <description>Recipients in list are valid.</description>
        /// </item>
        /// </list>
        ///  If errors are found, the <c>SendResponse</c> will contain the invalid email addresses
        /// </remarks>
        /// <param name="message">An <c>IBulkMessage</c> object to be sent.</param>
        /// <returns>A <c>SendResponse</c> with the validation results</returns>
        internal virtual SendResponse ValidateRecipients(IBulkMessage message)
        {
            if (message.To == null || message.To.Count <= 0)
            {
                return new SendResponse()
                       {
                           Result = SendResult.RecipientValidationMissingTo
                       }
            }
            ;

            if (message.To.Count > MaximumRecipientsPerMessage)
            {
                return new SendResponse()
                       {
                           Result = SendResult.RecipientValidationMaxExceeded
                       }
            }
            ;

            var invalidRec = HasInvalidRecipients(message);

            if (invalidRec != null && invalidRec.Any())
            {
                return new SendResponse()
                       {
                           Result         = SendResult.RecipientValidationInvalidRecipients,
                           AddressResults = invalidRec.ToArray()
                       }
            }
            ;

            return(new SendResponse()
            {
                Result = SendResult.Success
            });
        }