示例#1
0
        ///<inheritdoc/>
        public async Task <(SendMailResult, Guid)> SendMail(IMessage message, IEmailAddress redirectTo)
        {
            Guid requestId = await _mailRepository.SaveRequestAsync(message);

            IMessageHandle msgToSend;

            if (_isProduction)
            {
                msgToSend =
                    new Message
                    (
                        message.Subject,
                        message.Content,
                        message.From,
                        message.ReplyTo,
                        message.To.ToList(),
                        message.Cc.ToList(),
                        message.Bcc.ToList(),
                        message.Files.ToList(),
                        message.EnableHtml
                    );
            }
            else
            {
                if (string.IsNullOrWhiteSpace((redirectTo ?? _redirectOptions).Email))
                {
                    throw new ArgumentNullException("RedirectTo options parameters is not defined in application settings");
                }

                msgToSend =
                    new Message
                    (
                        message.Subject,
                        message.Content,
                        message.From,
                        message.ReplyTo,
                        new List <IEmailAddress>()
                {
                    redirectTo ?? _redirectOptions
                },
                        null,
                        null,
                        message.Files.ToList(),
                        message.EnableHtml
                    );
            }

            if (message.Headers.Count > 0)
            {
                foreach (KeyValuePair <string, string> header in message.Headers)
                {
                    msgToSend.AddHeader(header.Key, header.Value);
                }
            }

            SendMailResult mailResult = await _sender.SendMailAsync(msgToSend);

            return(mailResult, requestId);
        }
        public void TestSendThroughProviderSpecified()
        {
            SendMailRequest request = Utility.GetTemplateRequest();

            request.Providers = new List <ProviderInfo>()
            {
                new ProviderInfo {
                    ProviderType = ProviderType.SendGrid, ApiKey = Configuration.SendGridApiKey
                },
            };

            SendMailResult result = SendMailRequestProcessor.ProcessSendMailRequest(request);

            Assert.AreEqual(result.ProviderUsed, ProviderType.SendGrid);
        }
        public void TestFailoverToSecondProvider()
        {
            SendMailRequest request = Utility.GetTemplateRequest();

            request.Providers = new List <ProviderInfo>()
            {
                new ProviderInfo {
                    ProviderType = ProviderType.SendGrid, ApiKey = "IncorrectApiKey"
                },
                new ProviderInfo {
                    ProviderType = ProviderType.MailGun, ApiKey = Configuration.MailGunApiKey
                },
            };

            SendMailResult result = SendMailRequestProcessor.ProcessSendMailRequest(request);

            Assert.AreEqual(result.ProviderUsed, ProviderType.MailGun);
        }
        public void TestFailoverToThirdProvider()
        {
            SendMailRequest request = Utility.GetTemplateRequest();

            // specify incorrect key for two providers, the third one should be used
            request.Providers = new List <ProviderInfo>()
            {
                new ProviderInfo {
                    ProviderType = ProviderType.SendGrid, ApiKey = "IncorrectApiKey"
                },
                new ProviderInfo {
                    ProviderType = ProviderType.MailGun, ApiKey = "IncorrectApiKey"
                },
            };

            SendMailResult result = SendMailRequestProcessor.ProcessSendMailRequest(request);

            Assert.AreEqual(result.ProviderUsed, ProviderType.Mandrill);
        }
        public void TestEmailFormat()
        {
            SendMailRequest request = Utility.GetTemplateRequest();

            // sender with name is accepted
            request.From = @"Test sender <*****@*****.**>";

            // multiple recipients are accepted
            // recipient with name is accepted
            request.To.Add(@"SimpleMail SendingService <*****@*****.**");

            request.Providers = new List <ProviderInfo>()
            {
                new ProviderInfo {
                    ProviderType = ProviderType.SendGrid, ApiKey = Configuration.SendGridApiKey
                },
            };

            SendMailResult result = SendMailRequestProcessor.ProcessSendMailRequest(request);

            Assert.AreEqual(result.ProviderUsed, ProviderType.SendGrid);
        }