public void ApplyConfigurationSection_CreatesExpectedOptions()
        {
            var options = new SendGridOptions();
            var dict    = new Dictionary <string, string>();
            var builder = new ConfigurationBuilder();

            builder.AddInMemoryCollection(dict);
            var config = builder.Build();

            SendGridHelpers.ApplyConfiguration(config, options);
            Assert.Null(options.FromAddress);
            Assert.Null(options.ToAddress);

            dict = new Dictionary <string, string>
            {
                { "to", "Testing1 <*****@*****.**>" },
                { "from", "Testing2 <*****@*****.**>" },
            };
            builder = new ConfigurationBuilder();
            builder.AddInMemoryCollection(dict);
            config = builder.Build();

            SendGridHelpers.ApplyConfiguration(config, options);

            Assert.Equal("*****@*****.**", options.ToAddress.Email);
            Assert.Equal("Testing1", options.ToAddress.Name);
            Assert.Equal("*****@*****.**", options.FromAddress.Email);
            Assert.Equal("Testing2", options.FromAddress.Name);
        }
        /// <inheritdoc />
        public void Initialize(ExtensionConfigContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            var metadata = new ConfigMetadata();

            context.ApplyConfig(metadata, "sendgrid");
            this.ToAddress   = SendGridHelpers.Apply(this.ToAddress, metadata.To);
            this.FromAddress = SendGridHelpers.Apply(this.FromAddress, metadata.From);

            if (string.IsNullOrEmpty(this.ApiKey))
            {
                INameResolver nameResolver = context.Config.NameResolver;
                this.ApiKey = nameResolver.Resolve(AzureWebJobsSendGridApiKeyName);
            }

            context
            .AddConverter <string, SendGridMessage>(SendGridHelpers.CreateMessage)
            .AddConverter <JObject, SendGridMessage>(SendGridHelpers.CreateMessage)
            .AddBindingRule <SendGridAttribute>()
            .AddValidator(ValidateBinding)
            .BindToCollector <SendGridMessage>(CreateCollector);
        }
        public void TryParseAddress_Failure(string value)
        {
            EmailAddress address = null;
            bool         result  = SendGridHelpers.TryParseAddress(value, out address);

            Assert.False(result);
            Assert.Null(address);
        }
        public void TryParseAddress_Success()
        {
            EmailAddress address = null;

            SendGridHelpers.TryParseAddress("*****@*****.**", out address);
            Assert.Equal("*****@*****.**", address.Email);
            Assert.Null(address.Name);

            address = null;
            SendGridHelpers.TryParseAddress("Test Account <*****@*****.**>", out address);
            Assert.Equal("*****@*****.**", address.Email);
            Assert.Equal("Test Account", address.Name);
        }
        public void TryParseAddress_Success()
        {
            MailAddress address = null;

            SendGridHelpers.TryParseAddress("*****@*****.**", out address);
            Assert.Equal("*****@*****.**", address.Address);
            Assert.Equal(string.Empty, address.DisplayName);

            address = null;
            SendGridHelpers.TryParseAddress("Test Account <*****@*****.**>", out address);
            Assert.Equal("*****@*****.**", address.Address);
            Assert.Equal("Test Account", address.DisplayName);
        }
        public void IsToValid()
        {
            // Null Personalization
            SendGridMessage mail = new SendGridMessage();

            mail.Personalizations = null;
            Assert.False(SendGridHelpers.IsToValid(mail));

            // Empty Personalization
            mail.Personalizations = new List <Personalization>();
            Assert.False(SendGridHelpers.IsToValid(mail));

            // 'To' with no address
            Personalization personalization = new Personalization();

            personalization.Tos = new List <EmailAddress>
            {
                new EmailAddress()
            };
            mail.Personalizations.Add(personalization);
            Assert.False(SendGridHelpers.IsToValid(mail));

            // Personalization with no 'To'
            mail = new SendGridMessage();
            mail.Personalizations = new List <Personalization>();

            Personalization personalization1 = new Personalization();

            personalization1.Tos = new List <EmailAddress>
            {
                new EmailAddress("*****@*****.**")
            };
            mail.Personalizations.Add(personalization1);

            Personalization personalization2 = new Personalization();

            personalization2.Bccs = new List <EmailAddress>
            {
                new EmailAddress("*****@*****.**")
            };
            mail.Personalizations.Add(personalization2);

            Assert.False(SendGridHelpers.IsToValid(mail));

            // valid
            personalization2.Tos = new List <EmailAddress>
            {
                new EmailAddress("*****@*****.**")
            };
            Assert.True(SendGridHelpers.IsToValid(mail));
        }
        public void CreateMessage_CreatesExpectedMessage()
        {
            // multiple recipients
            JObject input = new JObject
            {
                {
                    "to", new JArray
                    {
                        "*****@*****.**",
                        "Test Account 2 <*****@*****.**>"
                    }
                },
                { "from", "Test Account 3 <*****@*****.**>" },
                { "subject", "Test Subject" },
                { "text", "Test Text" }
            };

            SendGridMessage result = SendGridHelpers.CreateMessage(input);

            Assert.Equal(2, result.To.Length);
            Assert.Equal("*****@*****.**", result.To[0].Address);
            Assert.Equal("*****@*****.**", result.To[1].Address);
            Assert.Equal("Test Account 2", result.To[1].DisplayName);
            Assert.Equal("*****@*****.**", result.From.Address);
            Assert.Equal("Test Account 3", result.From.DisplayName);
            Assert.Equal("Test Subject", result.Subject);
            Assert.Equal("Test Text", result.Text);

            // single recipient
            input = new JObject
            {
                { "to", "Test Account 2 <*****@*****.**>" },
                { "from", "Test Account 3 <*****@*****.**>" },
                { "subject", "Test Subject" },
                { "text", "Test Text" }
            };

            result = SendGridHelpers.CreateMessage(input);

            Assert.Equal(1, result.To.Length);
            Assert.Equal("*****@*****.**", result.To[0].Address);
            Assert.Equal("Test Account 2", result.To[0].DisplayName);
            Assert.Equal("*****@*****.**", result.From.Address);
            Assert.Equal("Test Account 3", result.From.DisplayName);
            Assert.Equal("Test Subject", result.Subject);
            Assert.Equal("Test Text", result.Text);
        }
        /// <summary>
        /// Adds the SendGrid extension to the provided <see cref="IWebJobsBuilder"/>.
        /// </summary>
        /// <param name="builder">The <see cref="IWebJobsBuilder"/> to configure.</param>
        public static IWebJobsBuilder AddSendGrid(this IWebJobsBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.AddExtension <SendGridExtensionConfigProvider>()
            .ConfigureOptions <SendGridOptions>((section, options) =>
            {
                SendGridHelpers.ApplyConfiguration(section, options);
            });

            builder.Services.AddSingleton <ISendGridClientFactory, DefaultSendGridClientFactory>();

            return(builder);
        }
        /// <summary>
        /// Adds the SendGrid extension to the provided <see cref="IWebJobsBuilder"/>.
        /// </summary>
        /// <param name="builder">The <see cref="IWebJobsBuilder"/> to configure.</param>
        public static IWebJobsBuilder AddSendGrid(this IWebJobsBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.AddExtension <SendGridExtensionConfigProvider>()
            .ConfigureOptions <SendGridOptions>((rootConfig, extensionPath, options) =>
            {
                // Set the default, which can be overridden.
                options.ApiKey = rootConfig[SendGridExtensionConfigProvider.AzureWebJobsSendGridApiKeyName];

                IConfigurationSection section = rootConfig.GetSection(extensionPath);
                SendGridHelpers.ApplyConfiguration(section, options);
            });

            builder.Services.AddSingleton <ISendGridClientFactory, DefaultSendGridClientFactory>();

            return(builder);
        }
        public void DefaultMessageProperties_CreatesExpectedMessage()
        {
            SendGridAttribute     attribute = new SendGridAttribute();
            SendGridConfiguration config    = new SendGridConfiguration
            {
                ApiKey      = "12345",
                FromAddress = new EmailAddress("*****@*****.**", "Test2"),
                ToAddress   = new EmailAddress("*****@*****.**", "Test")
            };

            SendGridMessage message = new SendGridMessage();

            message.Subject = "TestSubject";
            message.AddContent("text/plain", "TestText");

            SendGridHelpers.DefaultMessageProperties(message, config, attribute);

            Assert.Same(config.FromAddress, config.FromAddress);
            Assert.Equal("*****@*****.**", message.Personalizations.Single().Tos.Single().Email);
            Assert.Equal("TestSubject", message.Subject);
            Assert.Equal("TestText", message.Contents.Single().Value);
        }
        public void DefaultMessageProperties_CreatesExpectedMessage()
        {
            SendGridAttribute     attribute = new SendGridAttribute();
            SendGridConfiguration config    = new SendGridConfiguration
            {
                ApiKey      = "12345",
                FromAddress = new MailAddress("*****@*****.**", "Test2"),
                ToAddress   = new MailAddress("*****@*****.**", "Test")
            };
            SendGridMessage message = new SendGridMessage
            {
                Subject = "TestSubject",
                Text    = "TestText"
            };

            SendGridHelpers.DefaultMessageProperties(message, config, attribute);

            Assert.Same(config.FromAddress, config.FromAddress);
            Assert.Equal("*****@*****.**", message.To.Single().Address);
            Assert.Equal("TestSubject", message.Subject);
            Assert.Equal("TestText", message.Text);
        }
Exemple #12
0
        public void IsToValid()
        {
            // Null Personalization
            Mail mail = new Mail();

            mail.Personalization = null;
            Assert.False(SendGridHelpers.IsToValid(mail));

            // Empty Personalization
            mail.Personalization = new List <Personalization>();
            Assert.False(SendGridHelpers.IsToValid(mail));

            // 'To' with no address
            Personalization personalization = new Personalization();

            personalization.AddTo(new Email());
            mail.AddPersonalization(personalization);
            Assert.False(SendGridHelpers.IsToValid(mail));

            // Personalization with no 'To'
            mail = new Mail();

            Personalization personalization1 = new Personalization();

            personalization1.AddTo(new Email("*****@*****.**"));

            Personalization personalization2 = new Personalization();

            personalization2.AddBcc(new Email("*****@*****.**"));

            mail.AddPersonalization(personalization1);
            mail.AddPersonalization(personalization2);

            Assert.False(SendGridHelpers.IsToValid(mail));

            // valid
            personalization2.AddTo(new Email("*****@*****.**"));
            Assert.True(SendGridHelpers.IsToValid(mail));
        }
        public void CreateConfiguration_CreatesExpectedConfiguration()
        {
            JObject config = new JObject();
            var     result = SendGridHelpers.CreateConfiguration(config);

            Assert.Null(result.FromAddress);
            Assert.Null(result.ToAddress);

            config = new JObject
            {
                { "sendGrid", new JObject
                  {
                      { "to", "Testing1 <*****@*****.**>" },
                      { "from", "Testing2 <*****@*****.**>" }
                  } }
            };
            result = SendGridHelpers.CreateConfiguration(config);

            Assert.Equal("*****@*****.**", result.ToAddress.Email);
            Assert.Equal("Testing1", result.ToAddress.Name);
            Assert.Equal("*****@*****.**", result.FromAddress.Email);
            Assert.Equal("Testing2", result.FromAddress.Name);
        }
        public void CreateMessage_CreatesExpectedMessage()
        {
            // multiple recipients
            string mail = @"{
              'personalizations': [
                {
                  'to': [
                    {
                      'email': '*****@*****.**'
                    },
                    {
                      'email': '*****@*****.**',
                      'name': 'Test Account 2'
                    }
                  ]
                }
              ],
              'from': {
                'email': '*****@*****.**',
                'name': 'Test Account 3'
              },
              'subject': 'Test Subject',
              'content': [
                {
                  'type': 'text/plain',
                  'value': 'Test Text'
                }
              ]
            }";

            SendGridMessage result = SendGridHelpers.CreateMessage(mail);

            Personalization p = result.Personalizations.Single();

            Assert.Equal(2, p.Tos.Count);
            Assert.Equal("*****@*****.**", p.Tos[0].Email);
            Assert.Equal("*****@*****.**", p.Tos[1].Email);
            Assert.Equal("Test Account 2", p.Tos[1].Name);
            Assert.Equal("*****@*****.**", result.From.Email);
            Assert.Equal("Test Account 3", result.From.Name);
            Assert.Equal("Test Subject", result.Subject);
            Assert.Equal("Test Text", result.Contents.Single().Value);

            // single recipient
            mail = @"{
              'personalizations': [
                {
                  'to': [
                    {
                      'email': '*****@*****.**',
                      'name': 'Test Account 2'
                    }
                  ]
                }
              ],
              'from': {
                'email': '*****@*****.**',
                'name': 'Test Account 3'
              },
              'subject': 'Test Subject',
              'content': [
                {
                  'type': 'text/plain',
                  'value': 'Test Text'
                }
              ]
            }";

            result = SendGridHelpers.CreateMessage(mail);
            p      = result.Personalizations.Single();

            Assert.Equal(1, p.Tos.Count);
            Assert.Equal("*****@*****.**", p.Tos[0].Email);
            Assert.Equal("Test Account 2", p.Tos[0].Name);
            Assert.Equal("*****@*****.**", result.From.Email);
            Assert.Equal("Test Account 3", result.From.Name);
            Assert.Equal("Test Subject", result.Subject);
            Assert.Equal("Test Text", result.Contents.Single().Value);
        }