diff --git a/src/Senders/FluentEmail.Mailgun/FluentEmail.Mailgun.csproj b/src/Senders/FluentEmail.Mailgun/FluentEmail.Mailgun.csproj index 2ad7eff6..03dcd2d9 100644 --- a/src/Senders/FluentEmail.Mailgun/FluentEmail.Mailgun.csproj +++ b/src/Senders/FluentEmail.Mailgun/FluentEmail.Mailgun.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Senders/FluentEmail.Mailgun/FluentEmailMailgunBuilderExtensions.cs b/src/Senders/FluentEmail.Mailgun/FluentEmailMailgunBuilderExtensions.cs index 69762e6d..14a13ddc 100644 --- a/src/Senders/FluentEmail.Mailgun/FluentEmailMailgunBuilderExtensions.cs +++ b/src/Senders/FluentEmail.Mailgun/FluentEmailMailgunBuilderExtensions.cs @@ -1,4 +1,8 @@ -using FluentEmail.Core.Interfaces; +using System; +using System.Net.Http.Headers; +using System.Net.Http; +using System.Text; +using FluentEmail.Core.Interfaces; using FluentEmail.Mailgun; using Microsoft.Extensions.DependencyInjection.Extensions; @@ -8,7 +12,28 @@ public static class FluentEmailMailgunBuilderExtensions { public static FluentEmailServicesBuilder AddMailGunSender(this FluentEmailServicesBuilder builder, string domainName, string apiKey, MailGunRegion mailGunRegion = MailGunRegion.USA) { - builder.Services.TryAdd(ServiceDescriptor.Scoped(_ => new MailgunSender(domainName, apiKey, mailGunRegion))); + builder.Services.AddHttpClient(nameof(MailgunSender), + client => + { + string url = string.Empty; + switch (mailGunRegion) + { + case MailGunRegion.USA: + url = $"https://api.mailgun.net/v3/{domainName}/"; + break; + case MailGunRegion.EU: + url = $"https://api.eu.mailgun.net/v3/{domainName}/"; + break; + + default: + throw new ArgumentException($"'{mailGunRegion}' is not a valid value for {nameof(mailGunRegion)}"); + } + + client.BaseAddress = new Uri(url); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes($"api:{apiKey}"))); + }); + + builder.Services.TryAdd(ServiceDescriptor.Scoped()); return builder; } } diff --git a/src/Senders/FluentEmail.Mailgun/MailgunSender.cs b/src/Senders/FluentEmail.Mailgun/MailgunSender.cs index c1f3f359..0698e44b 100644 --- a/src/Senders/FluentEmail.Mailgun/MailgunSender.cs +++ b/src/Senders/FluentEmail.Mailgun/MailgunSender.cs @@ -1,9 +1,6 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Net.Http; -using System.Net.Http.Headers; -using System.Text; using System.Threading; using System.Threading.Tasks; using FluentEmail.Core; @@ -15,33 +12,11 @@ namespace FluentEmail.Mailgun { public class MailgunSender : ISender { - private readonly string _apiKey; - private readonly string _domainName; - private HttpClient _httpClient; + private readonly HttpClient _httpClient; - public MailgunSender(string domainName, string apiKey, MailGunRegion mailGunRegion = MailGunRegion.USA) - { - _domainName = domainName; - _apiKey = apiKey; - string url = string.Empty; - switch(mailGunRegion) - { - case MailGunRegion.USA: - url = $"https://api.mailgun.net/v3/{_domainName}/"; - break; - case MailGunRegion.EU: - url = $"https://api.eu.mailgun.net/v3/{_domainName}/"; - break; - - default: - throw new ArgumentException($"'{mailGunRegion}' is not a valid value for {nameof(mailGunRegion)}"); - } - _httpClient = new HttpClient - { - BaseAddress = new Uri(url) - }; - - _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes($"api:{_apiKey}"))); + public MailgunSender(IHttpClientFactory httpClientfactory) + { + _httpClient = httpClientfactory.CreateClient(nameof(MailgunSender)); } public SendResponse Send(IFluentEmail email, CancellationToken? token = null) diff --git a/test/FluentEmail.Core.Tests/FluentEmail.Core.Tests.csproj b/test/FluentEmail.Core.Tests/FluentEmail.Core.Tests.csproj index cc26ca67..62da9162 100644 --- a/test/FluentEmail.Core.Tests/FluentEmail.Core.Tests.csproj +++ b/test/FluentEmail.Core.Tests/FluentEmail.Core.Tests.csproj @@ -14,6 +14,7 @@ + diff --git a/test/FluentEmail.Core.Tests/MailgunSenderTests.cs b/test/FluentEmail.Core.Tests/MailgunSenderTests.cs index 40cb8bf9..18d3763b 100644 --- a/test/FluentEmail.Core.Tests/MailgunSenderTests.cs +++ b/test/FluentEmail.Core.Tests/MailgunSenderTests.cs @@ -4,6 +4,8 @@ using FluentEmail.Core.Models; using NUnit.Framework; using Newtonsoft.Json; +using System.Net.Http; +using Moq; namespace FluentEmail.Mailgun.Tests { @@ -17,7 +19,7 @@ public class MailgunSenderTests [SetUp] public void SetUp() { - var sender = new MailgunSender("sandboxcf5f41bbf2f84f15a386c60e253b5fe9.mailgun.org", "key-8d32c046d7f14ada8d5ba8253e3e30de"); + var sender = new MailgunSender(Mock.Of()); Email.DefaultSender = sender; }