static void Main(string[] args)
        {
            // Grab configuration
            var dynamicsHost = ConfigurationManager.AppSettings["DynamicsHost"].ToString();
            var dynamicsUsername = ConfigurationManager.AppSettings["DynamicsUsername"].ToString();
            var dynamicsPassword = ConfigurationManager.AppSettings["DynamicsPassword"].ToString();

            var govdeliveryHost = ConfigurationManager.AppSettings["GovDeliveryHost"].ToString();
            var govdeliveryKey = ConfigurationManager.AppSettings["GovDeliveryKey"].ToString();

            var dynamics = new DynamicsClient(dynamicsHost, dynamicsUsername, dynamicsPassword);
            var hub = new HubClient(govdeliveryHost, govdeliveryKey, dynamics);

            // Initialize connection information for hub
            hub.RetrieveConnectors().Wait();

            // Ensure that dynamics is properly setup for our use case
            dynamics.EnsureGovdeliveryPublisher();
            dynamics.EnsureEmailGovdeliveryField();
            dynamics.EnsureEmailMetadata();

            // Retrieve and send emails that are in "Pending Send"
            var emails = dynamics.RetrievePendingEmails(hub.GetEmailForPolling());
            hub.SendEmails(emails).Wait();

            // Push analytics data back into dynamics
            hub.UpdateEmailStatuses().Wait();
        }
        public void TestSendEmailsSuccess()
        {
            List<Email> emails = new List<Email>()
            { new Email()
                {
                    to = new List<string>() { "*****@*****.**" },
                    subject = "An email subject",
                    body = "Body content of the email",
                    id = "55a"
                }
            };

            var connector = new Connector();
            connector.links = new List<Link>()
            {
                new Link()
                {
                    rel = "actions",
                    href = "/connectors/123/actions"
                }
            };

            var fakeResponseHandler = new FakeHttpMessageHandler(new List<HttpResponseMessage> () {new HttpResponseMessage(HttpStatusCode.OK)});
            var fakeHttpClient = new HttpClient(fakeResponseHandler);
            fakeHttpClient.BaseAddress = new Uri("https://blah.test.com");

            var mockClient = new Mock<IDynamicsClient>();
            mockClient.Setup(dyn => dyn.UpdateStatus(It.IsAny<string>(), It.IsAny<string>()));
            var hubClient = new HubClient("https://prefix.domain.com", "blah", mockClient.Object);

            var hubConnection = hubClient.GetType().GetField("connection", BindingFlags.NonPublic | BindingFlags.Instance);
            hubConnection.SetValue(hubClient, fakeHttpClient);
            var hubDynamics = hubClient.GetType().GetField("dynamics", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            hubDynamics.SetValue(hubClient, connector);

            hubClient.SendEmails(emails).Wait();

            mockClient.Verify(dyn => dyn.UpdateStatus("55a", "Sending"));
        }