/// <summary>
        /// Creates the instance of a MailProvider using the given configuration.
        /// </summary>
        /// <param name="configurationLoader">The configuration to be supplied to the MailProvider. The configuration key value pairs are specific to providers.</param>
        /// <param name="mapper">The object mapper, used for mapping between E-Mail domain models and models used by third-party provider libraries.</param>
        /// <returns>The instantiated MailProvider.</returns>
        public IMailProvider GetProvider(IConfigurationLoader configurationLoader, IMapper mapper)
        {
            if (configurationLoader == null)
            {
                throw new ArgumentNullException(nameof(configurationLoader));
            }

            IMailProvider mailProvider = null;

            var config = configurationLoader.GetConfiguration();

            if (config.TryGetValue("MailProvider", out string provider))
            {
                if (!string.IsNullOrWhiteSpace(provider))
                {
                    switch (provider)
                    {
                    case nameof(Provider.SendGrid):
                        mailProvider = new SendGridProvider(configurationLoader);
                        break;

                    default:
                        throw new ArgumentException("Unknown provider.");
                    }
                }
            }
            else
            {
                throw new InvalidOperationException("Configuration is missing MailProvider.");
            }

            return(mailProvider);
        }
        public async void Send_WithDefaultFromAddress_Success()
        {
            _sendGridClient.Setup(client => client.SendEmailAsync(It.IsAny <SGMail.SendGridMessage>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new Response(System.Net.HttpStatusCode.Accepted, null, null));

            var provider = new SendGridProvider(
                new SendGridOptions {
                DefaultFromAddress = "*****@*****.**"
            },
                _sendGridClient.Object,
                _loggerFactory.Object);

            var message = new SendGridMessage
            {
                ToAddresses = new List <string> {
                    "*****@*****.**"
                },
                Subject = "Test Email"
            };

            var result = await provider.Send(message.ToParameters());

            Assert.True(result.IsSuccess);
            Assert.Empty(result.Errors);
        }
        public async void Send_Failed()
        {
            _sendGridClient.Setup(client => client.SendEmailAsync(It.IsAny <SGMail.SendGridMessage>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new Response(System.Net.HttpStatusCode.BadRequest, new StringContent("Error01"), null));

            var message = new SendGridMessage
            {
                FromAddress = "*****@*****.**",
                ToAddresses = new List <string> {
                    "*****@*****.**"
                },
                Subject = "Test Email"
            };

            var provider = new SendGridProvider(_sendGridClient.Object, _loggerFactory.Object);

            var result = await provider.Send(message.ToParameters());

            Assert.False(result.IsSuccess);
            Assert.NotEmpty(result.Errors);
            Assert.Equal("Error01", result.Errors[0]);

            var startMessage = LoggerHelper.FormatLogValues(SendGridLogMessages.Sending_Start, message.Subject, message.ToAddresses);

            _logger.VerifyLog(LogLevel.Debug, startMessage);

            var endMessage = LoggerHelper.FormatLogValues(SendGridLogMessages.Sending_End, message.Subject, message.ToAddresses);

            _logger.VerifyLog(LogLevel.Debug, endMessage, Times.Never());
        }
        public async void Send_WithoutFromAddress_ReturnError()
        {
            var provider = new SendGridProvider(_sendGridClient.Object, _loggerFactory.Object);

            var message = new SendGridMessage
            {
                ToAddresses = new List <string> {
                    "*****@*****.**"
                },
                Subject = "Test Email"
            };

            var result = await provider.Send(message.ToParameters());

            Assert.False(result.IsSuccess);
            Assert.Equal("From Address should not be empty", result.Errors[0]);
        }
Exemple #5
0
        public static IEmailProvider getEmailInstance(EmailEnum emailProvider)
        {
            IEmailProvider _emailProvider;

            switch (emailProvider.ToString())
            {
            case "MailGun":
                _emailProvider = new MailGunProvider();
                break;

            case "SendGrid":
                _emailProvider = new SendGridProvider();
                break;

            default:
                _emailProvider = new SendGridProvider();
                break;
            }
            return(_emailProvider);
        }
 public SendGridEmailService(ILogger <SendGridException> logger)
 {
     this.logger           = logger;
     this.sendGridProvider = new SendGridProvider();
 }