/// <summary>
        /// If you are sending messages from various points across your code, the
        /// MessageBusFactory will create multiple thread-safe object instances to
        /// efficiently batch transactions, resulting in higher throughput.
        ///
        /// define one or more template message param arrays.  merge fields and custom headers
        /// are appended to each message after construction
        /// </summary>
        void SendExampleTemplates()
        {
            var msg1 = new MessageBusTemplateEmail {
                ToEmail = "*****@*****.**",
                ToName = "recipient1",
                TemplateKey = ""
            };
            msg1.MergeFields["%FIELD1"] = "value1";
            msg1.MergeFields["%FIELD2"] = "value2";
            msg1.CustomHeaders["HEADER1"] = "header1";
            msg1.CustomHeaders["HEADER2"] = "header2";

            var msg2 = new MessageBusTemplateEmail {
                ToEmail = "*****@*****.**",
                ToName = "recipient2",
                TemplateKey = ""
            };
            msg2.MergeFields["%FIELD1"] = "value1";
            msg2.MergeFields["%FIELD2"] = "value2";
            msg2.CustomHeaders["HEADER1"] = "header1";
            msg2.CustomHeaders["HEADER2"] = "header2";

            var templates = new[] { msg1, msg2 };
            SendMessages(templates);
        }
 public BatchTemplateMessage(MessageBusTemplateEmail email)
 {
     mergeFields = email.MergeFields;
     toEmail = email.ToEmail;
     toName = email.ToName;
     customHeaders = email.CustomHeaders;
     templateKey = email.TemplateKey;
 }
        public void ThrowsAnErrorIfTheSuppliedMergeFieldsDoNotStartAndEndWithPercentSymbols()
        {
            try {

                var email = new MessageBusTemplateEmail {
                    TemplateKey = "TEST",
                    ToEmail = "*****@*****.**"
                };
                email.MergeFields.Add("EMAIL", "*****@*****.**");
                EmailClient.Send(email);
            } catch (MessageBusValidationFailedException) {
                return;
            }
            Assert.Fail("Expected Exception to be thrown");
        }
 public void ChecksForThePresenceOfMergeFieldsWhenATemplateKeyIsSpecifiedAndWorksIfPresent()
 {
     var email = new MessageBusTemplateEmail {
         TemplateKey = "TEST",
         ToEmail = "*****@*****.**"
     };
     email.MergeFields.Add("%EMAIL%", "*****@*****.**");
     EmailClient.Send(email);
 }
        private void Validate(MessageBusTemplateEmail email)
        {
            if (SkipValidation) return;
            string msg = "";

            if (String.IsNullOrEmpty(ApiKey)) {
                msg = "ApiKey is required";
            }
            if (String.IsNullOrEmpty(email.TemplateKey)) {
                msg = "A TemplateKey must be supplied when sending templated email";
            }

            if (String.IsNullOrEmpty(email.ToEmail)) {
                msg = "A ToEmail must be supplied when sending templated email";
            }

            if (email.MergeFields.Count > 0) {
                if (email.MergeFields.Any(pair => !pair.Key.StartsWith("%") || !pair.Key.EndsWith("%"))) {
                    msg = "Merge Fields must be surrounded with %% e.g. %FIELD%";
                }
            }

            if (msg.Length > 0) {
                Logger.error(msg);
                throw new MessageBusValidationFailedException(msg);
            }
        }
 public bool Send(MessageBusTemplateEmail email)
 {
     Validate(email);
     return Send(new BatchTemplateMessage(email));
 }